Make file paths unpredictable

This commit is contained in:
Adam Schwalm
2015-09-02 18:16:23 -05:00
parent a0bbd2fa28
commit b6d1c91f71

24
fiche.c
View File

@@ -27,12 +27,11 @@ $ cat fiche.c | nc localhost 9999
*/
#include <sys/param.h>
#include <stdio.h>
#include "fiche.h"
int main(int argc, char **argv)
{
time_seed = time(0);
parse_parameters(argc, argv);
if (BASEDIR == NULL)
set_basedir();
@@ -271,28 +270,37 @@ void generate_url(char *buffer, char *slug, size_t slug_length, struct client_da
{
int i;
memset(slug, '\0', slug_length);
#if !defined(BSD)
FILE* frandom = fopen("/dev/urandom", "r");
#endif
int symbol_id;
for (i = 0; i <= SLUG_SIZE - 1; i++)
{
#if defined(BSD)
int symbol_id = arc4random() % strlen(symbols);
symbol_id = arc4random();
#else
int symbol_id = rand_r(&time_seed) % strlen(symbols);
fread(&symbol_id, sizeof(symbol_id), 1, frandom);
#endif
slug[i] = symbols[symbol_id];
slug[i] = symbols[symbol_id % strlen(symbols)];
}
while (create_directory(slug) == -1)
{
#if defined(BSD)
int symbol_id = arc4random() % strlen(symbols);
symbol_id = arc4random();
#else
int symbol_id = rand_r(&time_seed) % strlen(symbols);
fread(&symbol_id, sizeof(symbol_id), 1, frandom);
#endif
slug[strlen(slug)] = symbols[symbol_id];
slug[strlen(slug)] = symbols[symbol_id % strlen(symbols)];
}
save_to_file(slug, buffer, data);
#if !defined(BSD)
fclose(frandom);
#endif
}
int create_directory(char *slug)