Merge branch 'master' of git://github.com/ALSchwalm/fiche into ALSchwalm-master

This commit is contained in:
solusipse
2015-09-23 18:27:18 +02:00

26
fiche.c
View File

@@ -29,12 +29,11 @@ $ cat fiche.c | nc localhost 9999
*/ */
#include <sys/param.h> #include <sys/param.h>
#include <stdio.h>
#include "fiche.h" #include "fiche.h"
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
time_seed = time(0);
parse_parameters(argc, argv); parse_parameters(argc, argv);
if (getuid() == 0) if (getuid() == 0)
@@ -284,7 +283,7 @@ struct sockaddr_in set_address(struct sockaddr_in server_address)
void bind_to_port(int listen_socket, struct sockaddr_in server_address) void bind_to_port(int listen_socket, struct sockaddr_in server_address)
{ {
if (bind(listen_socket, (struct sockaddr *) &server_address, sizeof(server_address)) < 0) if (bind(listen_socket, (struct sockaddr *) &server_address, sizeof(server_address)) < 0)
error("ERROR while binding to port"); error("ERROR while binding to port");
if (listen(listen_socket, QUEUE_SIZE) < 0) if (listen(listen_socket, QUEUE_SIZE) < 0)
error("ERROR while starting listening"); error("ERROR while starting listening");
@@ -294,28 +293,37 @@ void generate_url(char *buffer, char *slug, size_t slug_length, struct client_da
{ {
int i; int i;
memset(slug, '\0', slug_length); 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++) for (i = 0; i <= SLUG_SIZE - 1; i++)
{ {
#if defined(BSD) #if defined(BSD)
int symbol_id = arc4random() % strlen(symbols); symbol_id = arc4random();
#else #else
int symbol_id = rand_r(&time_seed) % strlen(symbols); fread(&symbol_id, sizeof(symbol_id), 1, frandom);
#endif #endif
slug[i] = symbols[symbol_id]; slug[i] = symbols[symbol_id % strlen(symbols)];
} }
while (create_directory(slug) == -1) while (create_directory(slug) == -1)
{ {
#if defined(BSD) #if defined(BSD)
int symbol_id = arc4random() % strlen(symbols); symbol_id = arc4random();
#else #else
int symbol_id = rand_r(&time_seed) % strlen(symbols); fread(&symbol_id, sizeof(symbol_id), 1, frandom);
#endif #endif
slug[strlen(slug)] = symbols[symbol_id]; slug[strlen(slug)] = symbols[symbol_id % strlen(symbols)];
} }
save_to_file(slug, buffer, data); save_to_file(slug, buffer, data);
#if !defined(BSD)
fclose(frandom);
#endif
} }
int create_directory(char *slug) int create_directory(char *slug)