cgi_functions.c
来自「这是我自己写的用于嵌入式设备的CGI程序」· C语言 代码 · 共 1,932 行 · 第 1/4 页
C
1,932 行
continue; if (strcmp( name1, username )) continue; if (!strcmp( password1, password )) return 0; } fclose(conf_fp); return -1; /* username and password don't match */}/*--------------------------------------------------------------------------* 获取用户权限,Error返回0,OK返回权限值 *--------------------------------------------------------------------------*/int cgi_get_user_priv(char * username, char * conf_path){ char get_value[24]; int p; if ((NULL == username) || ( NULL == conf_path) ) { //printf("Err1\n"); return 0; } if ( NULL == get_var_from_file(conf_path, username, get_value)) { //*priv = 3; //printf("Err2\n"); return 0; } p = atoi (get_value); return p;}/*--------------------------------------------------------------------------* 设置默认帐号 *--------------------------------------------------------------------------*/int cgi_set_default_sysop(){ FILE *conf_fp; char buf[]="sysop"; char enc_buf[512]; char w_buf[512]; if (!(conf_fp=fopen(USER_CONF_PATH,"w"))) // open file pointer { //printf("%s open failed...\n",USER_CONF_PATH); return 0; } DES_encode(buf, enc_buf); sprintf(w_buf,"sysop:%s\n",enc_buf); fprintf(conf_fp,w_buf); fclose(conf_fp); //printf("Restoring admin_conf...\n"); if (!(conf_fp=fopen("/mnt/mtd/permiss_conf","w"))) { //printf("permiss_conf open failed...\n"); return 0; } fprintf(conf_fp,"sysop 3\n"); fclose(conf_fp); return 1;}/*--------------------------------------------------------------------------* 添加用户帐号 *--------------------------------------------------------------------------*/int cgi_add_user_pwd(char *add_user, char *add_passwd){ int i; char record[512]; FILE *conf_fp,*temp_fp; char renamecmd[128]; char add_string[512], en_add_string[512]; if (!(conf_fp=fopen(USER_CONF_PATH,"r"))) // open file pointer { //printf("%s opened failed...\n",USER_CONF_PATH); //fclose(conf_fp); cgi_set_default_sysop(); conf_fp=fopen(USER_CONF_PATH,"r"); } if (!(temp_fp=fopen("temp","w")))// open file pointer { //printf("temp_conf open failed...\n"); return 0; } i=cgi_match_user_only(add_user); if(!i) //add new config item { DES_encode(add_passwd, en_add_string); fseek( conf_fp, 0, SEEK_SET ); while(feof(conf_fp) == 0){ fscanf(conf_fp,"%s\n",record); // Read next record fprintf(temp_fp,"%s\n",record); } fclose(conf_fp); fprintf(temp_fp,"%s:%s\n",add_user,en_add_string); fflush(temp_fp); fclose(temp_fp); sprintf(renamecmd,"mv temp %s",USER_CONF_PATH); system(renamecmd); sprintf(renamecmd,"chmod 777 %s",USER_CONF_PATH); system(renamecmd); return 1; } else{ //printf("%s already existed.<br>\n",add_user); fclose(conf_fp); fclose(temp_fp); return 0; }}/*--------------------------------------------------------------------------* 验证帐号是否存在 *--------------------------------------------------------------------------*/int cgi_match_user_only (char *match_user){ char pattern[512]; char decode[512]; char seps[]=":"; char *token,*name; FILE *conf_fp; if (!(conf_fp=fopen(USER_CONF_PATH,"r"))) // open file pointer { //printf("%s open failed...\n",USER_CONF_PATH); cgi_set_default_sysop(); conf_fp=fopen(USER_CONF_PATH,"r"); } fseek( conf_fp, 0, SEEK_SET ); while (feof(conf_fp) == 0){ fscanf(conf_fp,"%s\n",pattern); //Read next record name=strtok(pattern,seps); if(!strcasecmp(name,match_user)) return 1; } fclose(conf_fp); return 0;}/*--------------------------------------------------------------------------* 删除用户帐号 *--------------------------------------------------------------------------*/int cgi_del_user_pwd(char *del_user){ userpwd user_record[USER_NUM]={0}; int i,index=0; char *ret; char seps[]=":"; char *token,*name; char pattern[512]={0},dec_pattern[512]; FILE *conf_fp,*temp_fp; char renamecmd[128]; int match=0; if (!(conf_fp=fopen(USER_CONF_PATH,"r"))) // open file pointer { //printf("%s opened...\n",USER_CONF_PATH); cgi_set_default_sysop(); conf_fp=fopen(USER_CONF_PATH,"r"); } if (!(temp_fp=fopen("temp","w")))// open file pointer { //printf("temp_conf open failed...\n"); fclose(conf_fp); return 0; } fseek( conf_fp, 0, SEEK_SET ); while(feof(conf_fp) == 0) { fscanf(conf_fp,"%s\n",pattern); // Read next record strcpy(user_record[index].pattern,pattern); name=strtok(pattern,seps); if(!strcmp(name,del_user)) { index--; match=1; } index++; } fclose(conf_fp); if (!match) { //printf("%s doesn't exist.\n",del_user); fclose(temp_fp); return 0; } else{ fseek( temp_fp, 0, SEEK_SET ); for(i=0;i<index;i++){ fprintf(temp_fp,"%s\n",user_record[i].pattern); } fflush(temp_fp); fclose(temp_fp); sprintf(renamecmd,"mv temp %s",USER_CONF_PATH); system(renamecmd); return 1; }}/*--------------------------------------------------------------------------* 修改用户密码 *--------------------------------------------------------------------------*/int cgi_change_pwd(char *change_user, char *change_pwd){ userpwd user_record[USER_NUM]={0}; int i,index=0; char *ret; char seps[]=":"; char *token,*name; char pattern[512]={0},dec_pattern[512]; char change[512],enc_change[512]; FILE *conf_fp,*temp_fp; char renamecmd[128]; int match=0; if (!(conf_fp=fopen(USER_CONF_PATH,"r"))) // open file pointer { //printf("%s opened...\n",USER_CONF_PATH); cgi_set_default_sysop(); conf_fp=fopen(USER_CONF_PATH,"r"); } if (!(temp_fp=fopen("temp","w")))// open file pointer { //printf("temp_conf open failed...\n"); fclose(conf_fp); return 0; } DES_encode(change_pwd, change);// printf("%s\n",change_pwd); fseek( conf_fp, 0, SEEK_SET ); while(feof(conf_fp) == 0) { fscanf(conf_fp,"%s\n",pattern); // Read next record strcpy(user_record[index].pattern,pattern); name=strtok(pattern,seps); if(!strcmp(name,change_user)) { sprintf(user_record[index].pattern,"%s:%s",name,change); match=1; } index++; } fclose(conf_fp); if (!match) { //printf("%s doesn't exist.\n",change_user); fclose(temp_fp); return 0; } else{ fseek( temp_fp, 0, SEEK_SET ); for(i=0;i<index;i++){ fprintf(temp_fp,"%s\n",user_record[i].pattern); } fflush(temp_fp); fclose(temp_fp); sprintf(renamecmd,"mv temp %s",USER_CONF_PATH); system(renamecmd); return 1; }}/*--------------------------------------------------------------------------* 取用户帐号列表 *--------------------------------------------------------------------------*/account cgi_list_all_account(){ userpwd user_record[USER_NUM]={0}; account name_record; int i,index=0; char *ret; char seps[]=":"; char *token,*name; char pattern[512]={0},dec_pattern[512]; FILE *conf_fp,*temp_fp; char account[32]; char renamecmd[128]; int match=0; if (!(conf_fp=fopen(USER_CONF_PATH,"r"))) // open file pointer { //printf("%s open failed...\n",USER_CONF_PATH); cgi_set_default_sysop(); conf_fp=fopen(USER_CONF_PATH,"r"); } fseek( conf_fp, 0, SEEK_SET ); index=0; while(feof(conf_fp) == 0) { fscanf(conf_fp,"%s\n",pattern); // Read next record strcpy(user_record[index].pattern,pattern); name=strtok(pattern,seps); sprintf(account,"%s",name); strcpy(name_record.user_name[index].name,account); index++; } fclose(conf_fp); name_record.count=index; //printf("count=%d\n",name_record.count); return name_record;}/*--------------------------------------------------------------------------* 设置用户权限 *--------------------------------------------------------------------------*/int cgi_set_permission(const char *user,int permission){ FILE *fp,*tmp_fp; char user_buf[30]; char permission_buf[4]; int tag = 0; char cmdbuf[128]; if (!(tmp_fp=fopen("/tmp/permiss_tmp","w+")))// open file pointer return 0; if (!(fp=fopen(PRIV_CONF_PATH,"r+"))) fp = NULL; else { while(!feof(fp)) { fscanf(fp,"%s %s\n",user_buf,permission_buf); if(0==strcmp(user,user_buf)) { fprintf(tmp_fp,"%s %d\n",user,permission); tag = 1; } else fprintf(tmp_fp,"%s %s\n",user_buf,permission_buf); } } if(!tag) fprintf(tmp_fp,"%s %d\n",user,permission); if(fp) fclose(fp); fclose(tmp_fp); memset(cmdbuf,0,128); strcpy(cmdbuf,"mv /tmp/permiss_tmp "); strcat(cmdbuf,PRIV_CONF_PATH); system(cmdbuf); return 1;}/*--------------------------------------------------------------------------* 删除用户权限 *--------------------------------------------------------------------------*/int cgi_remove_permission(const char *user){ FILE *fp,*tmp_fp; char user_buf[30]; char permission_buf[30]; char cmdbuf[128]; if (NULL==(fp=fopen(PRIV_CONF_PATH,"r"))) // open file pointer return 0; if (NULL==(tmp_fp=fopen("/tmp/rm_permiss_tmp","w+")))// open file pointer { fclose(fp); return 0; } while(0==feof(fp)) { fscanf(fp,"%s %s\n",user_buf,permission_buf); if(0!=strcmp(user,user_buf)) fprintf(tmp_fp,"%s %s\n",user_buf,permission_buf); } fclose(fp); fclose(tmp_fp); memset(cmdbuf,0,128); strcpy(cmdbuf,"mv /tmp/rm_permiss_tmp "); strcat(cmdbuf,PRIV_CONF_PATH); system(cmdbuf); return 1;}/*--------------------------------------------------------------------------* 发送信号 *--------------------------------------------------------------------------*/int send_command(char *msg){ int msgid; typedef struct msg_st { long int msg_type; char buf[64]; }MESSAGE; MESSAGE data; memset(data.buf, 0, 64); msgid = msgget((key_t)WAITER_KEY, 0666); data.msg_type = 1; strcpy(data.buf, msg); return msgsnd(msgid, (void *)&data, 64, IPC_NOWAIT);}/*--------------------------------------------------------------------------* 向logd发送写日志的消息 05.25,Kevin *--------------------------------------------------------------------------*/int send_log_msg (int msg_id, int log_type, char* username ){ struct sockaddr_in s_addr; int sock; int addr_len; int len; char buff[128]; time_t lt; lt = time(NULL); sprintf(buff, "%s\t%d\t%d\t%lu", username, msg_id, log_type, (dword) lt); if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(errno); } s_addr.sin_family = AF_INET; s_addr.sin_port = htons(7838); s_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr_len = sizeof(s_addr); len = sendto(sock, buff, strlen(buff), 0, (struct sockaddr *) &s_addr, addr_len); if (len < 0) { return 3;//发送错误 } close(sock); return 1;}/*-------------------------------------------------------------------*///弹出提示并跳转页面/*-------------------------------------------------------------------*/void alert_redirect ( char * alert, char * redirect_url ){ fprintf(cgiOut,"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n\ <HTML><HEAD>\n\ <META http-equiv=Content-Type content=\"text/html; charset=utf-8\">\n\ <meta http-equiv=\"pragma\" content=\"no-cache\">\n\ <script language=\"javascript\">window.alert(\"%s\");\n\ window.location.href=\"%s\";</script>\n\ </HEAD></HTML>", alert, redirect_url);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?