I had the need to access some C library functions that weren't available via standard Tcl or [TclX], so I wrote a simple wrapper using [Critcl]. These are wrappers for some of the set/get uid functions in Unix, but you could use the same approach for most functions - [stevel] April 5 2004 Compile using $ critcl -pkg uid.tcl You'll end up with a lib/uid directory containing a package ready for dropping into a [Starkit] lib directory, or anywhere on your auto_path. package require critcl package provide uid 1.0 if {![critcl::compiling]} { puts stderr "This extension cannot be compiled without critcl enabled" exit 1 } critcl::ccode { #include #include #include } critcl::cproc setusergroup {char* name} int { struct passwd *pwd = getpwnam(name); if (pwd == NULL) { return 0; } initgroups(name,pwd->pw_gid); setgid(pwd->pw_gid); setuid(pwd->pw_uid); return 1; } critcl::cproc setuid {char* name} int { struct passwd *pwd = getpwnam(name); if (pwd == NULL) { return 0; } setuid(pwd->pw_uid); return 1; } critcl::cproc seteuid {char* name} int { struct passwd *pwd = getpwnam(name); if (pwd == NULL) { return 0; } seteuid(pwd->pw_uid); return 1; } critcl::cproc getuid {} int { return getuid(); } critcl::cproc geteuid {} int { return geteuid(); } critcl::cproc setsid {} int { return setsid(); } ---- [[ [Category Critcl] | [Category System Administration] ]]