From: Jason Thomas Subject: Add support for returning random usernames Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=115204 --- nullidentd-1.0.orig/nullidentd.c +++ nullidentd-1.0/nullidentd.c @@ -7,9 +7,11 @@ */ #include +#include #include #include #include +#include #include "version.h" @@ -18,6 +20,7 @@ #define MAX_RESPONSE 200 #define MAX_REQUEST 100 #define MAX_USERID 50 +#define MAX_RANDOMID 8 void usage() { @@ -46,7 +49,6 @@ int write_response( int fd, char *respon int read_request( int fd, char *request, int maxlen ) { - int retval; char c; int bytesread = 0; @@ -76,6 +78,22 @@ int read_request( int fd, char *request, return 1; } +char *random_userid( void ) +{ + static char buf[MAX_RANDOMID+1]; + size_t i; + static const char valid[] = + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + + for (i = 0 ; i < MAX_RANDOMID ; i++) + buf[i] = valid[rand() % (sizeof(valid) - 1)]; + + buf[i] = '\0'; + + return buf; +} + + void session_timeout( int foo ) { exit( 0 ); @@ -84,12 +102,12 @@ void session_timeout( int foo ) int main( int argc, const char *argv[] ) { const char * userid = "foobar"; - char c; int infd; int outfd; int response_len; char response[MAX_RESPONSE]; char request[MAX_REQUEST]; + int gen_random = 0; if( getgid() == 0 ) { fprintf( stderr, "Group id is root, exitting.\n" ); @@ -114,6 +132,10 @@ int main( int argc, const char *argv[] ) } } + if (strcmp(userid, "RANDOM") == 0) { + gen_random = 1; + } + infd = fileno( stdin ); outfd = fileno( stdout ); @@ -121,6 +143,8 @@ int main( int argc, const char *argv[] ) signal( SIGALRM, session_timeout ); alarm( SESSION_TIMEOUT ); + srand(getpid() ^ time(NULL)); + for( ;; ) { /* read the request */ if( !read_request( infd, request, MAX_REQUEST ) ) { @@ -128,6 +152,10 @@ int main( int argc, const char *argv[] ) goto done; } + if (gen_random) { + userid = random_userid(); + } + /* format the response */ response_len = snprintf( response, sizeof( response ), "%.20s : USERID : UNIX : %.20s\r\n", request, userid ); @@ -140,4 +168,3 @@ int main( int argc, const char *argv[] ) done: return 0; } -