Changeset 4475:c2aa5513d732 in roaraudio for libroar/auth.c


Ignore:
Timestamp:
10/11/10 00:28:19 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

implemented support to ask for a password

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroar/auth.c

    r4473 r4475  
    170170} 
    171171 
     172 
     173static int try_password (struct roar_connection * con) { 
     174 struct roar_message mes; 
     175 struct roar_auth_message authmes; 
     176 char * pw; 
     177 
     178 roar_auth_mes_init(&authmes, ROAR_AUTH_T_PASSWORD); 
     179 
     180 if ( roar_passwd_simple_ask_pw(&pw, "Password for RoarAudio Server?", NULL) == -1 ) { 
     181  return -1; 
     182 } 
     183 
     184 authmes.len = strlen(pw); 
     185 
     186 if ( roar_auth_init_mes(&mes, &authmes) == -1 ) { 
     187  roar_mm_free(pw); 
     188  return -1; 
     189 } 
     190 
     191 // do not use strcpy() because that would copy \0, too. 
     192 memcpy(authmes.data, pw, authmes.len); 
     193 
     194 roar_mm_free(pw); 
     195 
     196 if ( roar_req(con, &mes, NULL) == -1 ) 
     197  return -1; 
     198 
     199 if ( mes.cmd != ROAR_CMD_OK ) 
     200  return -1; 
     201 
     202 if ( roar_auth_from_mes(&authmes, &mes, NULL) == -1 ) 
     203  return -1; 
     204 
     205 if ( authmes.stage == 0 ) 
     206  return 0; 
     207 
     208 return -1; 
     209} 
     210 
    172211#define _EOL ROAR_AUTH_T_AUTO 
    173212int roar_auth   (struct roar_connection * con) { 
     
    179218              ROAR_AUTH_T_IDENT, 
    180219              ROAR_AUTH_T_RHOST, 
     220              ROAR_AUTH_T_PASSWORD, 
    181221              ROAR_AUTH_T_NONE, 
    182222              _EOL 
     
    184224 
    185225 for (i = 0; ltt[i] != _EOL; i++) { 
    186   roar_auth_mes_init(&authmes, ltt[i]); 
    187  
    188   if ( (ret = roar_auth_ask_server(con, &authmes)) == -1 ) 
    189    continue; 
     226  switch (ltt[i]) { 
     227    case ROAR_AUTH_T_PASSWORD: 
     228     if ( (ret = try_password(con)) == -1 ) 
     229      continue; 
     230     break; 
     231    case ROAR_AUTH_T_TRUST: 
     232    case ROAR_AUTH_T_IDENT: 
     233    case ROAR_AUTH_T_RHOST: 
     234    case ROAR_AUTH_T_NONE: 
     235     roar_auth_mes_init(&authmes, ltt[i]); 
     236     if ( (ret = roar_auth_ask_server(con, &authmes)) == -1 ) 
     237      continue; 
     238    break; 
     239   default: /* Bad error! */ 
     240     return -1; 
     241    break; 
     242  } 
    190243 
    191244  if ( authmes.stage != 0 ) 
     
    242295 
    243296 memset(mes, 0, sizeof(struct roar_message)); 
     297 
     298 mes->cmd = ROAR_CMD_AUTH; 
    244299 
    245300 if ( (ames->len + 4) > sizeof(mes->data) ) { 
     
    272327 
    273328 memset(mes, 0, sizeof(struct roar_message)); 
     329 
     330 mes->cmd = ROAR_CMD_AUTH; 
    274331 
    275332 mes->data[0] = ames->type; 
Note: See TracChangeset for help on using the changeset viewer.