Example #1
0
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 );
}