void pyloader_auto_load(void) { GSList *node; char *autodir; const char *name; GDir *gd; for (node = script_paths; node; node = node->next) { autodir = g_strdup_printf("%s/autorun", (char *)node->data); gd = g_dir_open(autodir, 0, NULL); g_free(autodir); if (!gd) continue; while ((name = g_dir_read_name(gd))) { char *path = g_strdup_printf("%s/autorun/%s", (char*)node->data, name); if (!strcmp(file_get_ext(name), "py")) py_load_script_path(path); g_free(path); } g_dir_close(gd); } }
/* REQUEST_get_mime_type( const char *filename ) @filename - nazwa pliku, po rozszerzeniu kt�rej b�dzie przydzielany mime-type - zwraca char* z typ MIME na podstawie tablicy mime_types ( server_shared.h ) wczytanej z pliku mime_type.cfg. */ char* REQUEST_get_mime_type( const char *filename ) { int i = 0; char *ext = file_get_ext( filename ); for( i = 0; i < mime_types_count; ++i ) { if( strncasecmp( ext, mime_types[ i ].ext, EXT_LEN ) == 0 ) { return mime_types[ i ].mime_type; } } return NULL; }
/* REQUEST_process( HTTP_SESSION *http_session ) @http_session - wska�nik do pod��czonego klienta - po udanej weryfikacji danych przechodzi do pr�by przes�ania ��danego zasobu */ void REQUEST_process( HTTP_SESSION *http_session ) { char *local_file_path; /* Lokalna �cie�ka do ��danego pliku */ char *file_ext; /* Rozszerzenie ��danego pliku */ char *add_hdr; /* Opcjonalne nag��wki */ char *ht_access_pwd; /* Has�o do ��danego zasobu z funkcji file_params*/ int len_loc; /* D�ugo�� ��danej �cie�ki */ int file_params_val = 0; /* Przechowuje wynik dzia�ania funkcji file_params */ len_loc = strlen( http_session->http_info.http_local_path ); /* Przygotowanie pami�ci na nazw� ��danego pliku */ local_file_path = malloc( MAX_PATH_LENGTH_CHAR+1 ); mem_allocated( local_file_path, 34 ); /* Po��czenie �cie�ki z ��dania z pe�n� �cie�k� w systemie*/ if( len_loc > 1 ) { /* Stworzenie lokalnej �cie�ki dost�pu do zasobu */ strncpy( local_file_path, app_path, MAX_PATH_LENGTH ); strncat( local_file_path, http_session->http_info.http_local_path, MAX_PATH_LENGTH ); } else { /* Jeste�my w g��wnym katalogu */ strncpy( local_file_path, app_path, MAX_PATH_LENGTH ); } /* Zamiana znaku "/" z request na "\" - tylko Win32*/ strrepchar( local_file_path, '/', C_SLASH ); /* Usuni�cie podw�jnych znak�w slash */ strdelbslash( local_file_path ); /* Je�eli podano sam� nazw� katalogu to automatycznie dodajemy plik indeksu - tu juz po weryfikacji, czy zasob jest skryptem CGI */ if( strncmp( file_get_name( local_file_path ), "", 1 ) == 0 ) { strncat( local_file_path, REQUEST_get_index( local_file_path ), MAX_PATH_LENGTH ); } if( ht_access_count > 0 ) { /* Alokacja pami�ci */ ht_access_pwd = malloc( STD_BUFF_SIZE_CHAR ); mem_allocated( ht_access_pwd, 35 ); } /*Sprawdzamy, czy ��dany plik istnieje... */ file_params_val = file_params( http_session, local_file_path, (ht_access_count > 0 ? ht_access_pwd : NULL ) ); if( file_params_val == 0 ) { /* Plik nie istnieje */ file_ext = malloc( MICRO_BUFF_SIZE_CHAR ); strncpy( file_ext, file_get_ext( local_file_path ), MICRO_BUFF_SIZE ); /*...brak rozszerzenia = nie podano konkretnego pliku w URL... */ if( strncmp( file_ext, "", MICRO_BUFF_SIZE ) == 0 ) { /*...sprawdzamy, czy ostatni znak to "/"... */ if( local_file_path[ strlen( local_file_path )-1 ] != C_SLASH ) { /*...mimo wszystko sprawdzamy, czy �cie�ka jest prawid�owa. Tak = b��d 302. Nie = b��d 400. */ if( directory_exists( local_file_path ) ) { /* Stworzenie dodatkowej informacji do nag��wna wysy�anego przez RESPONSE_error z prawid�ow� �cie�k� */ add_hdr = malloc( MAX_PATH_LENGTH_CHAR ); sprintf( add_hdr, "%s%s/\r\n", HEADER_LOCATION, http_session->http_info.http_local_path ); RESPONSE_error( http_session, HTTP_302_FOUND, HTTP_ERR_302_MSG, add_hdr ); free( add_hdr ); add_hdr = NULL; } else { RESPONSE_error( http_session, HTTP_400_BAD_REQUEST, HTTP_ERR_400_MSG, NULL ); } } else { /*...plik nie istnieje, a index.html brak... */ RESPONSE_error( http_session, HTTP_404_NOT_FOUND, HTTP_ERR_404_MSG, NULL ); } } else { RESPONSE_error( http_session, HTTP_404_NOT_FOUND, HTTP_ERR_404_MSG, NULL ); } /* Zwolnienie pami�ci dla rozszerzenia ��danego pliku */ free( file_ext ); file_ext = NULL; } else { /* Plik istnieje, ale jakie ma w�a�ciwo�ci ? */ if( file_params_val == 1 ) { /* Plik istnieje i jest do odczytu */ /* Je�eli jest to skrypt CGI, to zostaje wykonany */ /* Zwyk�e ��danie zasobu */ /*Zapytanie zweryfikowane - wysy�ka zawarto�ci zasobu */ if( http_session->http_info.method_name != POST ) { RESPONSE_file( http_session, local_file_path ); /* Zapytanie HEAD jest weryfikowane w funkcji RESPONSE_header */ } } else if( file_params_val == 2 ) {/* Plik istnieje, ale dost�p jest zabroniony */ RESPONSE_error( http_session, HTTP_403_FORBIDDEN, HTTP_ERR_403_MSG, NULL ); } else if( file_params_val == 3 ) {/* Plik istnieje, ale wymaga autoryzacji */ if( http_session->http_info.authorization ) { if( strncmp( ht_access_pwd, http_session->http_info.authorization, STD_BUFF_SIZE ) == 0 ) { /* Zwyk�e ��danie zasobu */ /*Zapytanie zweryfikowane - wysy�ka zawarto�ci zasobu */ if( http_session->http_info.method_name != POST ) { RESPONSE_file( http_session, local_file_path ); /* Zapytanie HEAD jest weryfikowane w funkcji RESPONSE_header */ } else { RESPONSE_error( http_session, HTTP_401_AUTHORIZATION_REQUIRED, HTTP_ERR_401_MSG, HEADER_AUTHENTICATION ); } } else { RESPONSE_error( http_session, HTTP_401_AUTHORIZATION_REQUIRED, HTTP_ERR_401_MSG, HEADER_AUTHENTICATION ); } } else { RESPONSE_error( http_session, HTTP_401_AUTHORIZATION_REQUIRED, HTTP_ERR_401_MSG, HEADER_AUTHENTICATION ); } } } if( ht_access_count > 0) { /* Zwolnienie pami�ci dla has�a zasobu */ if( ht_access_pwd ) { free( ht_access_pwd ); ht_access_pwd = NULL; } } /* Zwolnienie pami�ci dla nazwy ��danego pliku */ free( local_file_path ); local_file_path = NULL; /* Zwalniamy pami�� */ SESSION_release( http_session ); }