示例#1
0
文件: utmp.c 项目: wyat/kbs
int apply_utmpuid(APPLY_UTMP_FUNC fptr, int uid, void *arg)
{
    char userid[IDLEN + 1];
    if (uid <= 0)
        return 0;
    strcpy(userid, getuserid2(uid));
    return apply_utmp(fptr, 0, userid, arg);
}
示例#2
0
/* stiger: 获得一个用户的在线状态string */
static int get_userstatusstr(char *userid, char *buf)
{
	int tuid=0;
	struct userec *lookupuser;

	if(!(tuid = getuser(userid, &lookupuser)))
		return 0;

	buf[0]='0';
	buf[1]=0;

	return apply_utmp((APPLY_UTMP_FUNC) printstatusstr, 10, lookupuser->userid, buf);
}
示例#3
0
文件: utmp.c 项目: wyat/kbs
/* uentp == NULL means to kick all logins */
int kick_user_utmp(int uid, struct user_info *uentp, int signal)
{
    int i, currsave;
    struct kickuser_save s;
    s.count = 0;
    signal = signal ? signal: SIGHUP;
    if (!uentp) {
        struct userec *u = getuserbynum(uid);
        apply_utmp((APPLY_UTMP_FUNC) kickuser_count, 0, u->userid, &s);
    } else {
        s.entp[0] = uentp;
        s.pid[0] = uentp->pid;
        s.count = 1;
    }
    currsave = -1;
    for (i=0;i<s.count;i++) {
        struct user_info *enp = s.entp[i];
        if (enp->active) {
            if (enp -> pid == getpid() && s.count > 1) {
                currsave = i;
                continue;
            } else if (enp->pid != 1)
                kill(enp->pid, signal);
            clear_utmp(get_utmpent_num(enp), uid , s.pid[i]);
        }
    }
    if (currsave != -1) {
        struct user_info *enp = s.entp[currsave];
        if (enp -> active) {
            if (enp -> pid != 1)
                kill(enp -> pid, signal);
            clear_utmp(get_utmpent_num(enp), uid, s.pid[currsave]);
        }
    }
    return s.count;
}
示例#4
0
文件: utmp.c 项目: wyat/kbs
int update_username(const char *userid,const char *o_name,const char *n_name)
{
    const char *arg[2]={o_name,n_name};
    return apply_utmp(update_username_proc,0,userid,arg);
}