--- lib/Cm/CmMain.cc.orig 2009-08-27 09:10:04.000000000 +0900 +++ lib/Cm/CmMain.cc 2013-05-04 04:59:43.000000000 +0900 @@ -48,13 +48,17 @@ #include #include #include +#include +#if __FreeBSD_version <= 900006 #include +#else +#include +#endif #include #include #include #include #include -#include extern int causeStopSignals[]; static int stopSingals[]={SIGINT,SIGQUIT,SIGTERM,0}; extern void applicationMain(CmMain*); @@ -129,21 +133,37 @@ //---------------------------------------------------------------------- // 障害解析情報作成 +#if __FreeBSD_version <= 900006 static struct utmp *myUtmpEnt(FILE *in,struct utmp *u) { - int s=ttyslot(); + int s = 0; if(s<0||fseek(in,sizeof(struct utmp)*s,0)<0|| fread(u,sizeof(struct utmp),1,in)==0) {return 0;} return u;} void CmMain::makeCatch2Eye(STR p) { static char catch2[]=" on %*.*s:%-*.*s from %*.*s"; struct utmp ux[1], *u; FILE *in; - if((in=fopen("/etc/utmp","r"))==NULL) {return;} + if((in=fopen(_PATH_UTMP,"r"))==NULL) {return;} u=myUtmpEnt(in,ux); fclose(in); if(!u) {return;} #define A(a)sizeof(a),sizeof(a),a sprintf(p,catch2,A(u->ut_line),A(u->ut_name),A(u->ut_host)); #undef A return;} +#else +void CmMain::makeCatch2Eye(STR p) { +static char catch2[]=" on %*.*s:%-*.*s from %*.*s"; + struct utmpx ux, *u; + memset(&ux, 0, sizeof(ux)); + ux.ut_type = USER_PROCESS; + snprintf(ux.ut_user, sizeof(ux.ut_user), "%d", getuid()); + u = getutxuser(ux.ut_user); + if (u == NULL) + return; +#define A(a)sizeof(a),sizeof(a),a + sprintf(p, catch2, A(u->ut_line), A(u->ut_user), A(u->ut_host)); +#undef A + return;} +#endif void CmMain::makeCatchEye(const STR pgmName) { static char catch1[]="@(#) %02d/%02d/%02d %02d:%02d:%02d %s STARTED by %s@%s"; time_t now=time(0); struct tm *m=localtime(&now);