//添加MD5校验
char *ALI_buildRequestMysign(ALI_MAP *head)
{
	uint8 len,i,buf[16] = {0};
	char *md5,*list;
	list = ALI_createLinkString(head);
	strcat(list,ali_key);
	MDString(list,buf);

	md5 = malloc(36);
	memset(md5,0,sizeof(36));
	for(i = 0;i < 16;i++){
		sprintf(&md5[i * 2],"%02d",buf[i]);
	}
	md5[32] = '\0';
	

	return md5;
}
Пример #2
0
/* Digests a reference suite of strings and prints the results.
*/
static void MDTestSuite ()
{
	printf("MD%d test suite:\n", MD);

	MDString("");
	MDString("a");
	MDString("abc");
	MDString("message digest");
	MDString("abcdefghijklmnopqrstuvwxyz");
	MDString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
	MDString("1234567890123456789012345678901234567890\
			 1234567890123456789012345678901234567890");
}
Пример #3
0
/* Digests a reference suite of strings and prints the results. */
int
main(void)
{
	printf("MD%d test suite:\n", MD);

	MDString("");
	MDString("a");
	MDString("abc");
	MDString("message digest");
	MDString("abcdefghijklmnopqrstuvwxyz");
	MDString("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
		"abcdefghijklmnopqrstuvwxyz0123456789");
	MDString("1234567890123456789012345678901234567890"
		"1234567890123456789012345678901234567890");

	return 0;
}
Пример #4
0
/* Main driver.

	Arguments (may be any combination):
	  -sstring - digests string
	  -t       - runs time trial
	  -x       - runs test script
	  filename - digests file
	  (none)   - digests standard input
 */
int main (int argc, char *argv [])
{
	int i;

	if (argc > 1)
		for (i = 1; i < argc; i++)
			if (argv [i][0] == '-' && argv [i][1] == 's')
				MDString (argv[i] + 2);
			else if (strcmp (argv [i], "-t") == 0)
				MDTimeTrial ();
			else if (strcmp (argv [i], "-x") == 0)
				MDTestSuite ();
			else
				MDFile (argv[i]);
	else
		MDFilter ();

	return (0);
}
void search()
{
     char str[1000],val[500],hexval[1000]; 
     int d[1000],i;
     lptr z;
     fflush(stdin);
     printf("\nEnter the key to be searched:");
     gets(str);
     


                 	FILE *fp1,*fp;

			fp1 = fopen("hfile.txt","w+"); 
			fclose(fp1);

			MDString(str);

			fp=fopen("hfile.txt","r");
			fscanf(fp,"%s",hexval);         
			fclose(fp);

			fp1=fopen("hashvalues.txt","w+");
			fclose(fp1);

			convert1(hexval);

			fp1=fopen("hashvalues.txt","r");
			fscanf(fp1,"%s",val);
			fclose(fp1);

			for(i=0;i<128;i++)
			d[i]=val[i]-48;
				
               
               
               z=closest(d,root);
               if(!strcmp(z->key,str)) printf("\nSuccessful\n");
               else                     printf("\nNO\n");  
  }      
Пример #6
0
/*  
 * LoginSendInfo:  Send login information (username, password, etc.) to server.
 */
void LoginSendInfo(void)
{
   unsigned char buf[ENCRYPT_LEN + 1];

   GetSystemStats(&sysinfo);

   // Encrypt password
   MDString(config.password, buf);
   buf[ENCRYPT_LEN] = 0;

   debug(("Got partner code of %d.\n", (sysinfo.reserved & 0xFF00) >> 8));

   // Load the RSB hash from LoginSendInfo to ensure we have an up-to-date hash.
   LoadRSBHash();

   RequestLogin(MAJOR_REV, MINOR_REV, 
      sysinfo.platform, sysinfo.platform_major, sysinfo.platform_minor,
      sysinfo.memory, sysinfo.chip, 
      sysinfo.screen_width, sysinfo.screen_height, 
      sysinfo.color_depth, sysinfo.bandwidth, sysinfo.reserved,
      config.username, buf, GetRSBHash());
}
Пример #7
0
/* Digests a reference suite of strings and prints the results. */
void MDTestSuite()
{
    printf ("MD5 test suite:\n");

    MDString("");
    MDString("a");
    MDString("abc");
    MDString("message digest");
    MDString("abcdefghijklmnopqrstuvwxyz");
    MDString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
    MDString("12345678901234567890123456789012345678901234567890123456789012345678901234567890");

    printf("correct output:\n");
    printf("MD5(\"\") = d41d8cd98f00b204e9800998ecf8427e\n");
    printf("MD5(\"a\") = 0cc175b9c0f1b6a831c399e269772661\n");
    printf("MD5(\"abc\") = 900150983cd24fb0d6963f7d28e17f72\n");
    printf("MD5(\"message digest\") = f96b697d7cb7938d525a2f31aaf161d0\n");
    printf("MD5(\"abcdefghijklmnopqrstuvwxyz\") = c3fcd3d76192e4007dfb496cca67e13b\n");
    printf("MD5(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\") = d174ab98d277d9f5a5611c2c9f419d9f\n");
    printf("MD5(\"12345678901234567890123456789012345678901234567890123456789012345678901234567890\") = 57edf4a22be3c955ac49da2e2107b67a\n");
}
Пример #8
0
void EventHandler::processPaymentVerify(EventCmd &e,vector<string> &check_cmd)
{
    //if(check_cmd.size()!=4) return;
    /*    uid_type uid;
     bool check = safeAtoll(check_cmd[1], uid);
     if(check == false) return;
     User * user = safeGetUser(uid, CMD_PAYMENTVERIFY, e.fd_, check_cmd[2]);
     if(user == NULL) return;
     string input = e.cmd_.substr(e.cmd_.find('{'));
     if(input.size()>=3000){
     sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
     return;
     }
     char * outputc = (char * ) malloc (4*((input.length()+2)/3));
     if(outputc == NULL){
     sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
     return;
     }
     base64_encode((unsigned char * )input.c_str(), (int)input.length(),
     (unsigned char  *)outputc, (int)4*((input.length()+2)/3));
     string output = string(outputc,(int)4*((input.length()+2)/3));
     free(outputc);
     string * test = new string("{\"receipt-data\":\"" + output + "\"}");
     //pp->verify_info = &check_cmd[3];
     pp->verify_info = test;
     pthread_create(&tid,NULL,verify,(void *)pp);
     */
    
    //read params
    uid_type uid;
    int server_id;
    string product_id;
    bool check = safeAtoll(check_cmd[1], uid);
    if(check == false)return;
    if(check_cmd[3].size()>64 ||check_cmd[3].size()<=0||check_cmd[5].size()>64 ||check_cmd[5].size()<=0) return;
    //string tran_id = check_cmd[3];
    string * tran_id = new string(check_cmd[3]);
    check = safeAtoi(check_cmd[4], server_id);
    if(check == false) return;
    product_id = check_cmd[5];
    
    sconfig * sc = game_config.getSconfig(server_id);
    if(sc == NULL){
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_INFO_ERROR);
        return;
    }
    if(game_config.payment_.find(product_id) == game_config.payment_.end()){
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_INFO_ERROR);
        return;
    }
    
    //try to load
    PaymentInfo *pi = NULL;
    check = dh_->loadPayment(*tran_id, pi);
    if(check == false){
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    
    string input = e.cmd_.substr(e.cmd_.find('{'));
    if(input.size()>=3000){
        //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    char * outputc = (char *) malloc (4*((input.length()+2)/3));
    if(outputc == NULL){
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    base64_encode((unsigned char * )input.c_str(), (int)input.length(),
                  (unsigned char  *)outputc, (int)4*((input.length()+2)/3));
    string output = string(outputc,(int)4*((input.length()+2)/3));
    free(outputc);
    //string * test = new string("{\"receipt-data\":\"" + output + "\"}");
    
    //check
    string checkcode = MDString(output.c_str());
    if(pi == NULL){
        pi = new PaymentInfo(*tran_id,product_id,checkcode);
        if(pi == NULL){
            sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
            return;
        }
        //pi->tran_id_ = tran_id;
        pi->uid_ = uid;
        pi->pay_time_ = time(NULL);
        //pi->product_id_ = product_id;
        pi->server_id_ = server_id;
        pi->status_ = PAYMENT_STATUS_REQUEST_RECEIVED;
        pi->status_ = PAYMENT_STATUS_VERIFY_SEND;
        //pi->check_info_ = checkcode;
        
        check = dh_->addNewPayment(pi);
        if(check == false || dh_->db_error_ != 0){
            delete pi;
            sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
            return;
        }
        
    }else{
        if(uid != pi->uid_ || server_id_ != pi->server_id_ || product_id != pi->product_id_ || checkcode != pi->check_info_){
            delete pi;
            //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH);
            sendErrorResponseFroPayment(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_ORDER_INFO_NOT_MATCH, (*tran_id));
            return;
        }
        if(pi->status_ == PAYMENT_STATUS_REQUEST_RECEIVED || pi->status_ == PAYMENT_STATUS_VERIFY_SUCC){
        }else if(pi->status_ == PAYMENT_STATUS_VERIFY_SEND
                 || pi->status_ == PAYMENT_STATUS_ADDCMD_SEND){
            delete pi;
            sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_WRONG_TIME);
            return;
        }else if(pi->status_ == PAYMENT_STATUS_REQUEST_REFUSED || pi->status_ == PAYMENT_STATUS_ADDCMD_SUCC){
            delete  pi;
            //sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_TRADE_COMPLETE);
            sendErrorResponseFroPayment(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_PAYMENT_TRADE_COMPLETE, (*tran_id));
            return;
        }
    }
    if(pi!=NULL){
        delete pi;
    }
    string * test = new string("{\"receipt-data\":\"" + output + "\"}");
    pthread_t tid;
    struct PaymentParam *pp;
    pp = (struct PaymentParam *) malloc (sizeof(PaymentParam));
    if(pp == NULL) {
        sendErrorResponse(e.fd_, CMD_PAYMENTVERIFYRECEIVED, ERROR_SYSTEM_CRITICAL_ERROR);
        return;
    }
    pp->uid = uid;
    pp->tran_id = tran_id;
    pp->eq = eq_;
    pp->fd_ = e.fd_;
    pp->verify_info = test;
    pp->server_id = server_id;
    pthread_create(&tid,NULL,verify,(void *)pp);
    return;
}
Пример #9
0
int main(int argc, char *argv[]){
  
  char nombre[MAX_LONG];  // Nombre de esta Bomba
  char *nombre_pointer= &nombre[0]; // para poder enviarlo por RPC 
  int capMax;             // Capacidad Máxima (Litros)
  char archivo[MAX_LONG]; // Nombre de archivo "DNS"

  // Datos de los servidores
  char* nombres[MAX_SERVERS];
  char* direcciones[MAX_SERVERS];
  int tiempos[MAX_SERVERS]; //tiempos de respuesta
  CLIENT *clnts[MAX_SERVERS];

  // Validar y obtener argumentos del cliente
  argumentos_cliente(argc,argv,nombre,&inventario,&consumo,&capMax,archivo);

  obtener_lista_dns(archivo, nombres,direcciones);
 
  // creacion del archivo LOG del cliente
  char nombre_LOG[MAX_LONG];
  sprintf(nombre_LOG,"log_%s.txt",nombre);
  LOG = fopen(nombre_LOG,"w");

  fprintf(LOG,"Inventario inicial %d \n ", inventario);
  if(inventario == 0) fprintf(LOG,"Tanque vacio: 0 minutos \n");
  if(inventario == capMax) fprintf(LOG,"Tanque full: 0 minutos \n");
  
  // PEDIR TIEMPOS
  int k = 0;
  while ((direcciones[k]) != NULL){

    clnts[k]= clnt_create (direcciones[k], SERVICIOPDVSA, SERVICIOPDVSAVERS, "tcp");
    if(clnts[k] == NULL){
      clnt_pcreateerror( direcciones[k] );
      tiempos[k] = 500;
      k = k + 1;
      continue;
    }
     
    int *result = pedir_tiempo_1(NULL,clnts[k]);
    if ( result == (int *)NULL){
      clnt_perror( clnts[k], "Error al conectar con servidor");
      tiempos[k] = 500;
    }else{
      tiempos[k]= *result;
    }
    
    k = k + 1;
  }
 
  // ORDENAR EL ARREGLO DE TIEMPOS y TODOS LOS DEMAS 
  int i = 0 ;
  int minimo;
  int j;
 
  while (nombres[i]!=NULL){
   
    minimo = i;
    j = i + 1;
    while (nombres[j]!=NULL){
      if (tiempos[j] < tiempos[minimo]){
	minimo = j;
      }
      j = j +1;   
    }
  
    swap(&tiempos[i],&tiempos[minimo]);
    swapLetras(&nombres[i],&nombres[minimo]);
    swapLetras(&direcciones[i],&direcciones[minimo]);
    swapPointer(&clnts[i],&clnts[minimo]);
    i=i+1;
  }
 

  // Iniciar contador de tiempo 
  pthread_t contador_tiempo;
  int tiempo = 0;
  pthread_create(&contador_tiempo,NULL,llevar_tiempo,&tiempo);
 
  /**** INICIO DE LA SIMULACION ****/   
  int r = 0;

  while (tiempo <= 480){
    //Iterar sobre los servidores pidiendo gasolina
    
    if(direcciones[r] == NULL){
      // Si llegamos al final de la lista, reiniciar.
      r = 0;
      usleep(100000);
    }

    if ((capMax-inventario)>=38000){

      // Verificar si el servidor no respondió al pedir tiempos
      if (tiempos[r] == 500){ 
	r = r +1;
	continue;
      }

      // Pedir gasolina al servidor num r, almacenar respuesta en buffer gasolina
      char gasolina[20];
      char **result2 = pedir_gasolina_1( &nombre_pointer, clnts[r] );
      if ( result2 == (char **)NULL){
	clnt_perror( clnts[r], "Error al conectar con servidor");
	r = r+1;
	continue;
      }else{
	strcpy(gasolina,*result2);
      }
      
      // Procesar respuesta del servidor
      if (strcmp(gasolina,"noDisponible") == 0){

	fprintf(LOG,"Peticion: %d minutos, %s , No disponible, %d litros \n",
		tiempo, nombres[r],inventario);

	// Pedir gasolina al siguiente servidor en la lista
	r = r + 1; 
	continue;

	// si su ticket no esta vigente o no tiene ticket 
      } else if ( strcmp(gasolina,"noTicket") == 0 ){

	 int *retoInt = pedir_reto_1(NULL,clnts[r]);
 

	 // convertir el reto de int a string
	 char retoStr[10];
	 sprintf(&retoStr[0],"%d",*retoInt);

	 // Aplicar el algoritmo MD5
	 unsigned char respUChar[16];
	 MDString (&retoStr[0],&respUChar[0]);
	
	 // Convertir la respuesta a String
	 char respString[33];
	 int i;
	 for(i = 0; i < 16; ++i)
	   sprintf(&respString[i*2], "%02x", (unsigned int)respUChar[i]);

	 // Para que RPC nos permita pasarlo como argumento
	 char *respStr= (char*) &respString[0];
	 int *resp = enviar_respuesta_1(&respStr, clnts[r]);
	 
	 if ( *resp == -1){
	   fprintf(LOG,"Autenticacion Fallida \n");
	   r = r + 1;
	   continue;
	 }else{
	   fprintf(LOG,"Autenticacion Correcta\n");
	   continue;
	   
	 } 
	 
      } else {
	// El ticket aun sigue vigente . Esperar y recibir gasolina.

	fprintf(LOG,"Peticion: %d minutos, %s, OK, %d litros  \n",
		tiempo, nombres[r],inventario);
	
	usleep((tiempos[r]+1)*100000); 
	
	pthread_mutex_lock(&mutex);
	inventario = inventario + 38000;
	pthread_mutex_unlock(&mutex);
	
	fprintf(LOG,"Llegada Gandola: %d minutos, %d litros \n", tiempo,inventario);
	if (inventario==capMax){ fprintf(LOG,"Tanque Full: %d minutos\n",tiempo);}
	
	// Reiniciar la busqueda de servidores activos
	r = 0;
      } 
      
    }// fin del if (que verifica si se necesita gasolina)

  }// Fin del while (Se acabó el tiempo)

  fclose(LOG);  
  return 0;
}
Пример #10
0
/* Main driver.

Arguments (may be any combination):
  -sstring - digests string
  -t       - runs time trial
  -x       - runs test script
  filename - digests file
  (none)   - digests standard input
 */
int
main(int argc, char *argv[])
{
	int	ch;
	char   *p;
	char	buf[HEX_DIGEST_LENGTH];
	int	failed;
 	unsigned	digest;
 	const char*	progname;

 	if ((progname = strrchr(argv[0], '/')) == NULL)
 		progname = argv[0];
 	else
 		progname++;

 	for (digest = 0; digest < sizeof(Algorithm)/sizeof(*Algorithm); digest++)
 		if (strcasecmp(Algorithm[digest].progname, progname) == 0)
 			break;

 	if (digest == sizeof(Algorithm)/sizeof(*Algorithm))
 		digest = 0;

	failed = 0;
	checkAgainst = NULL;
	checksFailed = 0;
	while ((ch = getopt(argc, argv, "c:pqrs:tx")) != -1)
		switch (ch) {
		case 'c':
			checkAgainst = optarg;
			break;
		case 'p':
			MDFilter(&Algorithm[digest], 1);
			break;
		case 'q':
			qflag = 1;
			break;
		case 'r':
			rflag = 1;
			break;
		case 's':
			sflag = 1;
			MDString(&Algorithm[digest], optarg);
			break;
		case 't':
			MDTimeTrial(&Algorithm[digest]);
			break;
		case 'x':
			MDTestSuite(&Algorithm[digest]);
			break;
		default:
			usage(&Algorithm[digest]);
		}
	argc -= optind;
	argv += optind;

	if (*argv) {
		do {
			p = Algorithm[digest].File(*argv, buf);
			if (!p) {
				warn("%s", *argv);
				failed++;
			} else {
				if (qflag)
					printf("%s", p);
				else if (rflag)
					printf("%s %s", p, *argv);
				else
					printf("%s (%s) = %s",
					    Algorithm[digest].name, *argv, p);
				if (checkAgainst && strcmp(checkAgainst,p))
				{
					checksFailed++;
					if (!qflag)
						printf(" [ Failed ]");
				}
				printf("\n");
			}
		} while (*++argv);
	} else if (!sflag && (optind == 1 || qflag || rflag))
		MDFilter(&Algorithm[digest], 0);

	if (failed != 0)
		return (1);
	if (checksFailed != 0)
		return (2);

	return (0);
}
Пример #11
0
static void thread_write_fn(void *arg)
{
	char *id = (char*) arg;
	char  key[256], buf[256];
	ACL_VSTRING *value = acl_vstring_alloc(__value_size);
	time_t begin, last, now;
	DICT_POOL_DB *db;
	int   i, n, j;
	KEY *key_array;

	key_array = (KEY*) acl_mycalloc(__max, sizeof(KEY));

	n = __value_size;
	acl_vstring_sprintf(value, "%u:", (unsigned) acl_pthread_self());
	n -= LEN(value);
	for (i = 0; i < n; i++)
		ACL_VSTRING_ADDCH(value, 'v');
	ACL_VSTRING_TERMINATE(value);

	time(&begin);
	last = begin;
	for (j = 0, i = __begin; i < __begin + __max; i++) {
		snprintf(buf, sizeof(buf), "%s:%s:%d", __key_pre, id, i);
#if 0
		MDString(buf, key, sizeof(key));
#else
		acl_uint64 k = acl_hash_crc64(buf, strlen(buf));
		snprintf(key, sizeof(key), "%llu", k);
#endif
		key_array[j++].key = acl_mystrdup(key);
	}

	if (__max <= 100) {
		printf("before sort\n");
		for (i = 0; i < __max; i++) {
			printf("key[%d]: %s\n", i, key_array[i].key);
		}
	}

	if (__sort)
		qsort(key_array, __max, sizeof(KEY), cmp_fn);

	if (__max <= 100) {
		printf("after sort\n");
		for (i = 0; i < __max; i++) {
			printf("key[%d]: %s\n", i, key_array[i].key);
		}
	}

	for (i = 0; i < __max; i++) {
		char *ptr;
		size_t size;

		db = dict_pool_db(__dict_pool, key_array[i].key, strlen(key_array[i].key));
		dict_pool_db_lock(db);
		ptr = dict_pool_db_get(db, key_array[i].key, strlen(key_array[i].key), &size);
		if (ptr != NULL) {
			printf("key: %s exist now, size: %d\n", key_array[i].key, (int) size);
			acl_myfree(ptr);
		}
		dict_pool_db_set(db, key_array[i].key, strlen(key_array[i].key), STR(value), LEN(value));

		ptr = dict_pool_db_get(db, key_array[i].key, strlen(key_array[i].key), &size);
		if (ptr == NULL) {
			printf("key: %s not add into db\n", key_array[i].key);
		} else
			acl_myfree(ptr);
		dict_pool_db_unlock(db);

		if (i > 0 && i % __report_base == 0) {
			time(&now);
			printf("thread %u add one, i=%d, time=%ld, key=%s\r\n",
				(unsigned) acl_pthread_self(), i, now - last, key_array[i].key);
			last = now;
		}
		LOCK;
		__nwrite++;
		UNLOCK;
	}

	for (i = 0; i < __max; i++) {
		acl_myfree(key_array[i].key);
	}
	acl_myfree(key_array);
	acl_vstring_free(value);
	acl_myfree(id);
	printf("thread %u add over, i=%d, time=%ld\r\n",
		(unsigned) acl_pthread_self(), i, time(NULL) - begin);
}
Пример #12
0
BOOL CALLBACK PasswordDialogProc(HWND hDlg, UINT message, UINT wParam, LONG lParam)
{
   static HWND hOldPasswd, hNewPasswd1, hNewPasswd2;
   char oldpasswd[MAXPASSWORD + 1], newpasswd1[MAXPASSWORD + 1], newpasswd2[MAXPASSWORD + 1];
   char buf1[ENCRYPT_LEN + 1], buf2[ENCRYPT_LEN + 1];

   switch (message)
   {
   case WM_INITDIALOG:
      if (hPasswdDialog)
      {
         DestroyWindow(hDlg);
         return TRUE;
      }
      
      CenterWindow(hDlg, GetParent(hDlg));
      
      hOldPasswd = GetDlgItem(hDlg, IDC_OLDPASSWD);
      hNewPasswd1 = GetDlgItem(hDlg, IDC_NEWPASSWD1);
      hNewPasswd2 = GetDlgItem(hDlg, IDC_NEWPASSWD2);
      
      Edit_LimitText(hOldPasswd, MAXPASSWORD);
      Edit_LimitText(hNewPasswd1, MAXPASSWORD);
      Edit_LimitText(hNewPasswd2, MAXPASSWORD);

      SetWindowFont(hOldPasswd, GetFont(FONT_INPUT), FALSE);
      SetWindowFont(hNewPasswd1, GetFont(FONT_INPUT), FALSE);
      SetWindowFont(hNewPasswd2, GetFont(FONT_INPUT), FALSE);
      hPasswdDialog = hDlg;
      return TRUE;
      
   case WM_COMMAND:
      switch(GET_WM_COMMAND_ID(wParam, lParam))
      {
      case IDOK:
         /* User has pressed return on one of the edit boxes */
         if (GetFocus() == hOldPasswd)
         {
            SetFocus(hNewPasswd1);
            return TRUE;
         }
         
         if (GetFocus() == hNewPasswd1)
         {
            SetFocus(hNewPasswd2);
            return TRUE;
         }
         
         if (GetFocus() == hNewPasswd2)
            PostMessage(hDlg, WM_COMMAND, IDC_OK, 0);
         return TRUE;
         
      case IDC_OK:
         /* Send results to server */	 
         Edit_GetText(hOldPasswd, oldpasswd, MAXPASSWORD + 1);
         Edit_GetText(hNewPasswd1, newpasswd1, MAXPASSWORD + 1);
         Edit_GetText(hNewPasswd2, newpasswd2, MAXPASSWORD + 1);
         
         if (0 != strcmp(newpasswd1, newpasswd2))
         {
            ClientError(hInst, hDlg, IDS_PASSWDMATCH);
            return TRUE;
         }
         
         if (strlen(newpasswd1) < MINPASSWORD)
         {
            ClientError(hInst, hDlg, IDS_PASSWDLENGTH, MINPASSWORD);
            return TRUE;
         }
         
         // Recall this was the last attempt to change a password.
         // It's just stopping the auto-nagging feature from popping
         // up a dialog box later.
         //
         // The config.password is checked elsewhere, such as by
         // modules that need confirmation for drastic features.
         //
         // To improve the security, we only update these if we *think*
         // they're right about the password.  Not perfect, but we
         // never get word from the server that the password was right.
         //
         if (0 == strcmp(oldpasswd, config.password))
         {
            config.lastPasswordChange = time(NULL);
            strcpy(config.password, newpasswd1);
         }

         // Encrypt old and new passwords for the server.
         // It's up to the server to check if we are allowed to change
         // the password, based on the correct old password.
         //
         MDString(oldpasswd, (unsigned char *) buf1);
         buf1[ENCRYPT_LEN] = 0;
         MDString(newpasswd1, (unsigned char *) buf2);
         buf2[ENCRYPT_LEN] = 0;
         RequestChangePassword(buf1, buf2);
         
         hPasswdDialog = NULL;
         EndDialog(hDlg, IDOK);
         return TRUE;
         
      case IDCANCEL:
         hPasswdDialog = NULL;
         EndDialog(hDlg, IDCANCEL);
         return TRUE;
      }
      break;
   }
   return FALSE;
}
Пример #13
0
void main(int arg,char **args)
{
	DIR* ret = NULL;
	int8_t  cmd[200] = { 0 };
	if(arg != 2)
	{
		printf("example: mkupImage [dir].. \n");
		return ;
	}

	ret = opendir(args[1]);
	if(NULL == ret)
	{
		printf("Cannot open directory: %s\n",args[1]);
		return;
	}
	closedir(ret);
	if(0 >= DirDetectFile(args[1]))
	{
		printf("Cannot find file or find failed!!\n");
		return ;
	}

	sprintf(cmd, "tar -cvf ./update.tar %s",args[1]);
	if(0 != system(cmd))
	{
		printf("tar update.tar is failed!!!\n");
		return ;
	}
	
	/* 计算哈希值 */
	int8_t *pHash = "0";
				
	int8_t buffer[8*1024] = {0};
	FILE *tarfile;
	int8_t *pbuffer = buffer;
		
	tarfile = fopen("update.tar","r");
	if(tarfile != NULL)
	{
		//hash写0		
		if(VERIFYLEN == fread(pbuffer,1, VERIFYLEN, tarfile))
		{
			if(0 == fseek(tarfile,-(VERIFYLEN),SEEK_END))
		 	{
				if(VERIFYLEN == fread(pbuffer+VERIFYLEN, 1, VERIFYLEN, tarfile))
				{
					pHash = MDString(pbuffer,VERIFYLEN*2);
				}
			}
		}		
	}
	else
	{
		printf("open update.tar is fail!!!\n");
		return ;
	}
				
	FILE *file = fopen("hash","w+");
	if(file == NULL)
	{
		printf("create hash is fail!!\n");
		return ;
	}
	printf("hash [ %s ]\n",pHash);
	
	fprintf(file,"%s",pHash);
	fclose(file);

	/* 添加hash值文件 */
	sprintf(cmd,"tar -rvf update.tar hash");
	if(0 != system(cmd))
	{
		printf("tar -rvf update.tar hash is failed!!\n");
		system("rm -f update.tar hash");
		return;
	}

	/* 压缩文件 */
	sprintf(cmd,"gzip ./update.tar -f");
	if(0 != system(cmd))
	{
		printf("gzip update.tar is failed!!\n");
		system("rm -f update.tar hash");
		return;
	}
	system("rm -f hash");
	printf("create upgrade file update.tar.gz is success!!\n");

}