added feature of changing user
This commit is contained in:
42
fiche.c
42
fiche.c
@@ -10,9 +10,9 @@ Live example: http://code.solusipse.net/
|
|||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
usage: fiche [-bdpqs].
|
usage: fiche [-bdpqs].
|
||||||
[-d domain] [-p port] [-s slug_size]
|
[-d domain] [-p port] [-s slug size]
|
||||||
[-o output directory] [-B buffer_size]
|
[-o output directory] [-B buffer size] [-u user name]
|
||||||
[-l log file] [-q queue_size] [-b banlist]
|
[-l log file] [-b banlist] [-w whitelist]
|
||||||
|
|
||||||
Compile with Makefile or manually with -O2 and -pthread flags.
|
Compile with Makefile or manually with -O2 and -pthread flags.
|
||||||
To install use `make install` command.
|
To install use `make install` command.
|
||||||
@@ -254,6 +254,8 @@ int create_directory(char *slug)
|
|||||||
mkdir(BASEDIR, S_IRWXU | S_IRGRP | S_IROTH | S_IXOTH | S_IXGRP);
|
mkdir(BASEDIR, S_IRWXU | S_IRGRP | S_IROTH | S_IXOTH | S_IXGRP);
|
||||||
int result = mkdir(directory, S_IRWXU | S_IRGRP | S_IROTH | S_IXOTH | S_IXGRP);
|
int result = mkdir(directory, S_IRWXU | S_IRGRP | S_IROTH | S_IXOTH | S_IXGRP);
|
||||||
|
|
||||||
|
change_owner(directory);
|
||||||
|
|
||||||
free(directory);
|
free(directory);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -271,11 +273,29 @@ void save_to_file(char *slug, char *buffer)
|
|||||||
fprintf(fp, "%s", buffer);
|
fprintf(fp, "%s", buffer);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
|
change_owner(directory);
|
||||||
|
|
||||||
printf("Saved to: %s\n", directory);
|
printf("Saved to: %s\n", directory);
|
||||||
display_line();
|
display_line();
|
||||||
free(directory);
|
free(directory);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void change_owner(char *directory)
|
||||||
|
{
|
||||||
|
if ((UID != -1)&&(GID != -1))
|
||||||
|
chown(directory, UID, GID);
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_uid_gid(char *username)
|
||||||
|
{
|
||||||
|
struct passwd *userdata = getpwnam(username);
|
||||||
|
if (userdata == NULL)
|
||||||
|
error();
|
||||||
|
|
||||||
|
UID = userdata->pw_uid;
|
||||||
|
GID = userdata->pw_gid;
|
||||||
|
}
|
||||||
|
|
||||||
void set_basedir()
|
void set_basedir()
|
||||||
{
|
{
|
||||||
BASEDIR = getenv("HOME");
|
BASEDIR = getenv("HOME");
|
||||||
@@ -295,7 +315,7 @@ void parse_parameters(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
while ((c = getopt (argc, argv, "p:b:q:s:d:o:l:B:")) != -1)
|
while ((c = getopt (argc, argv, "p:b:s:d:o:l:B:u:w:")) != -1)
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case 'd':
|
case 'd':
|
||||||
@@ -312,10 +332,6 @@ void parse_parameters(int argc, char **argv)
|
|||||||
BANFILE = optarg;
|
BANFILE = optarg;
|
||||||
load_banlist(BANFILE);
|
load_banlist(BANFILE);
|
||||||
break;
|
break;
|
||||||
case 'q':
|
|
||||||
QUEUE_SIZE = atoi(optarg);
|
|
||||||
printf("Queue size set to: %d.\n", QUEUE_SIZE);
|
|
||||||
break;
|
|
||||||
case 's':
|
case 's':
|
||||||
SLUG_SIZE = atoi(optarg);
|
SLUG_SIZE = atoi(optarg);
|
||||||
printf("Slug size set to: %d.\n", SLUG_SIZE);
|
printf("Slug size set to: %d.\n", SLUG_SIZE);
|
||||||
@@ -329,11 +345,17 @@ void parse_parameters(int argc, char **argv)
|
|||||||
LOG = optarg;
|
LOG = optarg;
|
||||||
printf("Log file: %s\n", LOG);
|
printf("Log file: %s\n", LOG);
|
||||||
break;
|
break;
|
||||||
|
case 'u':
|
||||||
|
set_uid_gid(optarg);
|
||||||
|
break;
|
||||||
|
case 'w':
|
||||||
|
WHITELIST = optarg;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("usage: fiche [-bdpqs].\n");
|
printf("usage: fiche [-bdpqs].\n");
|
||||||
printf(" [-d domain] [-p port] [-s slug_size]\n");
|
printf(" [-d domain] [-p port] [-s slug_size]\n");
|
||||||
printf(" [-o output directory] [-B buffer_size]\n");
|
printf(" [-o output directory] [-B buffer_size] [-u user name]\n");
|
||||||
printf(" [-l log file] [-q queue_size] [-b banlist]\n");
|
printf(" [-l log file] [-b banlist] [-w whitelist]\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
14
fiche.h
14
fiche.h
@@ -10,9 +10,9 @@ Live example: http://code.solusipse.net/
|
|||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
usage: fiche [-bdpqs].
|
usage: fiche [-bdpqs].
|
||||||
[-d domain] [-p port] [-s slug_size]
|
[-d domain] [-p port] [-s slug size]
|
||||||
[-o output directory] [-B buffer_size]
|
[-o output directory] [-B buffer size] [-u user name]
|
||||||
[-l log file] [-q queue_size]
|
[-l log file] [-b banlist] [-w whitelist]
|
||||||
|
|
||||||
Compile with Makefile or manually with -O2 and -pthread flags.
|
Compile with Makefile or manually with -O2 and -pthread flags.
|
||||||
To install use `make install` command.
|
To install use `make install` command.
|
||||||
@@ -27,6 +27,7 @@ $ cat fiche.c | nc localhost 9999
|
|||||||
#ifndef FICHE_H
|
#ifndef FICHE_H
|
||||||
#define FICHE_H
|
#define FICHE_H
|
||||||
|
|
||||||
|
#include <pwd.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -40,14 +41,17 @@ $ cat fiche.c | nc localhost 9999
|
|||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
|
||||||
|
int UID = -1;
|
||||||
|
int GID = -1;
|
||||||
char *LOG;
|
char *LOG;
|
||||||
char *BASEDIR;
|
char *BASEDIR;
|
||||||
char *BANLIST;
|
char *BANLIST;
|
||||||
char *BANFILE;
|
char *BANFILE;
|
||||||
|
char *WHITELIST;
|
||||||
int PORT = 9999;
|
int PORT = 9999;
|
||||||
int SLUG_SIZE = 4;
|
int SLUG_SIZE = 4;
|
||||||
int BUFSIZE = 32768;
|
int BUFSIZE = 32768;
|
||||||
int QUEUE_SIZE = 100;
|
int QUEUE_SIZE = 500;
|
||||||
char DOMAIN[128] = "http://localhost/";
|
char DOMAIN[128] = "http://localhost/";
|
||||||
|
|
||||||
int time_seed;
|
int time_seed;
|
||||||
@@ -68,6 +72,8 @@ void set_basedir();
|
|||||||
void load_banlist();
|
void load_banlist();
|
||||||
void parse_parameters(int argc, char **argv);
|
void parse_parameters(int argc, char **argv);
|
||||||
void save_log(char *slug, char *hostaddrp, char *h_name);
|
void save_log(char *slug, char *hostaddrp, char *h_name);
|
||||||
|
void change_owner(char *directory);
|
||||||
|
void set_uid_gid();
|
||||||
|
|
||||||
char *return_line(){return("\n====================================");}
|
char *return_line(){return("\n====================================");}
|
||||||
char *check_banlist(char *ip_address);
|
char *check_banlist(char *ip_address);
|
||||||
|
|||||||
Reference in New Issue
Block a user