本文整理汇总了C++中pututxline函数的典型用法代码示例。如果您正苦于以下问题:C++ pututxline函数的具体用法?C++ pututxline怎么用?C++ pututxline使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pututxline函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: vsf_insert_uwtmp
void
vsf_insert_uwtmp(const struct mystr* p_user_str,
const struct mystr* p_host_str)
{
if (sizeof(s_utent.ut_line) < 16)
{
return;
}
if (s_uwtmp_inserted)
{
bug("vsf_insert_uwtmp");
}
{
struct mystr line_str = INIT_MYSTR;
str_alloc_text(&line_str, "vsftpd:");
str_append_ulong(&line_str, vsf_sysutil_getpid());
if (str_getlen(&line_str) >= sizeof(s_utent.ut_line))
{
str_free(&line_str);
return;
}
vsf_sysutil_strcpy(s_utent.ut_line, str_getbuf(&line_str),
sizeof(s_utent.ut_line));
str_free(&line_str);
}
s_uwtmp_inserted = 1;
s_utent.ut_type = USER_PROCESS;
s_utent.ut_pid = vsf_sysutil_getpid();
vsf_sysutil_strcpy(s_utent.ut_user, str_getbuf(p_user_str),
sizeof(s_utent.ut_user));
vsf_sysutil_strcpy(s_utent.ut_host, str_getbuf(p_host_str),
sizeof(s_utent.ut_host));
s_utent.ut_tv.tv_sec = vsf_sysutil_get_time_sec();
setutxent();
(void) pututxline(&s_utent);
endutxent();
updwtmpx(WTMPX_FILE, &s_utent);
}
开发者ID:schidler,项目名称:flyzjhz-rt-n56u,代码行数:38,代码来源:sysdeputil.c
示例2: add_utmp_entry
static void
add_utmp_entry(main_server_st *s, struct proc_st* proc)
{
#ifdef HAVE_LIBUTIL
struct utmpx entry;
struct timespec tv;
if (s->config->use_utmp == 0)
return;
memset(&entry, 0, sizeof(entry));
entry.ut_type = USER_PROCESS;
entry.ut_pid = proc->pid;
snprintf(entry.ut_line, sizeof(entry.ut_line), "%s", proc->tun_lease.name);
snprintf(entry.ut_user, sizeof(entry.ut_user), "%s", proc->username);
#ifdef __linux__
if (proc->remote_addr_len == sizeof(struct sockaddr_in))
memcpy(entry.ut_addr_v6, SA_IN_P(&proc->remote_addr), sizeof(struct in_addr));
else
memcpy(entry.ut_addr_v6, SA_IN6_P(&proc->remote_addr), sizeof(struct in6_addr));
#endif
gettime(&tv);
entry.ut_tv.tv_sec = tv.tv_sec;
entry.ut_tv.tv_usec = tv.tv_nsec / 1000;
getnameinfo((void*)&proc->remote_addr, proc->remote_addr_len, entry.ut_host, sizeof(entry.ut_host), NULL, 0, NI_NUMERICHOST);
setutxent();
pututxline(&entry);
endutxent();
#if defined(WTMPX_FILE)
updwtmpx(WTMPX_FILE, &entry);
#endif
return;
#endif
}
开发者ID:cernekee,项目名称:ocserv,代码行数:38,代码来源:main-user.c
示例3: dologin
/*
* Record login in wtmp file.
*/
void dologin(struct passwd *pw, struct sockaddr *sin)
{
#if __FreeBSD_version >= 900007
struct utmpx ut;
memset(&ut, 0, sizeof ut);
ut.ut_type = USER_PROCESS;
gettimeofday(&ut.ut_tv, NULL);
ut.ut_pid = getpid();
snprintf(ut.ut_id, sizeof ut.ut_id, "%xuucp", ut.ut_pid);
SCPYN(ut.ut_user, pw->pw_name);
realhostname_sa(ut.ut_host, sizeof ut.ut_host, sin, sin->sa_len);
pututxline(&ut);
#else
char line[32];
char remotehost[UT_HOSTSIZE + 1];
int f;
time_t cur_time;
realhostname_sa(remotehost, sizeof(remotehost) - 1, sin, sin->sa_len);
remotehost[sizeof remotehost - 1] = '\0';
/* hack, but must be unique and no tty line */
sprintf(line, "uucp%ld", (long)getpid());
time(&cur_time);
if ((f = open(_PATH_LASTLOG, O_RDWR)) >= 0) {
struct lastlog ll;
ll.ll_time = cur_time;
lseek(f, (off_t)pw->pw_uid * sizeof(struct lastlog), L_SET);
SCPYN(ll.ll_line, line);
SCPYN(ll.ll_host, remotehost);
(void) write(f, (char *) &ll, sizeof ll);
(void) close(f);
}
logwtmp(line, pw->pw_name, remotehost);
#endif
}
开发者ID:dinoex,项目名称:freebsd-uucp,代码行数:41,代码来源:uucpd.c
示例4: utmpx_update
static void
utmpx_update(struct utmpx *ut, char *line, const char *user, const char *host)
{
struct timeval tmp;
char *clean_tty = clean_ttyname(line);
strncpy(ut->ut_line, clean_tty, sizeof(ut->ut_line));
#ifdef HAVE_STRUCT_UTMPX_UT_ID
strncpy(ut->ut_id, make_id(clean_tty), sizeof(ut->ut_id));
#endif
strncpy(ut->ut_user, user, sizeof(ut->ut_user));
shrink_hostname (host, ut->ut_host, sizeof(ut->ut_host));
#ifdef HAVE_STRUCT_UTMPX_UT_SYSLEN
ut->ut_syslen = strlen(host) + 1;
if (ut->ut_syslen > sizeof(ut->ut_host))
ut->ut_syslen = sizeof(ut->ut_host);
#endif
ut->ut_type = USER_PROCESS;
gettimeofday (&tmp, 0);
ut->ut_tv.tv_sec = tmp.tv_sec;
ut->ut_tv.tv_usec = tmp.tv_usec;
pututxline(ut);
#ifdef WTMPX_FILE
updwtmpx(WTMPX_FILE, ut);
#elif defined(WTMP_FILE)
{ /* XXX should be removed, just drop wtmp support */
struct utmp utmp;
int fd;
prepare_utmp (&utmp, line, user, host);
if ((fd = open(_PATH_WTMP, O_WRONLY|O_APPEND, 0)) >= 0) {
write(fd, &utmp, sizeof(struct utmp));
close(fd);
}
}
#endif
}
开发者ID:appleorange1,项目名称:bitrig,代码行数:37,代码来源:utmpx_login.c
示例5: login_utmpx
static void
login_utmpx(struct utmpx *utmpx, const char *username, const char *hostname,
const char *tty, const struct timeval *now)
{
const char *t;
(void)memset(utmpx, 0, sizeof(*utmpx));
utmpx->ut_tv = *now;
(void)strncpy(utmpx->ut_name, username, sizeof(utmpx->ut_name));
if (hostname)
(void)strncpy(utmpx->ut_host, hostname, sizeof(utmpx->ut_host));
(void)strncpy(utmpx->ut_line, tty, sizeof(utmpx->ut_line));
utmpx->ut_type = USER_PROCESS;
utmpx->ut_pid = getpid();
t = tty + strlen(tty);
if ((size_t)(t - tty) >= sizeof(utmpx->ut_id)) {
(void)strncpy(utmpx->ut_id, t - sizeof(utmpx->ut_id),
sizeof(utmpx->ut_id));
} else {
(void)strncpy(utmpx->ut_id, tty, sizeof(utmpx->ut_id));
}
(void)pututxline(utmpx);
endutxent();
}
开发者ID:Hooman3,项目名称:minix,代码行数:24,代码来源:utmp.c
示例6: dologout
void dologout(void)
{
int status;
pid_t pid;
#if __FreeBSD_version >= 900007
struct utmpx ut;
#else
char line[32];
#endif
while ((pid=wait((int *)&status)) > 0) {
#if __FreeBSD_version >= 900007
memset(&ut, 0, sizeof ut);
ut.ut_type = DEAD_PROCESS;
gettimeofday(&ut.ut_tv, NULL);
ut.ut_pid = pid;
snprintf(ut.ut_id, sizeof ut.ut_id, "%xuucp", pid);
pututxline(&ut);
#else
sprintf(line, "uucp%ld", (long)pid);
logwtmp(line, "", "");
#endif
}
}
开发者ID:dinoex,项目名称:freebsd-uucp,代码行数:24,代码来源:uucpd.c
示例7: Q_D
void KPty::logout()
{
#ifdef HAVE_UTEMPTER
Q_D(KPty);
removeLineFromUtmp(d->ttyName, d->masterFd);
#else
Q_D(KPty);
const char *str_ptr = d->ttyName.data();
if (!memcmp(str_ptr, "/dev/", 5)) {
str_ptr += 5;
}
# ifdef __GLIBC__
else {
const char * sl_ptr = strrchr(str_ptr, '/');
if (sl_ptr) {
str_ptr = sl_ptr + 1;
}
}
# endif
# ifdef HAVE_LOGIN
# ifdef HAVE_LOGINX
::logoutx(str_ptr, 0, DEAD_PROCESS);
# else
::logout(str_ptr);
# endif
# else
# ifdef HAVE_UTMPX
struct utmpx l_struct, *ut;
# else
struct utmp l_struct, *ut;
# endif
memset(&l_struct, 0, sizeof(l_struct));
strncpy(l_struct.ut_line, str_ptr, sizeof(l_struct.ut_line));
# ifdef HAVE_UTMPX
utmpxname(_PATH_UTMPX);
setutxent();
if ((ut = getutxline(&l_struct))) {
# else
utmpname(_PATH_UTMP);
setutent();
if ((ut = getutline(&l_struct))) {
# endif
memset(ut->ut_name, 0, sizeof(*ut->ut_name));
memset(ut->ut_host, 0, sizeof(*ut->ut_host));
# ifdef HAVE_STRUCT_UTMP_UT_SYSLEN
ut->ut_syslen = 0;
# endif
# ifdef HAVE_STRUCT_UTMP_UT_TYPE
ut->ut_type = DEAD_PROCESS;
# endif
# ifdef HAVE_UTMPX
gettimeofday(&ut->ut_tv, 0);
pututxline(ut);
}
endutxent();
# else
ut->ut_time = time(0);
pututline(ut);
}
endutent();
# endif
# endif
#endif
}
开发者ID:curvedspace,项目名称:terminal,代码行数:68,代码来源:kpty.cpp
示例8: utmp_logout
void
utmp_logout (char *line)
{
#ifdef HAVE_UTMPX_H
struct utmpx utx;
struct utmpx *ut;
strncpy (utx.ut_line, line, sizeof (utx.ut_line));
# ifdef HAVE_PUTUTXLINE
setutxent();
ut = getutxline (&utx);
if (ut)
{
struct timeval tv;
ut->ut_type = DEAD_PROCESS;
# ifdef HAVE_STRUCT_UTMPX_UT_EXIT
memset (&ut->ut_exit, 0, sizeof (ut->ut_exit));
# endif
gettimeofday (&tv, 0);
ut->ut_tv.tv_sec = tv.tv_sec;
ut->ut_tv.tv_usec = tv.tv_usec;
# ifdef HAVE_STRUCT_UTMPX_UT_USER
memset (&ut->ut_user, 0, sizeof (ut->ut_user));
# elif defined HAVE_STRUCT_UTMPX_UT_NAME
memset (&ut->ut_name, 0, sizeof (ut->ut_name));
# endif
# ifdef HAVE_STRUCT_UTMPX_UT_HOST
memset (ut->ut_host, 0, sizeof (ut->ut_host));
# ifdef HAVE_STRUCT_UTMPX_UT_SYSLEN
ut->ut_syslen = 1; /* Counting NUL. */
# endif
# endif /* UT_HOST */
pututxline (ut);
/* Some systems perform wtmp updating
* already in calling pututxline().
*/
# ifdef HAVE_UPDWTMPX
updwtmpx (PATH_WTMPX, ut);
# elif defined HAVE_LOGWTMPX
logwtmpx (ut->ut_line, "", "", 0, DEAD_PROCESS);
# endif
}
endutxent ();
# elif defined HAVE_LOGOUTX /* !HAVE_PUTUTXLINE */
if (logoutx (line, 0, DEAD_PROCESS))
logwtmpx (line, "", "", 0, DEAD_PROCESS);
# endif /* HAVE_LOGOUTX */
#else /* !HAVE_UTMPX_H */
struct utmp utx;
# ifdef HAVE_PUTUTLINE
struct utmp *ut;
# endif
strncpy (utx.ut_line, line, sizeof (utx.ut_line));
# ifdef HAVE_PUTUTLINE
setutent();
ut = getutline (&utx);
if (ut)
{
# ifdef HAVE_STRUCT_UTMP_UT_TV
struct timeval tv;
# endif
# ifdef HAVE_STRUCT_UTMP_UT_TYPE
ut->ut_type = DEAD_PROCESS;
# endif
# ifdef HAVE_STRUCT_UTMP_UT_EXIT
memset (&ut->ut_exit, 0, sizeof (ut->ut_exit));
# endif
# ifdef HAVE_STRUCT_UTMP_UT_TV
gettimeofday (&tv, 0);
ut->ut_tv.tv_sec = tv.tv_sec;
ut->ut_tv.tv_usec = tv.tv_usec;
# else /* !HAVE_STRUCT_UTMP_UT_TV */
time (&(ut->ut_time));
# endif
# ifdef HAVE_STRUCT_UTMP_UT_USER
memset (&ut->ut_user, 0, sizeof (ut->ut_user));
# elif defined HAVE_STRUCT_UTMP_UT_NAME
memset (&ut->ut_name, 0, sizeof (ut->ut_name));
# endif
# ifdef HAVE_STRUCT_UTMP_UT_HOST
memset (ut->ut_host, 0, sizeof (ut->ut_host));
# endif
pututline (ut);
# ifdef HAVE_UPDWTMP
updwtmp (WTMP_FILE, ut);
# elif defined HAVE_LOGWTMP /* !HAVE_UPDWTMP */
logwtmp (ut->ut_line, "", "");
# endif
}
endutent ();
# elif defined HAVE_LOGOUT /* !HAVE_PUTUTLINE */
if (logout (line))
logwtmp (line, "", "");
# endif /* HAVE_LOGOUT */
//.........这里部分代码省略.........
开发者ID:Distrotech,项目名称:inetutils,代码行数:101,代码来源:utmp_logout.c
示例9: rxvt_cleanutent
/* EXTPROTO */
void
rxvt_cleanutent(rxvt_t *r)
{
#ifdef UTEMPTER_SUPPORT
utempter_remove_record (PVTS(r)->cmd_fd);
#else /* UTEMPTER_SUPPORT */
#ifdef HAVE_STRUCT_UTMP
struct utmp *ut = &(PVTS(r)->ut);
#endif
#if defined(HAVE_STRUCT_UTMPX) && !defined(HAVE_STRUCT_UTMP)
struct utmpx *tmputx, *utx = &(PVTS(r)->utx);
#endif
#ifdef HAVE_STRUCT_UTMP
# ifdef HAVE_UTMP_PID
MEMSET(ut, 0, sizeof(struct utmp));
setutent();
STRNCPY(ut->ut_id, PVTS(r)->ut_id, sizeof(ut->ut_id));
ut->ut_type = USER_PROCESS;
{
struct utmp *tmput = getutid(ut);
if (tmput) /* position to entry in utmp file */
ut = tmput;
}
ut->ut_type = DEAD_PROCESS;
# else
MEMSET(ut->ut_name, 0, sizeof(ut->ut_name));
# ifdef HAVE_UTMP_HOST
MEMSET(ut->ut_host, 0, sizeof(ut->ut_host));
# endif
# endif
ut->ut_time = time(NULL);
#endif
#if defined(HAVE_STRUCT_UTMPX) && !defined(HAVE_STRUCT_UTMP)
MEMSET(utx, 0, sizeof(struct utmpx));
setutxent();
STRNCPY(utx->ut_id, PVTS(r)->ut_id, sizeof(utx->ut_id));
utx->ut_type = USER_PROCESS;
if ((tmputx = getutxid(utx))) /* position to entry in utmp file */
utx = tmputx;
utx->ut_type = DEAD_PROCESS;
# ifdef HAVE_UTMPX_SESSION
utx->ut_session = getsid(0);
# endif
utx->ut_tv.tv_sec = time(NULL);
utx->ut_tv.tv_usec = 0;
#endif
/*
* Write ending wtmp entry
*/
#ifdef WTMP_SUPPORT
# ifdef WTMP_ONLY_ON_LOGIN
if (ISSET_OPTION(r, Opt_loginShell))
# endif
{
# ifdef HAVE_STRUCT_UTMP
# ifdef HAVE_UPDWTMP
updwtmp(RXVT_WTMP_FILE, ut);
# else
rxvt_update_wtmp(RXVT_WTMP_FILE, ut);
# endif
# endif
# if defined(HAVE_STRUCT_UTMPX) && !defined(HAVE_STRUCT_UTMP)
# ifdef HAVE_UPDWTMPX
updwtmpx(RXVT_WTMPX_FILE, utx);
# else
pututxline (utx);
# endif
# endif
}
#endif
/*
* Write utmp entry
*/
#ifdef HAVE_STRUCT_UTMP
# ifdef HAVE_UTMP_PID
if (ut->ut_pid == PVTS(r)->cmd_pid)
pututline(ut);
endutent();
# else
MEMSET(ut, 0, sizeof(struct utmp));
rxvt_write_bsd_utmp(PVTS(r)->utmp_pos, ut);
# endif
#endif
#if defined(HAVE_STRUCT_UTMPX) && !defined(HAVE_STRUCT_UTMP)
if (utx->ut_pid == PVTS(r)->cmd_pid)
pututxline(utx);
endutxent();
#endif
#endif /* UTEMPTER_SUPPORT */
}
开发者ID:dylex,项目名称:drxvt,代码行数:98,代码来源:logging.c
示例10: exec_shell
//.........这里部分代码省略.........
(void)gettimeofday(&tv, NULL);
ut.ut_tv.tv_sec = tv.tv_sec;
ut.ut_tv.tv_usec = tv.tv_usec;
(void)strncpy(ut.ut_id, ut.ut_line, sizeof(ut.ut_id)-1);
ut.ut_line[sizeof(ut.ut_line)-1] = '\0';
ut.ut_pid = getpid();
ut.ut_type = USER_PROCESS;
#endif
}
#endif
/*
* overwriting signal disposition
*/
(void)signal(SIGCHLD, sig_chld);
switch (pid = fork()) {
case -1:
syslog(LOG_ERR, "forkpty: %m");
_exit(1);
case 0:
(void)close(parentfd);
(void)close(pipechld[0]);
(void)close(pipechld[1]);
(void)close(master);
(void)close(fd);
(void)login_tty(slave);
#ifdef HAVE_UTMP_H
login(&ut);
#elif HAVE_UTMPX_H
setutxent();
(void)pututxline(&ut);
#endif
set_privileges(cfp);
/*
* SUIP PROGRAM HERE
*/
#ifdef __NetBSD__
(void)execl(_PATH_BSHELL,"sh", "-c",cfp->suipfile,(char *)NULL);
#else
(void)execl(_PATH_BSHELL, "sh", "-p", "-c", cfp->suipfile,
(char *)NULL);
#endif
_exit(127);
default:
{
int ctrls;
int exit_status = 0;
(void)close(slave);
/*
* trying to open a control channel
* control_create() returns the number of bytes which were
* written
* select_fd() returns -1 if errors exist you can check errno
*/
if (control_create(&ctrls, fd) == 1) {
if (select_fd(cfp, fd, master, ctrls, parentfd) < 0)
exit_status = 1;
} else {
syslog(LOG_ERR, "can't open ctrl chan");
开发者ID:mm79,项目名称:sud,代码行数:67,代码来源:interactive.c
示例11: setthetime
static void
setthetime(const char *fmt, const char *p, int jflag, int nflag)
{
struct utmpx utx;
struct tm *lt;
struct timeval tv;
const char *dot, *t;
int century;
lt = localtime(&tval);
lt->tm_isdst = -1; /* divine correct DST */
if (fmt != NULL) {
t = strptime(p, fmt, lt);
if (t == NULL) {
fprintf(stderr, "Failed conversion of ``%s''"
" using format ``%s''\n", p, fmt);
badformat();
} else if (*t != '\0')
fprintf(stderr, "Warning: Ignoring %ld extraneous"
" characters in date string (%s)\n",
(long) strlen(t), t);
} else {
for (t = p, dot = NULL; *t; ++t) {
if (isdigit(*t))
continue;
if (*t == '.' && dot == NULL) {
dot = t;
continue;
}
badformat();
}
if (dot != NULL) { /* .ss */
dot++; /* *dot++ = '\0'; */
if (strlen(dot) != 2)
badformat();
lt->tm_sec = ATOI2(dot);
if (lt->tm_sec > 61)
badformat();
} else
lt->tm_sec = 0;
century = 0;
/* if p has a ".ss" field then let's pretend it's not there */
switch (strlen(p) - ((dot != NULL) ? 3 : 0)) {
case 12: /* cc */
lt->tm_year = ATOI2(p) * 100 - TM_YEAR_BASE;
century = 1;
/* FALLTHROUGH */
case 10: /* yy */
if (century)
lt->tm_year += ATOI2(p);
else {
lt->tm_year = ATOI2(p);
if (lt->tm_year < 69) /* hack for 2000 ;-} */
lt->tm_year += 2000 - TM_YEAR_BASE;
else
lt->tm_year += 1900 - TM_YEAR_BASE;
}
/* FALLTHROUGH */
case 8: /* mm */
lt->tm_mon = ATOI2(p);
if (lt->tm_mon > 12)
badformat();
--lt->tm_mon; /* time struct is 0 - 11 */
/* FALLTHROUGH */
case 6: /* dd */
lt->tm_mday = ATOI2(p);
if (lt->tm_mday > 31)
badformat();
/* FALLTHROUGH */
case 4: /* HH */
lt->tm_hour = ATOI2(p);
if (lt->tm_hour > 23)
badformat();
/* FALLTHROUGH */
case 2: /* MM */
lt->tm_min = ATOI2(p);
if (lt->tm_min > 59)
badformat();
break;
default:
badformat();
}
}
/* convert broken-down time to GMT clock time */
if ((tval = mktime(lt)) == -1)
errx(1, "nonexistent time");
if (!jflag) {
/* set the time */
if (nflag || netsettime(tval)) {
utx.ut_type = OLD_TIME;
gettimeofday(&utx.ut_tv, NULL);
pututxline(&utx);
tv.tv_sec = tval;
tv.tv_usec = 0;
if (settimeofday(&tv, (struct timezone *)NULL))
//.........这里部分代码省略.........
开发者ID:edgar-pek,项目名称:PerspicuOS,代码行数:101,代码来源:date.c
示例12: setdate
//.........这里部分代码省略.........
date[8] = '\0';
break;
case 8:
yy = 1900 + current_date->tm_year;
break;
case 4:
yy = 1900 + current_date->tm_year;
mm = current_date->tm_mon + 1; /* tm_mon goes from 1 to 11 */
dd = current_date->tm_mday;
minidx = 2;
break;
default:
(void) fprintf(stderr, gettext("date: bad conversion\n"));
return (1);
}
min = atoi(&date[minidx]);
date[minidx] = '\0';
hh = atoi(&date[minidx-2]);
date[minidx-2] = '\0';
if (!dd) {
/*
* if dd is 0 (not between 1 and 31), then
* read the value supplied by the user.
*/
dd = atoi(&date[2]);
date[2] = '\0';
mm = atoi(&date[0]);
}
if (hh == 24)
hh = 0, dd++;
/* Validate date elements */
dd_check = 0;
if (mm >= 1 && mm <= 12) {
dd_check = month_size[mm - 1]; /* get days in this month */
if (mm == 2 && isleap(yy)) /* adjust for leap year */
dd_check++;
}
if (!((mm >= 1 && mm <= 12) && (dd >= 1 && dd <= dd_check) &&
(hh >= 0 && hh <= 23) && (min >= 0 && min <= 59))) {
(void) fprintf(stderr, gettext("date: bad conversion\n"));
return (1);
}
/* Build date and time number */
for (clock_val = 0, i = 1970; i < yy; i++)
clock_val += year_size(i);
/* Adjust for leap year */
if (isleap(yy) && mm >= 3)
clock_val += 1;
/* Adjust for different month lengths */
while (--mm)
clock_val += (time_t)month_size[mm - 1];
/* Load up the rest */
clock_val += (time_t)(dd - 1);
clock_val *= 24;
clock_val += (time_t)hh;
clock_val *= 60;
clock_val += (time_t)min;
clock_val *= 60;
clock_val += sec;
if (!uflag) {
/* convert to GMT assuming standard time */
/* correction is made in localtime(3C) */
/*
* call localtime to set up "timezone" variable applicable
* for clock_val time, to support Olson timezones which
* can allow timezone rules to change.
*/
(void) localtime(&clock_val);
clock_val += (time_t)timezone;
/* correct if daylight savings time in effect */
if (localtime(&clock_val)->tm_isdst)
clock_val = clock_val - (time_t)(timezone - altzone);
}
(void) time(&wtmpx[0].ut_xtime);
if (stime(&clock_val) < 0) {
perror("date");
return (1);
}
#if defined(i386)
/* correct the kernel's "gmt_lag" and the PC's RTC */
(void) system("/usr/sbin/rtc -c > /dev/null 2>&1");
#endif
(void) time(&wtmpx[1].ut_xtime);
(void) pututxline(&wtmpx[0]);
(void) pututxline(&wtmpx[1]);
(void) updwtmpx(WTMPX_FILE, &wtmpx[0]);
(void) updwtmpx(WTMPX_FILE, &wtmpx[1]);
return (0);
}
开发者ID:MikeeHawk,项目名称:illumos-joyent,代码行数:101,代码来源:date.c
示例13: doutmp
/*
* Add or delete an entry in the system's utmp file.
*/
void
doutmp(int action, struct layer *l)
{
/*
* Note that pututxline() may need privileges to work; but at least
* on Solaris, it does not as the libc arranges this for us. If shl
* has suid or sgid privileges, these are reset on startup and
* restored for utmp handling here.
*/
struct passwd *pwd = getpwuid(myuid);
struct utmpx utx;
char *id;
memset(&utx, 0, sizeof utx);
strncpy(utx.ut_line, l->l_line + 5, sizeof utx.ut_line);
strncpy(utx.ut_user, pwd->pw_name, sizeof utx.ut_user);
utx.ut_pid = l->l_pid;
gettimeofday(&utx.ut_tv, NULL);
if ((id = strrchr(l->l_line, '/')) != NULL)
strncpy(utx.ut_id, id, sizeof utx.ut_id);
switch (action) {
case UTMP_ADD:
utx.ut_type = USER_PROCESS;
break;
case UTMP_DEL:
utx.ut_type = DEAD_PROCESS;
break;
}
if (myuid != myeuid)
setuid(myeuid);
if (mygid != myegid)
setgid(myegid);
#ifndef __linux__
if (action == UTMP_DEL) {
/*
* On (at least) Solaris 8, /usr/lib/utmp_update will hang at
* ioctl(tty, TCGETA, ...) respective isatty() when the pty is
* in packet mode, but removing the pckt module we once pushed
* fails with EPERM in some circumstances (exact conditions
* unknown). If it does, close the pty master; pututxline()
* refuses to work then, but utmpd(1M) will remove the stale
* entry a few seconds later. This is not the ultimate
* solution, but better than hanging, of course. If shl needs
* privilegues to call pututxline(), these calls will not cause
* any harm since there is no dependency on the actual terminal
* device then.
*/
if (ioctl(l->l_pty, I_POP, 0) < 0) {
close(l->l_pty);
l->l_pty = -1;
}
}
#endif /* !__linux__ */
setutxent();
getutxline(&utx);
pututxline(&utx);
endutxent();
if (myuid != myeuid)
setuid(myuid);
if (mygid != myegid)
setgid(mygid);
}
开发者ID:Sunshine-OS,项目名称:svr4-userland,代码行数:65,代码来源:shl.c
示例14: rxvt_cleanutent
/* EXTPROTO */
void
rxvt_cleanutent(rxvt_t *r)
{
#ifdef HAVE_STRUCT_UTMP
struct utmp *tmput, *ut = &(r->h->ut);
#endif
#ifdef HAVE_STRUCT_UTMPX
struct utmpx *tmputx, *utx = &(r->h->utx);
#endif
#ifdef HAVE_STRUCT_UTMP
# ifdef RXVT_UTMP_PID
MEMSET(ut, 0, sizeof(struct utmp));
setutent();
STRNCPY(ut->ut_id, r->h->ut_id, sizeof(ut->ut_id));
ut->ut_type = USER_PROCESS;
if ((tmput = getutid(ut))) /* position to entry in utmp file */
ut = tmput;
ut->ut_type = DEAD_PROCESS;
# else
MEMSET(ut->ut_name, 0, sizeof(ut->ut_name));
MEMSET(ut->ut_host, 0, sizeof(ut->ut_host));
# endif
ut->ut_time = time(NULL);
#endif
#ifdef HAVE_STRUCT_UTMPX
MEMSET(utx, 0, sizeof(struct utmpx));
setutxent();
STRNCPY(utx->ut_id, r->h->ut_id, sizeof(utx->ut_id));
utx->ut_type = USER_PROCESS;
if ((tmputx = getutxid(utx))) /* position to entry in utmp file */
utx = tmputx;
utx->ut_type = DEAD_PROCESS;
utx->ut_session = getsid(0);
utx->ut_tv.tv_sec = time(NULL);
utx->ut_tv.tv_usec = 0;
#endif
/*
* Write ending wtmp entry
*/
#ifdef WTMP_SUPPORT
# ifdef WTMP_ONLY_ON_LOGIN
if (r->Options & Opt_loginShell)
# endif
{
# ifdef HAVE_STRUCT_UTMP
# ifdef HAVE_UPDWTMP
updwtmp(RXVT_WTMP_FILE, ut);
# else
rxvt_update_wtmp(RXVT_WTMP_FILE, ut);
# endif
# endif
# ifdef HAVE_STRUCT_UTMPX
updwtmpx(RXVT_WTMPX_FILE, utx);
# endif
#endif
}
/*
* Write utmp entry
*/
#ifdef HAVE_STRUCT_UTMP
# ifdef RXVT_UTMP_PID
if (ut->ut_pid == r->h->cmd_pid)
pututline(ut);
endutent();
# else
if (r->h->utmp_pos > 0) {
MEMSET(ut, 0, sizeof(struct utmp));
rxvt_write_bsd_utmp(r->h->utmp_pos, ut);
}
# endif
#endif
#ifdef HAVE_STRUCT_UTMPX
if (utx->ut_pid == r->h->cmd_pid)
pututxline(utx);
endutxent();
#endif
}
开发者ID:WndSks,项目名称:msys,代码行数:82,代码来源:logging.c
示例15: main
int
main(int argc, char *argv[])
{
struct utmpx utx;
const struct passwd *pw;
int ch, howto, i, fd, lflag, nflag, qflag, sverrno, Nflag;
u_int pageins;
const char *user, *kernel = NULL;
if (strcmp(getprogname(), "halt") == 0) {
dohalt = 1;
howto = RB_HALT;
} else
howto = 0;
lflag = nflag = qflag = 0;
while ((ch = getopt(argc, argv, "dk:lNnpqr")) != -1)
switch(ch) {
case 'd':
howto |= RB_DUMP;
break;
case 'k':
kernel = optarg;
break;
case 'l':
lflag = 1;
break;
case 'n':
nflag = 1;
howto |= RB_NOSYNC;
break;
case 'N':
nflag = 1;
Nflag = 1;
break;
case 'p':
howto |= RB_POWEROFF;
break;
case 'q':
qflag = 1;
break;
case 'r':
howto |= RB_REROOT;
break;
case '?':
default:
usage();
}
argc -= optind;
argv += optind;
if ((howto & (RB_DUMP | RB_HALT)) == (RB_DUMP | RB_HALT))
errx(1, "cannot dump (-d) when halting; must reboot instead");
if (Nflag && (howto & RB_NOSYNC) != 0)
errx(1, "-N cannot be used with -n");
if ((howto & RB_REROOT) != 0 && howto != RB_REROOT)
errx(1, "-r cannot be used with -d, -n, or -p");
if (geteuid()) {
errno = EPERM;
err(1, NULL);
}
if (qflag) {
reboot(howto);
err(1, NULL);
}
if (kernel != NULL) {
fd = open("/boot/nextboot.conf", O_WRONLY | O_CREAT | O_TRUNC,
0444);
if (fd > -1) {
(void)write(fd, "nextboot_enable=\"YES\"\n", 22);
(void)write(fd, "kernel=\"", 8L);
(void)write(fd, kernel, strlen(kernel));
(void)write(fd, "\"\n", 2);
close(fd);
}
}
/* Log the reboot. */
if (!lflag) {
if ((user = getlogin()) == NULL)
user = (pw = getpwuid(getuid())) ?
pw->pw_name : "???";
if (dohalt) {
openlog("halt", 0, LOG_AUTH | LOG_CONS);
syslog(LOG_CRIT, "halted by %s", user);
} else if (howto & RB_REROOT) {
openlog("reroot", 0, LOG_AUTH | LOG_CONS);
syslog(LOG_CRIT, "rerooted by %s", user);
} else {
openlog("reboot", 0, LOG_AUTH | LOG_CONS);
syslog(LOG_CRIT, "rebooted by %s", user);
}
}
utx.ut_type = SHUTDOWN_TIME;
gettimeofday(&utx.ut_tv, NULL);
pututxline(&utx);
/*
* Do a sync early on, so disks start transfers while we're off
//.........这里部分代码省略.........
开发者ID:cemeyer,项目名称:freebsd-base-graphics,代码行数:101,代码来源:reboot.c
示例16: reset
/*ARGSUSED*/
static void
reset(const time_t newt, const int nflag)
{
register int fid;
time_t oldt;
static struct {
struct utmp before;
struct utmp after;
} s;
#if HAVE_UTMPX_H
static struct {
struct utmpx before;
struct utmpx after;
} sx;
#endif
/*
** Wouldn't it be great if stime returned the old time?
*/
(void) time(&oldt);
if (stime(&newt) != 0)
oops("stime");
s.before.ut_type = OLD_TIME;
s.before.ut_time = oldt;
(void) strcpy(s.before.ut_line, OTIME_MSG);
s.after.ut_type = NEW_TIME;
s.after.ut_time = newt;
(void) strcpy(s.after.ut_line, NTIME_MSG);
fid = open(WTMP_FILE, O_WRONLY | O_APPEND);
if (fid < 0)
oops(_("log file open"));
if (write(fid, (char *) &s, sizeof s) != sizeof s)
oops(_("log file write"));
if (close(fid) != 0)
oops(_("log file close"));
#if !HAVE_UTMPX_H
pututline(&s.before);
pututline(&s.after);
#endif /* !HAVE_UTMPX_H */
#if HAVE_UTMPX_H
sx.before.ut_type = OLD_TIME;
sx.before.ut_tv.tv_sec = oldt;
(void) strcpy(sx.before.ut_line, OTIME_MSG);
sx.after.ut_type = NEW_TIME;
sx.after.ut_tv.tv_sec = newt;
(void) strcpy(sx.after.ut_line, NTIME_MSG);
#if !SUPPRESS_WTMPX_FILE_UPDATE
/* In Solaris 2.5 (and presumably other systems),
`date' does not update /var/adm/wtmpx.
This must be a bug. If you'd like to reproduce the bug,
define SUPPRESS_WTMPX_FILE_UPDATE to be nonzero. */
fid = open(WTMPX_FILE, O_WRONLY | O_APPEND);
if (fid < 0)
oops(_("log file open"));
if (write(fid, (char *) &sx, sizeof sx) != sizeof sx)
oops(_("log file write"));
if (close(fid) != 0)
oops(_("log file close"));
#endif /* !SUPPRESS_WTMPX_FILE_UPDATE */
pututxline(&sx.before);
pututxline(&sx.after);
#endif /* HAVE_UTMPX_H */
}
开发者ID:FloatingFree,项目名称:tzdata,代码行数:64,代码来源:date.c
示例17: getpwuid
/*
* make and write utmp and wtmp entries
*/
void
ptytty_unix::login (int cmd_pid, bool login_shell, const char *hostname)
{
const char *pty = name;
if (!pty || !*pty)
return;
this->cmd_pid = cmd_pid;
this->login_shell = login_shell;
#ifdef HAVE_STRUCT_UTMP
struct utmp *ut = &this->ut;
#endif
#ifdef HAVE_STRUCT_UTMPX
struct utmpx *utx = &this->utx;
#endif
int i;
struct passwd *pwent = getpwuid (getuid ());
const char *name = (pwent && pwent->pw_name) ? pwent->pw_name : "?";
if (!strncmp (pty, "/dev/", 5))
pty += 5; /* skip /dev/ prefix */
#if defined(HAVE_UTMP_PID) || defined(HAVE_STRUCT_UTMPX)
if (!strncmp (pty, "pty", 3) || !strncmp (pty, "tty", 3))
strncpy (ut_id, pty + 3, sizeof (ut_id));
else if (sscanf (pty, "pts/%d", &i) == 1)
sprintf (ut_id, "vt%02x", (i & 0xff)); /* sysv naming */
else
{
ptytty_warn ("can't parse tty name \"%s\", not adding utmp entry.\n", pty);
return;
}
#endif
#ifdef HAVE_STRUCT_UTMP
memset (ut, 0, sizeof (struct utmp));
# ifdef HAVE_UTMP_PID
setutent ();
strncpy (ut->ut_id, ut_id, sizeof (ut->ut_id));
ut->ut_type = DEAD_PROCESS;
getutid (ut); /* position to entry in utmp file */
# endif
#endif
#ifdef HAVE_STRUCT_UTMPX
memset (utx, 0, sizeof (struct utmpx));
setutxent ();
strncpy (utx->ut_id, ut_id, sizeof (utx->ut_id));
utx->ut_type = DEAD_PROCESS;
getutxid (utx); /* position to entry in utmp file */
#endif
#ifdef HAVE_STRUCT_UTMP
strncpy (ut->ut_line, pty, sizeof (ut->ut_line));
# ifdef HAVE_UTMP_HOST
strncpy (ut->ut_host, hostname, sizeof (ut->ut_host));
# endif
ut->ut_time = time (NULL);
# ifdef HAVE_UTMP_PID
strncpy (ut->ut_user, name, sizeof (ut->ut_user));
strncpy (ut->ut_id, ut_id, sizeof (ut->ut_id));
ut->ut_pid = cmd_pid;
ut->ut_type = USER_PROCESS;
pututline (ut);
endutent (); /* close the file */
utmp_pos = 0;
# else
strncpy (ut->ut_name, name, sizeof (ut->ut_name));
# endif
#endif
#ifdef HAVE_STRUCT_UTMPX
strncpy (utx->ut_line, pty, sizeof (utx->ut_line));
strncpy (utx->ut_user, name, sizeof (utx->ut_user));
strncpy (utx->ut_id, ut_id, sizeof (utx->ut_id));
# if HAVE_UTMPX_SESSION
utx->ut_session = getsid (0);
# endif
utx->ut_tv.tv_sec = time (NULL);
utx->ut_tv.tv_usec = 0;
utx->ut_pid = cmd_pid;
# ifdef HAVE_UTMPX_HOST
strncpy (utx->ut_host, hostname, sizeof (utx->ut_host));
# if 0
{
char *colon;
if ((colon = strrchr (ut->ut_host, ':')) != NULL)
*colon = '\0';
}
# endif
# endif
utx->ut_type = USER_PROCESS;
pututxline (utx);
endutxent (); /* close the file */
//.........这里部分代码省略.........
开发者ID:smerrill,项目名称:rxvt-unicode,代码行数:101,代码来源:logging.C
示例18: rmut
static void
rmut(void)
{
pam_handle_t *pamh;
struct utmpx *up;
char user[sizeof (up->ut_user) + 1];
char ttyn[sizeof (up->ut_line) + 1];
char rhost[sizeof (up->ut_host) + 1];
/* while cleaning up dont allow disruption */
(void) sigset(SIGCHLD, SIG_IGN);
setutxent();
while (up = getutxent()) {
if (up->ut_pid == pid) {
if (up->ut_type == DEAD_PROCESS)
break; /* Cleaned up elsewhere. */
/*
* call pam_close_session if login changed
* the utmpx user entry from type LOGIN_PROCESS
* to type USER_PROCESS, which happens
* after pam_open_session is called.
*/
if (up->ut_type == USER_PROCESS) {
(void) strlcpy(user, up->ut_user,
sizeof (user));
(void) strlcpy(ttyn, up->ut_line,
sizeof (ttyn));
(void) strlcpy(rhost, up->ut_host,
sizeof (rhost));
/*
* Use the same pam_prog_name that
* 'login' used.
*/
if ((pam_start(pam_prog_name, user, NULL,
&pamh))
== PAM_SUCCESS) {
(void) pam_set_item(pamh, PAM_TTY,
ttyn);
(void) pam_set_item(pamh, PAM_RHOST,
rhost);
(void) pam_close_session(pamh, 0);
(void) pam_end(pamh, PAM_SUCCESS);
}
}
up->ut_type = DEAD_PROCESS;
up->ut_exit.e_termination = WTERMSIG(0);
up->ut_exit.e_exit = WEXITSTATUS(0);
(void) time(&up->ut_tv.tv_sec);
if (modutx(up) == NULL) {
/*
* Since modutx failed we'll
* write out the new entry
* ourselves.
*/
(void) pututxline(up);
updwtmpx("wtmpx", up);
}
break;
}
}
endutxent();
(void) sigset(SIGCHLD, cleanup);
}
开发者ID:AlainODea,项目名称:illumos-gate,代码行数:70,代码来源:in.rlogind.c
示例19: servo_perform_clock_step
void
servo_perform_clock_step(RunTimeOpts * rtOpts, PtpClock * ptpClock)
{
if(rtOpts->noAdjust){
WARNING("Could not step clock - clock adjustment disabled\n");
return;
}
TimeInternal oldTime, newTime;
/*No need to reset the frequency offset: if we're far off, it will quickly get back to a high value */
getTime(&oldTime);
subTime(&newTime, &oldTime, &ptpClock->offsetFromMaster);
setTime(&newTime);
#ifdef HAVE_LINUX_RTC_H
if(rtOpts->setRtc) {
setRtc(&newTime);
}
#endif /* HAVE_LINUX_RTC_H */
initClock(rtOpts, ptpClock);
#ifdef HAVE_SYS_TIMEX_H
if(ptpClock->clockQuality.clockClass > 127)
restoreDrift(ptpClock, rtOpts, TRUE);
#endif /* HAVE_SYS_TIMEX_H */
ptpClock->servo.runningMaxOutput = FALSE;
toState(PTP_FAULTY, rtOpts, ptpClock); /* make a full protocol reset */
/* Major time change - need to inform utmp / wtmp */
if(oldTime.seconds != newTime.seconds) {
/* Add the old time entry to utmp/wtmp */
/* About as long as the ntpd implementation, but not any less ugly */
#ifdef HAVE_UTMPX_H
struct utmpx utx;
memset(&utx, 0, sizeof(utx));
strncpy(utx.ut_user, "date", sizeof(utx.ut_user));
#ifndef OTIME_MSG
strncpy(utx.ut_line, "|", sizeof(utx.ut_line));
#else
strncpy(utx.ut_line, OTIME_MSG, sizeof(utx.ut_line));
#endif /* OTIME_MSG */
#ifdef OLD_TIME
utx.ut_tv.tv_sec = oldTime.seconds;
utx.ut_tv.tv_usec = oldTime.nanoseconds / 1000;
utx.ut_type = OLD_TIME;
#else /* no ut_type */
utx.ut_time = oldTime.seconds;
#endif /* OLD_TIME */
/* ======== BEGIN OLD TIME EVENT - UTMPX / WTMPX =========== */
#ifdef HAVE_UTMPXNAME
utmpxname("/var/log/utmp");
#endif /* HAVE_UTMPXNAME */
setutxent();
pututxline(&utx);
endutxent();
#ifdef HAVE_UPDWTMPX
updwtmpx("/var/log/wtmp", &utx);
#endif /* HAVE_IPDWTMPX */
/* ======== END OLD TIME EVENT - UTMPX / WTMPX =========== */
#else /* NO UTMPX_H */
#ifdef HAVE_UTMP_H
struct utmp ut;
memset(&ut, 0, sizeof(ut));
strncpy(ut.ut_name, "date", sizeof(ut.ut_name));
#ifndef OTIME_MSG
strncpy(ut.ut_line, "|", sizeof(ut.ut_line));
#else
strncpy(ut.ut_line, OTIME_MSG, sizeof(ut.ut_line));
#endif /* OTIME_MSG */
#ifdef OLD_TIME
ut.ut_tv.tv_sec = oldTime.seconds;
ut.ut_tv.tv_usec = oldTime.nanoseconds / 1000;
ut.ut_type = OLD_TIME;
#else /* no ut_type */
ut.ut_time = oldTime.seconds;
#endif /* OLD_TIME */
/* ======== BEGIN OLD TIME EVENT - UTMP / WTMP =========== */
#ifdef HAVE_UTMPNAME
utmpname(UTMP_FILE);
#endif /* HAVE_UTMPNAME */
#ifdef HAVE_SETUTENT
setutent();
#endif /* HAVE_SETUTENT */
#ifdef HAVE_PUTUTLINE
pututline(&ut);
#endif /* HAVE_PUTUTLINE */
#ifdef HAVE_ENDUTENT
endutent();
#endif /* HAVE_ENDUTENT */
#ifdef HAVE_UTMPNAME
//.........这里部分代码省略.........
开发者ID:DomChey,项目名称:ptpd,代码行数:101,代码来源:servo.c
示例20: getpwuid
void
ptytty_unix::log_session (bool login, const char *hostname)
{
struct passwd *pwent = getpwuid (getuid ());
const char *user = (pwent && pwent->pw_name) ? pwent->pw_name : "?";
const char *pty = name;
if (!strncmp (pty, "/dev/", 5))
pty += 5; /* skip /dev/ prefix */
#ifdef HAVE_STRUCT_UTMP
struct utmp *tmput;
struct utmp ut;
fill_utmp (&ut, login, cmd_pid, pty, user, hostname);
#endif
#ifdef HAVE_STRUCT_UTMPX
struct utmpx *tmputx;
struct utmpx utx;
fill_utmpx (&utx, login, cmd_pid, pty, user, hostname);
#endif
#ifdef HAVE_STRUCT_UTMP
# ifdef HAVE_UTMP_PID
setutent ();
if (login || ((tmput = getutid (&ut)) && tmput->ut_pid == cmd_pid))
pututline (&ut);
endutent ();
# else
write_bsd_utmp (utmp_pos, &ut);
# endif
#endif
#ifdef HAVE_STRUCT_UTMPX
setutxent ();
if (login || ((tmputx = getutxid (&utx)) && tmputx->ut_pid == cmd_pid))
pututxline (&utx);
endutxent ();
#endif
#ifdef WTMP_SUPPORT
if (login_shell)
{
# ifdef HAVE_STRUCT_UTMP
# ifdef HAVE_UPDWTMP
updwtmp (WTMP_FILE, &ut);
# else
update_wtmp (WTMP_FILE, &ut);
# endif
# endif
# if defined(HAVE_STRUCT_UTMPX) && defined(HAVE_UPDWTMPX)
updwtmpx (WTMPX_FILE, &utx);
# endif
}
#endif
#ifdef LASTLOG_SUPPORT
if (login_shell)
if (login)
{
if (pwent)
update_lastlog (pty, hostname);
else
PTYTTY_WARN ("no entry in password file, not updating lastlog.\n");
}
#endif
}
开发者ID:RAD16,项目名称:rxit,代码行数:68,代码来源:logging.C
注:本文中的pututxline函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License; |
请发表评论