summaryrefslogtreecommitdiffstats
path: root/adduser/addgroup.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'adduser/addgroup.tcl')
-rw-r--r--adduser/addgroup.tcl191
1 files changed, 0 insertions, 191 deletions
diff --git a/adduser/addgroup.tcl b/adduser/addgroup.tcl
deleted file mode 100644
index 25aeab6..0000000
--- a/adduser/addgroup.tcl
+++ /dev/null
@@ -1,191 +0,0 @@
-#!/usr/bin/tclsh
-# Copyright (c) 1996 Wolfram Schneider <wosch@FreeBSD.org>. Berlin.
-# All rights reserved.
-#
-# addgroup - add a group or add users to a group
-#
-# addgroup [-g gid] group [user[,user,...]]
-#
-#
-# addgroup -g 2000 foobar
-#
-# Add group `foobar' to group database. Group id is 2000 if
-# possible or higher. Don't add group `foobar' if `foobar' is
-# already in group database.
-#
-#
-# addgroup foo blech,bar
-#
-# Add user `blech' and user `bar' to group `foo'. Create group
-# `foo' with default gid if not exists.
-#
-#
-# The option [-g gid] is only for new groups.
-#
-# see group(5)
-#
-# TODO:
-# file locking
-# signal handling
-# add only users who exist
-#
-# $Id$
-
-# set global variables
-set etc_group "/etc/group"; #set etc_group "/usr/tmp/group"
-set gid_start 1000
-set gid_max 65500
-
-proc putsErr {string} {
- if {[catch {open "/dev/stderr" w} stderr]} {
- puts $stderr
- } else {
- puts $stderr $string
- close $stderr
- }
-}
-
-proc usage {} {
- putsErr {usage: addgroup group [user]}
- putsErr { addgroup [-g gid] group [user[,user,...]]}
- exit 1
-}
-
-# check double user names: foo,bla,foo
-proc double_name {groupmembers} {
- set l [split $groupmembers ","]
- if {[llength $l] > 1} {
- for {set i 0} {$i < [llength $l]} {incr i} {
- if {[lsearch [lrange $l [expr $i + 1] end] \
- [lindex $l $i]] != -1} {
- putsErr "Double user name: [lindex $l $i]"
- return 1
- }
- }
- }
- return 0
-}
-
-# cleanup and die
-proc Err {string} {
- upvar etc_group_new new
- putsErr "$string"
- exec rm -f $new
- exit 1
-}
-
-if {$argc < 1} { usage }
-
-# check options
-switch -glob -- [lindex $argv 0] {
- -g* {
- if {$argc < 2} {
- putsErr "Missing group id"
- usage
- }
- set g [lindex $argv 1]
- if {$g < 100 || $g >= $gid_max} {
- putsErr "Group id out of range 100 < $g < $gid_max"
- usage
- }
- set gid_start $g
- incr argc -2
- set argv [lrange $argv 2 end]
- }
- -* { usage }
-}
-
-if {$argc < 1} { usage }
-
-# read group name
-set groupname [lindex $argv 0]
-if {[string match "*:*" $groupname] != 0} {
- putsErr "Colon are not allowed in group name: ``$groupname''"
- usage
-}
-
-# read optional group members
-if {$argc == 2} {
- set groupmembers [lindex $argv 1]
- if {[string match "*:*" $groupmembers] != 0} {
- putsErr "Colon are not allowed in user names: ``$groupmembers''"
- usage
- }
- if {[double_name $groupmembers] != 0} {
- usage
- }
-} else {
- set groupmembers ""
-}
-
-
-# open /etc/group database
-if {[catch {open $etc_group r} db]} {
- Err $db
-}
-
-# open temporary database
-set etc_group_new "$etc_group.new";
-if {[catch {open $etc_group_new w} db_new]} {
- Err $db_new
-}
-set done 0
-
-while {[gets $db line] >= 0 } {
- if {$done > 0} {
- puts $db_new $line
- continue
- }
-
- # ``group:passwd:gid:member''
- # 0 1 2 3
- set l [split $line ":"]
- set group([lindex $l 0]) [lindex $l 2]
- set gid([lindex $l 2]) [lindex $l 0]
- set member([lindex $l 0]) [lindex $l 3]
-
- # found existing group
- if {[string compare [lindex $l 0] $groupname] == 0} {
- if {[string compare $groupmembers ""] == 0} {
- Err "Group exists: ``$groupname''"
- }
-
- # add new group members
- set y [lindex $l 3]
-
- # group with no group members?
- if {[string compare $y ""] == 0} {
- puts $db_new "$line$groupmembers"
- } else {
- if {[double_name "$y,$groupmembers"] != 0} {
- Err "\t$line,$groupmembers"
- } else {
- puts $db_new "$line,$groupmembers"
- }
- }
- set done 1
- } else {
- puts $db_new $line
- }
-}
-
-# add a new group
-if {$done == 0} {
- for {set i $gid_start} {$i < $gid_max} {incr i} {
- if {[info exists gid($i)] == 0} {
- puts $db_new "$groupname:*:$i:$groupmembers"
- set done 1
- break
- }
- }
-
- # no free group id
- if {$done == 0} {
- Err "Cannot find free group id: ``$groupname''"
- }
-}
-
-close $db_new
-close $db
-exec cp -pf $etc_group "$etc_group.bak"
-exec mv -f $etc_group_new $etc_group