int UserDir::authenticate( HttpSession *pSession, const char * pUserName, int len, const char * pPasswd, int encryptMethod, const AuthRequired * pRequired ) { int ready = 0; const AuthUser * pUser = getRequiredUser( pSession, pUserName, len, pRequired, &ready ); if ( ready != 0 ) return ready; if ( !pUser || !pUser->isExist() ) return SC_401; const char * pStored = pUser->getPasswd(); // if (( encryptMethod == m_encryptMethod )|| // ( m_encryptMethod == AuthUser::ENCRYPT_UNKNOWN )) if ( pStored ) { switch( pUser->getEncMethod() ) { case ENCRYPT_UNKNOWN: case ENCRYPT_PLAIN: if ( strcmp( pPasswd, pUser->getPasswd() ) == 0 ) return 0; //fall through case ENCRYPT_CRYPT: if ( strcmp( pStored, crypt( pPasswd, pStored )) == 0 ) return 0; break; case ENCRYPT_MD5: if ( verifyMD5(pStored, pPasswd, 0 ) == 0 ) return 0; break; case ENCRYPT_SHA: if ( verifySHA(pStored, pPasswd, 0 ) == 0 ) return 0; break; case ENCRYPT_SMD5: if ( verifyMD5(pStored, pPasswd, 1 ) == 0 ) return 0; break; case ENCRYPT_SSHA: if ( verifySHA(pStored, pPasswd, 1 ) == 0 ) return 0; break; } } return SC_401; }
int main (int argc, char *argv[]) { aws_init(); if(argv[3] != NULL) { aws_set_debug(atoi(argv[3])); } IOBuf * aws_buf = aws_iobuf_new(); // Read credential file int rv = aws_read_config("myteksi"); if ( rv ) { fprintf(stderr, "Could not find a credential in the config file \n" ); fprintf(stderr, "Make sure your ~/.awsAuth file is correct \n" ); exit (1); } // Read config file FILE *fp = NULL; char getline[ LINE_MAX * sizeof(char) ]; if( (fp = fopen("s3config", "r")) == NULL) { //File does not exist. Initialize it if( (fp = fopen("s3config", "w+")) == NULL) { fprintf(stderr, "ERROR: Unable to create config file.\n"); exit(0); } // Ask for bucket_name fprintf(stdout, "Config file doesn't exist yet! Creating one now. \n"); fprintf(stdout, "Please specify the AWS S3 base address " "[default s3.amazonaws.com] :"); char getInput[ LINE_MAX * sizeof(char) ]; if( fgets( getInput, sizeof(getInput) , stdin ) != NULL ) { if( strcmp(getInput, "\n") != 0 ) { S3_host = strndup(getInput, strlen(getInput) -1); // Remove trailing NL } else { S3_host = strdup("s3.amazonaws.com"); } } int validbucketname = 0; while( !validbucketname ) { fprintf(stdout, "Please specify the bucket name: "); if( fgets( getInput, sizeof(getInput) , stdin ) != NULL ) { bucketname = strndup(getInput, strlen(getInput) -1); validbucketname = 1; } } char * buf = malloc( snprintf(NULL, 0, "S3_Base_Address=\"%s\"\n" "bucket_name=\"%s\"\n", S3_host, bucketname)); sprintf(buf, "S3_Base_Address=\"%s\"\n" "bucket_name=\"%s\"\n", S3_host, bucketname ); if( fputs( buf, fp ) == EOF ) { fprintf(stderr, "ERROR: Unable to create config file.\n"); } } // Config file exist, parse it else { char delim[4] = {'=', '\"', '\n', '\0'}; char* left; char* right; while( fgets( getline, sizeof(getline) , fp ) != NULL ) { if( (left = strtok(getline, delim)) != NULL ) { right = strtok(NULL, delim); } else { //Empty Line } // Match the strings char* comparison = "S3_Base_Address"; if( strcmp(left, comparison) == 0) { if(right != NULL) { S3_host = strdup(right); } else { S3_host = strdup("s3.amazonaws.com"); } } comparison = "bucket_name"; if( strcmp(left, comparison) == 0 && right != NULL) { bucketname = strdup(right); } } // End while if( S3_host == NULL || bucketname == NULL ) { fprintf(stderr, "ERROR: Invalid entry in config file.\n"); } } // Set parameters in S3 library s3_set_host(S3_host); s3_set_bucket(bucketname); s3_set_acl(S3_acl); // Check for valid arguments if ( argc != 3 && argc != 4 ) { fprintf(stderr, "Usage: s3util <operation> <filename>\n"); fprintf(stderr, "Operation can be one of {PUT, GET, DELETE}\n"); exit(1); } // Check if operation is valid operation = strdup(argv[1]); filename = strdup(argv[2]); // PUT file if( strcmp(operation, "PUT") == 0 ) { int rc; char s3replyMD5[33]; rv = put_file( aws_buf, filename ); rc = -1; if( aws_buf->eTag != NULL && strlen(aws_buf->eTag) > 2 ) { memset(s3replyMD5, 0, 33); memcpy(s3replyMD5, aws_buf->eTag + 1, 32); rc = verifyMD5(filename, s3replyMD5); } if(rv != 0 || rc != 0) { printf ( "PUT operation was unsuccessful \n" ); return rc; } printf ( "MD5SUM matches, file uploaded successfully \n" ); } // GET file else if( strcmp(operation, "GET") == 0 ) { rv = get_file( aws_buf, filename ); if(rv == 0 && aws_buf->code == 200) { printf ( "File was successfully downloaded \n" ); } else { printf ( "GET operation was unsuccessful \n" ); return(-1); } } // DELETE FILE else if( strcmp(operation, "DELETE") == 0 ) { rv = delete_file( aws_buf, filename ); if(rv == 0 && aws_buf->code == 204) { printf ( "File was successfully deleted \n" ); } else { printf ( "DELETE operation was unsuccessful \n" ); return(-1); } } else { fprintf(stderr, "Invalid operation, operation must be one of " "{PUT, GET, DELETE}\n"); return(1); } /* printf ( "RV %d\n", rv ); printf ( "CODE [%d] \n", aws_buf->code ); printf ( "RESULT [%s] \n", aws_buf->result ); printf ( "LEN [%d] \n", aws_buf->len ); printf ( "LASTMOD [%s] \n", aws_buf->lastMod ); printf ( "ETAG [%s] \n", aws_buf->eTag ); */ aws_iobuf_free(aws_buf); global_free(); return 0; }