⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vmysql.c

📁 相当优秀的 UNIX 进程管理工具
💻 C
📖 第 1 页 / 共 3 页
字号:
#ifdef VALIAS     valias_delete_domain( domain);#endif#ifdef ENABLE_AUTH_LOGGING    qnprintf( SqlBufUpdate, SQL_BUF_SIZE,         "delete from lastauth where domain = '%s'", domain );    if (mysql_query(&mysql_update,SqlBufUpdate)) {        return(-1);    } #endif    vdel_limits(domain);    return(0);}int vauth_deluser( char *user, char *domain ){ char *tmpstr; int err = 0;        if ( (err=vauth_open_update()) != 0 ) return(err);    vset_default_domain( domain );#ifndef MANY_DOMAINS    if ( domain == NULL || domain[0] == 0 ) {        tmpstr = MYSQL_LARGE_USERS_TABLE;    } else {        tmpstr = vauth_munch_domain( domain );    }#else    tmpstr = MYSQL_DEFAULT_TABLE;#endif    qnprintf( SqlBufUpdate,  SQL_BUF_SIZE, DELETE_USER, tmpstr, user#ifdef MANY_DOMAINS, domain#endif );    if (mysql_query(&mysql_update,SqlBufUpdate)) {        err = -1;    } #ifdef ENABLE_AUTH_LOGGING    qnprintf( SqlBufUpdate, SQL_BUF_SIZE,         "delete from lastauth where user = '%s' and domain = '%s'",         user, domain );    if (mysql_query(&mysql_update,SqlBufUpdate)) {        err = -1;    } #endif    return(err);}int vauth_setquota( char *username, char *domain, char *quota){ char *tmpstr; int err;    if ( strlen(username) > MAX_PW_NAME ) return(VA_USER_NAME_TOO_LONG);#ifdef USERS_BIG_DIR    if ( strlen(username) == 1 ) return(VA_ILLEGAL_USERNAME);#endif    if ( strlen(domain) > MAX_PW_DOMAIN ) return(VA_DOMAIN_NAME_TOO_LONG);    if ( strlen(quota) > MAX_PW_QUOTA )    return(VA_QUOTA_TOO_LONG);        if ( (err=vauth_open_update()) != 0 ) return(err);    vset_default_domain( domain );#ifndef MANY_DOMAINS    tmpstr = vauth_munch_domain( domain );#else    tmpstr = MYSQL_DEFAULT_TABLE; #endif    qnprintf( SqlBufUpdate, SQL_BUF_SIZE, SETQUOTA, tmpstr, quota, username#ifdef MANY_DOMAINS, domain#endif);    if (mysql_query(&mysql_update,SqlBufUpdate)) {        fprintf(stderr, "vmysql: sql error[4]: %s\n", mysql_error(&mysql_update));        return(-1);    }     return(0);}struct vqpasswd *vauth_getall(char *domain, int first, int sortit){ char *domstr = NULL; static struct vqpasswd vpw; static int more = 0; int err;    vset_default_domain( domain );#ifdef MANY_DOMAINS    domstr = MYSQL_DEFAULT_TABLE; #else    domstr = vauth_munch_domain( domain );#endif    if ( first == 1 ) {        if ( (err=vauth_open_read_getall()) != 0 ) return(NULL);        qnprintf(SqlBufRead,  SQL_BUF_SIZE, GETALL, domstr#ifdef MANY_DOMAINS            ,domain#endif            );        if ( sortit == 1 ) {            strncat( SqlBufRead, " order by pw_name", SQL_BUF_SIZE);        }        if (res_read!=NULL) mysql_free_result(res_read_getall);        res_read = NULL;        if (mysql_query(&mysql_read_getall,SqlBufRead)) {            fprintf(stderr, "vmysql: sql error[5]: %s\n", mysql_error(&mysql_read_getall));            return(NULL);        }        if (!(res_read_getall=mysql_store_result(&mysql_read_getall))) {            fprintf(stderr, "vmysql: store result failed 2\n");            return(NULL);        }    } else if ( more == 0 ) {        return(NULL);    }    memset(IUser, 0, sizeof(IUser));    memset(IPass, 0, sizeof(IPass));    memset(IGecos, 0, sizeof(IGecos));    memset(IDir, 0, sizeof(IDir));    memset(IShell, 0, sizeof(IShell));    memset(IClearPass, 0, sizeof(IClearPass));    vpw.pw_name   = IUser;    vpw.pw_passwd = IPass;    vpw.pw_gecos  = IGecos;    vpw.pw_dir    = IDir;    vpw.pw_shell  = IShell;    vpw.pw_clear_passwd  = IClearPass;        if ((row_getall = mysql_fetch_row(res_read_getall)) != NULL) {        strncpy(vpw.pw_name,row_getall[0],SMALL_BUFF);        if (row_getall[1]!=0) strncpy(vpw.pw_passwd,row_getall[1],SMALL_BUFF);        if (row_getall[2]!=0) vpw.pw_uid = atoi(row_getall[2]);        if (row_getall[3]!=0) vpw.pw_gid = atoi(row_getall[3]);        if (row_getall[4]!=0) strncpy(vpw.pw_gecos,row_getall[4],SMALL_BUFF);        if (row_getall[5]!=0) strncpy(vpw.pw_dir,row_getall[5],SMALL_BUFF);        if (row_getall[6]!=0) {            strncpy(vpw.pw_shell, row_getall[6],SMALL_BUFF);        }#ifdef CLEAR_PASS        if (row_getall[7]!=0) {            strncpy(vpw.pw_clear_passwd, row_getall[7],SMALL_BUFF);        }#endif        more = 1;        return(&vpw);    }    more = 0;    mysql_free_result(res_read_getall);    res_read_getall = NULL;    return(NULL);}void vauth_end_getall(){    if ( res_read_getall != NULL ) {        mysql_free_result(res_read_getall);    }    res_read_getall = NULL;}char *vauth_munch_domain( char *domain ){ int i; static char tmpbuf[50];    if ( domain == NULL || domain[0] == 0 ) return(domain);    for(i=0;domain[i]!=0;++i){        tmpbuf[i] = domain[i];        if ( domain[i] == '.' || domain[i] == '-' ) {            tmpbuf[i] = MYSQL_DOT_CHAR;        }    }    tmpbuf[i] = 0;     return(tmpbuf);}int vauth_setpw( struct vqpasswd *inpw, char *domain ){ char *tmpstr; uid_t myuid; uid_t uid; gid_t gid; int err;    err = vcheck_vqpw(inpw, domain);    if ( err != 0 ) return(err);    vget_assign(domain,NULL,0,&uid,&gid);    myuid = geteuid();    if ( myuid != 0 && myuid != uid ) {        return(VA_BAD_UID);    }    if ( (err=vauth_open_update()) != 0 ) return(err);    vset_default_domain( domain );#ifndef MANY_DOMAINS    tmpstr = vauth_munch_domain( domain );#else    tmpstr = MYSQL_DEFAULT_TABLE; #endif    qnprintf( SqlBufUpdate,SQL_BUF_SIZE,SETPW,            tmpstr,             inpw->pw_passwd,            inpw->pw_uid,            inpw->pw_gid,             inpw->pw_gecos,            inpw->pw_dir,             inpw->pw_shell, #ifdef CLEAR_PASS            inpw->pw_clear_passwd,#endif            inpw->pw_name#ifdef MANY_DOMAINS            ,domain#endif            );    if (mysql_query(&mysql_update,SqlBufUpdate)) {        fprintf(stderr, "vmysql: sql error[6]: %s\n", mysql_error(&mysql_update));        return(-1);    } #ifdef SQWEBMAIL_PASS    vsqwebmail_pass( inpw->pw_dir, inpw->pw_passwd, uid, gid);#endif    return(0);}#ifdef POP_AUTH_OPEN_RELAYint vopen_smtp_relay(){ char *ipaddr; time_t mytime; int err; int rows;    mytime = time(NULL);    ipaddr = get_remote_ip();    if ( ipaddr == NULL ) {        return 0;    }    if ( (err=vauth_open_update()) != 0 ) return 0;    qnprintf( SqlBufUpdate, SQL_BUF_SIZE,"replace into relay ( ip_addr, timestamp ) values ( '%s', %d )",            ipaddr, (int)mytime);    if (mysql_query(&mysql_update,SqlBufUpdate)) {        vcreate_relay_table();        if (mysql_query(&mysql_update,SqlBufUpdate)) {            fprintf(stderr, "vmysql: sql error[7]: %s\n", mysql_error(&mysql_update));        }    }    rows = mysql_affected_rows(&mysql_update);    /* return true if only INSERT (didn't exist) */    /* would return 2 if replaced, or -1 if error */    return rows == 1;}void vupdate_rules(int fdm){    if (vauth_open_read() != 0) return;    snprintf(SqlBufRead, SQL_BUF_SIZE, "select ip_addr from relay");    if (mysql_query(&mysql_read,SqlBufRead)) {        vcreate_relay_table();        if (mysql_query(&mysql_read,SqlBufRead)) {            fprintf(stderr, "vmysql: sql error[8]: %s\n", mysql_error(&mysql_read));            return;        }    }    if (!(res_read = mysql_store_result(&mysql_read))) {        fprintf(stderr, "vmysql: store result failed 3\n");        return;    }    while((row = mysql_fetch_row(res_read))) {        snprintf(SqlBufRead, SQL_BUF_SIZE, "%s:allow,RELAYCLIENT=\"\",RBLSMTPD=\"\"\n", row[0]);        write(fdm,SqlBufRead, strlen(SqlBufRead));    }    mysql_free_result(res_read);}void vclear_open_smtp(time_t clear_minutes, time_t mytime){ time_t delete_time; int err;        if ( (err=vauth_open_update()) != 0 ) return;     delete_time = mytime - clear_minutes;    snprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from relay where timestamp <= %d",         (int)delete_time);    if (mysql_query(&mysql_update,SqlBufUpdate)) {        vcreate_relay_table();        return;    }}void vcreate_relay_table(){  vauth_create_table ("relay", RELAY_TABLE_LAYOUT, 1);  return;}#endifint vmkpasswd( char *domain ){    return(0);}void vclose(){    if (read_open == 1 ) {        mysql_close(&mysql_read);        read_open = 0;    }    if (read_getall_open == 1 ) {        mysql_close(&mysql_read_getall);        read_getall_open = 0;    }    if (update_open == 1 ) {        mysql_close(&mysql_update);        update_open = 0;    }}#ifdef IP_ALIAS_DOMAINSvoid vcreate_ip_map_table(){  vauth_create_table ("ip_alias_map", IP_ALIAS_TABLE_LAYOUT, 1);  return;}int vget_ip_map( char *ip, char *domain, int domain_size){ int ret = -1;    if ( ip == NULL || strlen(ip) <= 0 ) return(-1);    if ( domain == NULL ) return(-2);    if ( vauth_open_read() != 0 ) return(-3);    qnprintf(SqlBufRead, SQL_BUF_SIZE, "select domain from ip_alias_map where ip_addr = '%s'",        ip);    if (mysql_query(&mysql_read,SqlBufRead)) {        return(-1);    }    if (!(res_read = mysql_store_result(&mysql_read))) {        fprintf(stderr, "vget_ip_map: store result failed 4\n");        return(-4);    }    while((row = mysql_fetch_row(res_read))) {        ret = 0;        strncpy(domain, row[0], domain_size);    }    mysql_free_result(res_read);    return(ret);}int vadd_ip_map( char *ip, char *domain) {    if ( ip == NULL || strlen(ip) <= 0 ) return(-1);    if ( domain == NULL || strlen(domain) <= 0 ) return(-1);    if ( vauth_open_update() != 0 ) return(-1);    qnprintf(SqlBufUpdate,SQL_BUF_SIZE,        "replace into ip_alias_map ( ip_addr, domain ) values ( '%s', '%s' )",      ip, domain);    if (mysql_query(&mysql_update,SqlBufUpdate)) {        vcreate_ip_map_table();        if (mysql_query(&mysql_update,SqlBufUpdate)) {            return(-1);        }    }    return(0);}int vdel_ip_map( char *ip, char *domain) {    if ( ip == NULL || strlen(ip) <= 0 ) return(-1);    if ( domain == NULL || strlen(domain) <= 0 ) return(-1);    if ( vauth_open_update() != 0 ) return(-1);    qnprintf( SqlBufUpdate,SQL_BUF_SIZE,          "delete from ip_alias_map where ip_addr = '%s' and domain = '%s'",            ip, domain);    if (mysql_query(&mysql_update,SqlBufUpdate)) {        return(0);    }     return(0);}int vshow_ip_map( int first, char *ip, char *domain ){ static int more = 0;    if ( ip == NULL ) return(-1);    if ( domain == NULL ) return(-1);    if ( vauth_open_read() != 0 ) return(-1);    if ( first == 1 ) {        snprintf(SqlBufRead,SQL_BUF_SIZE,             "select ip_addr, domain from ip_alias_map");         if (res_read!=NULL) mysql_free_result(res_read);        res_read = NULL;        if (mysql_query(&mysql_read,SqlBufRead)) {            vcreate_ip_map_table();            if (mysql_query(&mysql_read,SqlBufRead)) {                return(0);            }        }        if (!(res_read = mysql_store_result(&mysql_read))) {            fprintf(stderr, "vmysql: store result failed 5\n");            return(0);        }    } else if ( more == 0 ) {        return(0);    }    if ((row = mysql_fetch_row(res_read)) != NULL) {        strncpy(ip, row[0], 18);         strncpy(domain, row[1], 156);         more = 1;        return(1);    }    more = 0;    mysql_free_result(res_read);    res_read = NULL;    return(0);}#endifint vread_dir_control(vdir_type *vdir, char *domain, uid_t uid, gid_t gid){ int found = 0;    if ( vauth_open_read() != 0 ) return(-1);    qnprintf(SqlBufRead, SQL_BUF_SIZE,         "select %s from dir_control where domain = '%s'",         DIR_CONTROL_SELECT, domain );    if (mysql_query(&mysql_read,SqlBufRead)) {        vcreate_dir_control(domain);        qnprintf(SqlBufRead, SQL_BUF_SIZE,             "select %s from dir_control where domain = '%s'",            DIR_CONTROL_SELECT, domain );        if (mysql_query(&mysql_read,SqlBufRead)) {            return(-1);        }    }    if (!(res_read = mysql_store_result(&mysql_read))) {        fprintf(stderr, "vread_dir_control: store result failed 6\n");        return(0);    }    if ((row = mysql_fetch_row(res_read)) != NULL) {        found = 1;        vdir->cur_users = atol(row[0]);        vdir->level_cur = atoi(row[1]);        vdir->level_max = atoi(row[2]);        vdir->level_start[0] = atoi(row[3]);        vdir->level_start[1] = atoi(row[4]);        vdir->level_start[2] = atoi(row[5]);        vdir->level_end[0] = atoi(row[6]);        vdir->level_end[1] = atoi(row[7]);        vdir->level_end[2] = atoi(row[8]);        vdir->level_mod[0] = atoi(row[9]);        vdir->level_mod[1] = atoi(row[10]);        vdir->level_mod[2] = atoi(row[11]);        vdir->level_index[0] = atoi(row[12]);        vdir->level_index[1] = atoi(row[13]);        vdir->level_index[2] = atoi(row[14]);        strncpy(vdir->the_dir, row[15], MAX_DIR_NAME);    }    mysql_free_result(res_read);    if ( found == 0 ) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -