Changeset 492


Ignore:
Timestamp:
Oct 25, 2010, 4:56:54 PM (15 years ago)
Author:
Herwig Bauernfeind
Message:

usermod.cmd Ver. 2.3.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/scripts/user/usermod.cmd

    r299 r492  
    11/* UserMod script for Samba Server for eCS (OS/2) */
    2    Version = '2.2.1'
    3 /* Copyright (C) netlabs.org 2007-2009
     2   Version = '2.3.0'
     3/* Copyright (C) netlabs.org, Herwig Bauernfeind 2007-2010
    44
    55   This program is free software; you can redistribute it and/or modify
     
    6262UserExists = _UserIsValid(User)
    6363select
     64    when mode = "F" & user <> "" then do
     65        say 'Must not specify user when fixing home directories!'
     66        exit 247
     67    end
    6468    when mode = "P" & \UserExists then do
    6569        say 'User "'User'" is invalid - cannot set primary GID!'
     
    9094        exit 254
    9195    end
    92     when mode = "?" | mode = "H" | arg(1) = "/?" | (User = "" & mode <> "") then do
     96    when mode = "?" | mode = "H" | arg(1) = "/?" | (User = "" & mode <> "" & mode <>"F") then do
    9397        if (User = "" & mode <> "" & mode <> "?" & mode <> "H") then say "Ambiguos commandline. Check syntax!"
    9498        say
     
    97101        say 'Rename a kLIBC user:    usermod -r "oldusername" "newusername"'
    98102        say 'Set user''s primary GID: usermod -p "username" "group"'
     103        say 'Fix home directories:   usermod -f'
    99104        say
    100105        say 'usermod without parameters just rewrites kLIBC password database'
     
    109114    when mode = "R" then call _UserRename
    110115    when mode = "P" then call _SetPrimaryGID
     116    when mode = "F" then call _FixHomes
    111117    otherwise nop
    112118end
     
    378384_UserAdd: /* add a user to master.passwd STEMS and group STEMS */
    379385    /* Minimum UID that a user can obtain */
    380 call beep 880, 50
    381386    MinUID = 100
    382387    if translate(User) = "ROOT"   then MinUID = 0
     
    403408    pwchange.I   = '0'     /* dummy value */
    404409    deact.I      = '0'     /* dummy value */
    405     if \MachineAccount then do
     410    if \MachineAccount then do /* Human users */
    406411        if uid.I = 0 then do
    407412            if Group512 <> 0 then gid.I = 512; else gid.I = 0
     
    411416                then gid.I = 513; else gid.I = NextUID /* GID must be UID for guest account */
    412417        end
    413         gecos.I      = User                /* not really appropriate, but better than a dummy value */
    414         home.I       = '/nonexistent'      /* a suitable default for OS/2 should be added here */
    415         shell.I      = '/usr/sbin/nologin' /* dummy value */
    416     end
    417     else do
     418        gecos.I      = User                 /* not really appropriate, but better than a dummy value */
     419        home.I       = _Home(User)          /* make sure %HOME%\User is created */
     420        shell.I      = '/usr/sbin/nologin'  /* dummy value */
     421    end
     422    else do /* Machine accounts */
    418423        if Group515 <> 0 then gid.I = 515; else gid.I = NextUID /* Should be group ID (GID) !!! */
    419424        gecos.I      = 'Machine account'
     
    499504    end
    500505return
     506
     507_Home: procedure
     508    user = arg(1)
     509    curhome = value("HOME",,"OS2ENVIRONMENT")
     510    if curhome = "" then do
     511        curhome = SysBootDrive()||'\HOME'
     512        ok = SysMkDir(Curhome)
     513        say
     514        say 'WARNING! %HOME% not set properly, assuming "'curhome'"'
     515        say 'Add SET HOME='curhome'\default to your CONFIG.SYS.'
     516        curhome = curhome||'\'
     517    end
     518    home = filespec("D",curhome)||filespec("P",curHome)||user
     519    ok = SysMkDir(home)
     520    home = translate(home,'$/',':\')
     521return home
     522
     523_FixHomes:
     524    say 'Checking home for 'username.0' users.'
     525    maxulen = 0
     526    maxhlen = 0
     527    do I = 1 to username.0
     528        ulen = length(username.I)
     529        if ulen > maxulen then maxulen = ulen
     530        hlen = length(home.I)
     531        if hlen > maxhlen then maxhlen = hlen
     532    end
     533
     534    do I = 1 to username.0
     535        if pos('$',username.I) = 0 then do /* do not touch machine accounts */
     536            os2home = translate(left(home.I,2),':','$')||translate(substr(home.I,3),'\','/')
     537            call charout ,'User: 'left(username.I,maxulen)' Home: 'left(os2home,maxhlen)' Status: '
     538            if VRFileExists(os2home) = 0 then do
     539                oldhome = home.I
     540                home.I = _Home(Username.I)
     541                os2home = translate(left(home.I,2),':','$')||translate(substr(home.I,3),'\','/')
     542                if VRFileExists(os2home) = 0 then do
     543                    say 'Could not fix home - reverting...'
     544                    home.I = oldhome
     545                end
     546                else say 'Fixed.'
     547            end
     548            else say 'OK.'
     549        end
     550        else do
     551            say 'User: 'left(username.I,maxulen)' Home: 'left(home.I,maxhlen)' Status: Machine account.'
     552        end
     553    end
     554    say 'Ready, rewriting database now.'
     555return
Note: See TracChangeset for help on using the changeset viewer.