亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? userdb.c

?? Linux下的飛鴿傳書
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* *  Copyright (C) 2006 Takeharu KATO * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#include <stdio.h>#include <string.h>#include <errno.h>#include <gnome.h>#include <glib.h>#include "callbacks.h"#include "common.h"static GList *users=NULL;static GList *waiter_windows=NULL;GStaticMutex userdb_mutex = G_STATIC_MUTEX_INIT;GStaticMutex win_mutex = G_STATIC_MUTEX_INIT;static gint userdb_find_element(gconstpointer a,gconstpointer b) {  int rc=-EINVAL;  userdb_t *user_a,*user_b;  if ( (!a) || (!b) )     goto out;  user_a=(userdb_t *)a;  user_b=(userdb_t *)b;  if ( (!strncmp(user_a->user,user_b->user,NAME_LEN)) &&       (!strcmp(user_a->ipaddr,user_b->ipaddr)) ) {    rc=0;    goto out; /* found */  }  rc=1; out:  return rc; /* Not found */}static gint userdb_find_by_ipaddr(gconstpointer a,gconstpointer b) {  int rc=-EINVAL;  userdb_t *user_a,*user_b;  if ( (!a) || (!b) )     goto out;  user_a=(userdb_t *)a;  user_b=(userdb_t *)b;  if (!strcmp(user_a->ipaddr,user_b->ipaddr))     return 0;  rc=-ESRCH; out:  return rc; /* Not found */}static voidprint_one_user_entry(gpointer data,gpointer user_data) {  userdb_t *current_user;  unsigned long skey,akey,sign;  if (!data)    return;  current_user=(userdb_t *)data;  dbg_out("NickName: %s\n",current_user->nickname);  dbg_out("Group: %s\n",current_user->group);  dbg_out("User: %s\n",current_user->user);  dbg_out("Host: %s\n",current_user->host);  dbg_out("IP Addr: %s\n",current_user->ipaddr);  dbg_out("Capability: %x\n",(unsigned int)current_user->cap);  if  (current_user->cap & IPMSG_DIALUPOPT)     dbg_out("\t Dialup host\n");  if  (current_user->cap & IPMSG_FILEATTACHOPT)     dbg_out("\t File Attach\n");  if  (current_user->cap & IPMSG_ENCRYPTOPT)     dbg_out("\t Encryption\n");  if (current_user->cap & IPMSG_UTF8OPT)    dbg_out("\t UTF-8\n");  if  (current_user->cap & IPMSG_ENCRYPTOPT) {#if defined(USE_OPENSSL)    dbg_out("\t Crypt capability\n");    if (current_user->crypt_cap) {      if (current_user->crypt_cap) {	skey=get_symkey_part(current_user->crypt_cap);	if (skey & IPMSG_RC2_40)	  dbg_out("\t RC2 40 bits\n");	if (skey & IPMSG_RC2_128)	  dbg_out("\t RC2 128 bits\n");	if (skey & IPMSG_RC2_256)	  dbg_out("\t RC2 256 bits\n");	if (skey & IPMSG_BLOWFISH_128)	  dbg_out("\t Blowfish 128 bits\n");	if (skey & IPMSG_BLOWFISH_256)	  dbg_out("\t Blowfish 256 bits\n");	akey=get_asymkey_part(current_user->crypt_cap);	if (akey & IPMSG_RSA_512)	  dbg_out("\t RSA 512 bits\n");	if (akey & IPMSG_RSA_1024)	  dbg_out("\t RSA 1024 bits\n");	if (akey & IPMSG_RSA_2048)	  dbg_out("\t RSA 2048 bits\n");		g_assert(current_user->pub_key_e);	g_assert(current_user->pub_key_n);	dbg_out("\tPublic key:\n");	dbg_out("\te=%s\n",current_user->pub_key_e);	dbg_out("\tn=%s\n",current_user->pub_key_n);	sign=get_sign_part(current_user->crypt_cap);	if (sign) {	  if (sign&IPMSG_SIGN_MD5)	    dbg_out("\t handle MD5 sign\n");	  if (sign&IPMSG_SIGN_SHA1)	    dbg_out("\t handle SHA1 sign\n");	}else{	    dbg_out("\t No sign\n");	}      }    }else{      dbg_out("\t\t Unknown\n");    }#else      dbg_out("\t\t Unknown\n");#endif  }  return;}static intalloc_user_info(userdb_t **entry){  userdb_t *new_user;  if (!entry)    return -EINVAL;  new_user=g_slice_new(userdb_t);  if (!new_user)    return -ENOMEM;  memset(new_user,0,sizeof(userdb_t));  *entry=new_user;  return 0;}static intdestroy_user_info_contents(userdb_t *entry){  if (!entry)    return -EINVAL;  if (entry->user)    g_free(entry->user);  if (entry->host)    g_free(entry->host);  if (entry->group)    g_free(entry->group);  if (entry->nickname)    g_free(entry->nickname);  if (entry->ipaddr)     g_free(entry->ipaddr);  if (entry->pub_key_e)    g_free(entry->pub_key_e);  if (entry->pub_key_n)    g_free(entry->pub_key_n);  memset(entry,0,sizeof(userdb_t));  return 0;}static voiddo_notify_change(gpointer data,gpointer user_data) {  GtkWidget *window;  if (!data)    return;  window=GTK_WIDGET(data);  update_users_on_message_window(window,FALSE);  return;}static intnotify_userdb_changed(void){  g_static_mutex_lock(&win_mutex);  g_list_foreach(waiter_windows,		 do_notify_change,		 NULL);    g_static_mutex_unlock(&win_mutex);}#define strdup_with_check(dest,src,member,err_label)	\  ((dest)->member)=g_strdup((src)->member);		\  if (!((dest)->member))				\    goto err_label ;                                      static intcopy_user_info(userdb_t *dest,userdb_t *src) {  int rc=-ENOMEM;  if ( (!dest) || (!src) )    return -EINVAL;  g_assert(!(dest->user));  g_assert(!(dest->host));  g_assert(!(dest->group));  g_assert(!(dest->nickname));  g_assert(!(dest->ipaddr));  g_assert(!(dest->pub_key_e));  g_assert(!(dest->pub_key_n));  dest->prio=src->prio;  dest->cap=src->cap;  dest->crypt_cap=src->crypt_cap;  /*  下記はマクロであることに注意  */  strdup_with_check(dest,src,user,err_out)  strdup_with_check(dest,src,host,err_out)  strdup_with_check(dest,src,group,err_out)  strdup_with_check(dest,src,nickname,err_out)  strdup_with_check(dest,src,ipaddr,err_out)    if (src->pub_key_e) {      strdup_with_check(dest,src,pub_key_e,err_out)      }  if (src->pub_key_n) {    strdup_with_check(dest,src,pub_key_n,err_out)      }  return 0; err_out:  destroy_user_info_contents(dest);  return rc;}static intfill_user_info_with_message(const char *peer_addr,const msg_data_t *msg,userdb_t *new_user){  int rc;  int default_prio;  if ( (!new_user) || (!msg) )    return -EINVAL;  memset(new_user,0,sizeof(userdb_t));  rc=-ENOMEM;  convert_string_internal(refer_user_name_from_msg(msg),(const gchar **)&(new_user->user));  if (new_user->user == NULL) {    ipmsg_err_dialog(_("Can not convert message from %s into ineternal representation"), peer_addr);    goto memclear_out;  }  convert_string_internal(refer_host_name_from_msg(msg),(const gchar **)&(new_user->host));  if (new_user->host == NULL) {    ipmsg_err_dialog(_("Can not convert message from %s into ineternal representation"), peer_addr);    goto free_user_out;  }  convert_string_internal(refer_group_name_from_msg(msg),(const gchar **)&(new_user->group));  if (new_user->group == NULL) {    ipmsg_err_dialog(_("Can not convert message from %s into ineternal representation"), peer_addr);    goto free_host_out;  }  convert_string_internal(refer_nick_name_from_msg(msg),(const gchar **)&(new_user->nickname));  if (new_user->nickname == NULL) {    ipmsg_err_dialog(_("Can not convert message from %s into ineternal representation"), peer_addr);    goto free_group_out;  }  convert_string_internal(peer_addr,(const gchar **)&(new_user->ipaddr));  if (new_user->ipaddr == NULL) {    ipmsg_err_dialog(_("Can not convert message from %s into ineternal representation"), peer_addr);    goto free_nickname_out;  }  rc=hostinfo_get_ipmsg_ipaddr_prio(new_user->ipaddr,&default_prio);  if (rc<0)    default_prio=0;  new_user->cap=msg->command_opts;  new_user->prio=default_prio;  dbg_out("Fill:  %s %s %s %s %d %x\n",	  new_user->user,	  new_user->host,	  new_user->group,	  new_user->ipaddr,	  new_user->prio,	  (unsigned int)new_user->cap);  return 0; free_ipaddr_out:  g_free(new_user->ipaddr); free_nickname_out:  g_free(new_user->nickname); free_group_out:  g_free(new_user->group); free_host_out:  g_free(new_user->host); free_user_out:  g_free(new_user->user); memclear_out:  memset(new_user,0,sizeof(userdb_t));  return rc;}static intadd_with_userdb_entry(userdb_t *new_user){  int rc;  GList *new_entry;  GList *current_entry=NULL;  if (!new_user)    return -EINVAL;  dbg_out("Add: %s %s %s %s %x\n",	  new_user->user,	  new_user->host,	  new_user->group,	  new_user->ipaddr,	  (unsigned int)new_user->cap);  g_static_mutex_lock(&userdb_mutex);  current_entry=g_list_find_custom (users,new_user,userdb_find_element);  if (!current_entry){    users=g_list_append(users,new_user);  } else {    rc=-EEXIST;    goto error_out;  }  /*   * 健全性チェック   */  new_entry=g_list_find_custom(users,new_user,userdb_find_element);  g_assert(new_entry);  g_assert(new_entry->data == new_user);  g_static_mutex_unlock(&userdb_mutex);  notify_userdb_changed();  return 0; error_out:  g_static_mutex_unlock(&userdb_mutex);  destroy_user_info(new_user);  return rc;}/* *start:length:ユーザ名:ホスト名:コマンド番號:IP アドレス: *ポート番號(リトルエンディアン):ニックネーム:グループ名 */static intuserdb_add_hostlist_entry(userdb_t *entry,const char **entry_string_p, int *is_last){  int rc;  char *buffer=NULL;  char *sp,*ep;  long remains;  int intval;  size_t len;  char *user=NULL;  char *host=NULL;  char *ipaddr=NULL;  int port;  char *nickname=NULL;  char *group=NULL;  const char *entry_string;  if ( (!entry) || (!entry_string_p) || (!is_last) )     return -EINVAL;  entry_string=*entry_string_p;  rc=-ENOMEM;  buffer=g_strdup(entry_string);  if (!buffer)    goto free_buffer_out;  rc=-ENOENT;  *is_last=1;  len=strlen(buffer);  remains=len;  dbg_out("Buffer:%s\n",buffer);  /*   * username   */  sp=buffer;  ep=memchr(sp, HOSTLIST_SEPARATOR, remains);  if (!ep)    goto free_buffer_out;  remains =len - ((unsigned long)ep-(unsigned long)sp);  if (remains<0)    goto free_buffer_out;  *ep='\0';  user=g_strdup(make_entry_canonical(sp));  if (!user)    goto free_buffer_out;  ++ep;  sp=ep;  dbg_out("user:%s\n",user);  /*   * host   */  ep=memchr(sp, HOSTLIST_SEPARATOR, remains);  if (!ep)    goto free_user_out;  remains =len - ((unsigned long)ep-(unsigned long)sp);  if (remains<0)    goto free_user_out;  *ep='\0';  host=g_strdup(make_entry_canonical(sp));  if (!host)    goto free_user_out;  ++ep;  sp=ep;  dbg_out("host:%s\n",host);  /*   * skip command   */  ep=memchr(sp, HOSTLIST_SEPARATOR , remains);  if (!ep)    goto free_host_out;  remains =len - ((unsigned long)ep-(unsigned long)sp);  if (remains<0)    goto free_host_out;  *ep='\0';  ++ep;  sp=ep;  /*   * ipaddr   */  ep=memchr(sp, HOSTLIST_SEPARATOR, remains);  if (!ep)    goto free_host_out;  remains =len - ((unsigned long)ep-(unsigned long)sp);  if (remains<0)    goto free_host_out;  *ep='\0';  ipaddr=g_strdup(make_entry_canonical(sp));  if (!ipaddr)    goto free_host_out;  ++ep;  sp=ep;  dbg_out("ipaddr:%s\n",ipaddr);  /*   * port   */  ep=memchr(sp, HOSTLIST_SEPARATOR , remains);  if (!ep)    goto free_ipaddr_out;  remains =len - ((unsigned long)ep-(unsigned long)sp);  if (remains<0)    goto free_ipaddr_out;  *ep='\0';  intval=strtol(sp, (char **)NULL, 10);  ++ep;  sp=ep;  dbg_out("port:%d\n",intval);  /*   * nick name   */  ep=memchr(sp, HOSTLIST_SEPARATOR , remains);  if (!ep)    goto free_ipaddr_out;  remains =len - ((unsigned long)ep-(unsigned long)sp);  if (remains<0)    goto free_ipaddr_out;  *ep='\0';  nickname=g_strdup(make_entry_canonical(sp));  if (!nickname)    goto free_ipaddr_out;  ++ep;  sp=ep;  dbg_out("nickname:%s\n",nickname);  /*   * group   */  ep=memchr(sp, HOSTLIST_SEPARATOR , remains);  if (!ep) {    ep=memchr(sp, '\0' , remains);    if (!ep)      goto free_nickname_out;  }else{    *is_last=0;  }  remains =len - ((unsigned long)ep-(unsigned long)sp);  if (remains<0)    goto free_nickname_out;  *ep='\0';  group=g_strdup(make_entry_canonical(sp));  if (!nickname)    goto free_nickname_out;  ++ep;  dbg_out("group:%s\n",group);  entry->user=user;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人8x视频一区二区| 欧美一区二区三区婷婷月色| 777亚洲妇女| 久久精品亚洲麻豆av一区二区| 亚洲精品免费看| 国产高清在线观看免费不卡| 精品视频一区二区三区免费| 久久九九影视网| 亚洲mv在线观看| 97se亚洲国产综合自在线| 日韩欧美在线不卡| 亚洲影视在线观看| 成人国产一区二区三区精品| 日韩欧美国产一二三区| 亚洲成人在线网站| 94色蜜桃网一区二区三区| 久久久久久免费| 美女国产一区二区三区| 欧美综合一区二区三区| 中文字幕亚洲在| 成人午夜碰碰视频| 久久久青草青青国产亚洲免观| 石原莉奈在线亚洲二区| 欧美三级电影精品| 亚洲美女视频在线| 一本久道中文字幕精品亚洲嫩| 国产蜜臀av在线一区二区三区| 久久国产精品99精品国产| 91精品国产欧美日韩| 三级精品在线观看| 欧美猛男男办公室激情| 午夜av区久久| 在线综合+亚洲+欧美中文字幕| 亚洲国产精品久久不卡毛片| 日本久久一区二区三区| 亚洲免费观看高清完整版在线观看| zzijzzij亚洲日本少妇熟睡| 国产欧美一区二区精品婷婷| 国产一区二区精品久久91| 久久九九影视网| 岛国av在线一区| 亚洲欧洲99久久| 99视频超级精品| 亚洲欧美综合网| 欧美性xxxxxx少妇| 日日摸夜夜添夜夜添国产精品| 91精品国产麻豆国产自产在线| 久久精品国产网站| 中文字幕欧美日本乱码一线二线| 国产91精品一区二区麻豆亚洲| 国产精品乱人伦| 在线区一区二视频| 免费日本视频一区| 国产欧美日韩三区| 色婷婷久久久久swag精品| 亚洲国产aⅴ天堂久久| 91精品蜜臀在线一区尤物| 国模少妇一区二区三区| 国产精品入口麻豆原神| 91久久精品午夜一区二区| 日本欧美一区二区三区乱码| 久久先锋影音av鲁色资源| 成人动漫精品一区二区| 亚洲观看高清完整版在线观看 | 视频一区二区三区中文字幕| 欧美一级二级在线观看| 成人性生交大片免费看中文| 亚洲最大成人网4388xx| 欧美大片在线观看一区二区| 不卡av在线网| 久久电影网站中文字幕| 国产精品国产三级国产| 欧美人伦禁忌dvd放荡欲情| 国产在线精品一区二区夜色| 中文字幕在线不卡一区| 制服丝袜日韩国产| 99riav久久精品riav| 六月婷婷色综合| 一区二区三区小说| 久久精品日产第一区二区三区高清版| 色综合中文综合网| 国产日产精品一区| 欧美日韩一区二区三区四区五区 | 亚洲一区二区三区爽爽爽爽爽| 精品国产乱码久久久久久图片| 91麻豆国产在线观看| 国内欧美视频一区二区| 亚洲一线二线三线视频| 亚洲国产成人午夜在线一区| 91精品国产入口| 欧美色中文字幕| 菠萝蜜视频在线观看一区| 美美哒免费高清在线观看视频一区二区 | 国产日韩欧美a| 欧美日韩一区二区三区四区五区 | 日韩毛片在线免费观看| 久久只精品国产| 日韩一级片网站| 欧美影片第一页| 91免费视频观看| 成人精品国产福利| 国产精品一区在线观看乱码| 日韩av电影免费观看高清完整版在线观看| 中文字幕制服丝袜一区二区三区| 精品日本一线二线三线不卡| 欧美另类变人与禽xxxxx| 日本韩国欧美一区| 97久久超碰国产精品| 成人免费毛片aaaaa**| 夫妻av一区二区| 国产黄色成人av| 懂色av噜噜一区二区三区av| 精一区二区三区| 黄一区二区三区| 国产一区二区三区不卡在线观看 | 欧美成人一区二区三区片免费| 欧美日韩一区国产| 精品1区2区3区| 欧美精品丝袜久久久中文字幕| 欧美精品高清视频| 欧美群妇大交群的观看方式| 欧美日韩一区二区电影| 欧美日韩精品专区| 欧美一区二区啪啪| 日韩亚洲国产中文字幕欧美| 日韩欧美国产一区二区在线播放 | 奇米色一区二区三区四区| 五月天欧美精品| 日日摸夜夜添夜夜添国产精品| 日韩精品成人一区二区在线| 老司机午夜精品| 国产成人免费网站| 91香蕉国产在线观看软件| 欧美亚洲国产一区二区三区| 欧美久久久久久久久| 日韩你懂的在线播放| 久久久电影一区二区三区| 一区视频在线播放| 樱花草国产18久久久久| 午夜av一区二区三区| 国产美女在线观看一区| av不卡免费电影| 欧美日韩中文国产| 久久综合久久综合久久| 国产精品久久久久永久免费观看 | 性感美女极品91精品| 久久国产综合精品| 成人av网站大全| 欧美日韩国产免费| 久久亚洲精华国产精华液| 亚洲视频 欧洲视频| 日韩精品电影一区亚洲| 国产高清不卡一区二区| 欧美综合一区二区| 欧美mv日韩mv国产网站app| 国产精品久久久久影视| 亚洲综合精品久久| 国产精品系列在线播放| 欧美视频自拍偷拍| 国产亚洲成年网址在线观看| 一二三区精品视频| 国模冰冰炮一区二区| 日本道在线观看一区二区| 精品精品国产高清一毛片一天堂| 亚洲三级在线观看| 国产在线国偷精品免费看| 91老司机福利 在线| 精品国产髙清在线看国产毛片| 亚洲婷婷在线视频| 国产一区二区三区高清播放| 欧美日韩精品欧美日韩精品一综合| 久久精品无码一区二区三区| 水野朝阳av一区二区三区| 99麻豆久久久国产精品免费优播| 日韩视频一区二区三区在线播放 | 亚洲五月六月丁香激情| 国产成人aaaa| 欧美videofree性高清杂交| 亚洲天堂免费看| 国产成人精品影院| 精品少妇一区二区| 爽好久久久欧美精品| 91小视频在线| 国产精品成人免费精品自在线观看| 国内一区二区在线| 日韩三级视频在线观看| 午夜欧美电影在线观看| 91高清视频在线| 亚洲色图制服诱惑| www.欧美色图| 欧美精彩视频一区二区三区| 精品在线一区二区| 337p亚洲精品色噜噜噜| 亚洲电影第三页| 欧美色国产精品| 亚洲成av人片一区二区三区| 欧洲色大大久久| 亚洲高清视频在线| 欧美精品少妇一区二区三区| 午夜私人影院久久久久|