#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>

main(){
    struct passwd *pw;
    uid_t euid;
    char *home_dir;
    char target[128];
    int len;

    euid = geteuid();		/* 実効 UID を取得 */
    pw = getpwuid(euid);	/* 実効 UID のホームディレクトリを取得 */
    if ( pw == NULL ){
        fprintf(stderr,"Can't get home directory.\n");
        return 1;
    }
    
    home_dir = pw->pw_dir;

    /* /home/foo/public_html/webcgi/sample/perl/whoami.pl を target に */
    len = snprintf(target,sizeof(target),"%s/public_html/webcgi/sample/perl/whoami.pl", home_dir);

  
    if ( len >= sizeof(target) ){     /* バッファが小さすぎる */
        fprintf(stderr,"Buffer is too short.\n");
        return 1;
    }

    execl(target,target,NULL);	/* 実行 */
  
				/* exec からは戻ってこないはずなのに…エラー */
    fprintf(stderr,"Can't exec %s\n",target);
    return 1;
}
