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 ====
==== 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 <sys/types.h> #include <unistd.h> #include <pwd.h>
}
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) { } seteuid(pwd->pw_uid); return 1;
}
critcl::cproc getuid {} int {
return getuid();
}
critcl::cproc geteuid {} int {
return geteuid();
}
critcl::cproc setsid {} int {
return setsid();
} ====