Forgot to add the server dir.
git-svn-id: file:///home/mbr/svn/fwknop/trunk@128 510a4753-2344-4c79-9c09-4d669213fbeb
This commit is contained in:
parent
53b7fae8bb
commit
5b3f6f07da
7
server/Makefile.am
Normal file
7
server/Makefile.am
Normal file
@ -0,0 +1,7 @@
|
||||
sbin_PROGRAMS = fwknopd
|
||||
|
||||
fwknopd_SOURCES = fwknopd.c fwknopd.h config_init.c config_init.h \
|
||||
fwknopd_common.h utils.c utils.h
|
||||
|
||||
fwknopd_LDADD = $(top_builddir)/lib/libfko.la
|
||||
fwknopd_CPPFLAGS = -I $(top_srcdir)/lib -I $(top_srcdir)/common
|
||||
221
server/config_init.c
Normal file
221
server/config_init.c
Normal file
@ -0,0 +1,221 @@
|
||||
/*
|
||||
******************************************************************************
|
||||
*
|
||||
* File: config_init.c
|
||||
*
|
||||
* Author: Damien Stuart
|
||||
*
|
||||
* Purpose: Command-line and config file processing for fwknop server.
|
||||
*
|
||||
* Copyright (C) 2009 Damien Stuart (dstuart@dstuart.org)
|
||||
*
|
||||
* License (GNU Public License):
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
#include "fwknopd_common.h"
|
||||
#include "config_init.h"
|
||||
#include "getopt.h"
|
||||
#include "utils.h"
|
||||
#include "ctype.h"
|
||||
|
||||
/* Routine to extract the configuration value from a line in the config
|
||||
* file.
|
||||
*/
|
||||
int
|
||||
get_char_val(const char *var_name, char *dest, char *lptr)
|
||||
{
|
||||
int i, var_char_ctr = 0;
|
||||
char *tmp_ptr;
|
||||
|
||||
tmp_ptr = lptr;
|
||||
|
||||
/* var_name is guaranteed to be NULL-terminated.
|
||||
*/
|
||||
for (i=0; i < (int)strlen(var_name); i++)
|
||||
if (tmp_ptr[i] != var_name[i])
|
||||
return 0;
|
||||
|
||||
tmp_ptr += i;
|
||||
|
||||
/* First char after varName better be a space or tab or '='.
|
||||
*/
|
||||
if (*tmp_ptr != ' ' && *tmp_ptr != '\t' && *tmp_ptr != '=')
|
||||
return 0;
|
||||
|
||||
/* Walk past the delimiter.
|
||||
*/
|
||||
while (*tmp_ptr == ' ' || *tmp_ptr == '\t' || *tmp_ptr == '=')
|
||||
tmp_ptr++;
|
||||
|
||||
while (var_char_ctr < MAX_LINE_LEN && tmp_ptr[var_char_ctr] != '\n'
|
||||
&& tmp_ptr[var_char_ctr] != '\0')
|
||||
var_char_ctr++;
|
||||
|
||||
if (tmp_ptr[var_char_ctr] != '\n' || var_char_ctr >= MAX_LINE_LEN)
|
||||
return 0;
|
||||
|
||||
strncpy(dest, tmp_ptr, var_char_ctr);
|
||||
|
||||
dest[var_char_ctr] = '\0';
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Parse the config file...
|
||||
static void
|
||||
parse_config_file(fko_svr_options_t *options, opts_track_t *ot)
|
||||
{
|
||||
FILE *cfile_ptr;
|
||||
unsigned int numLines = 0;
|
||||
|
||||
char conf_line_buf[MAX_LINE_LEN] = {0};
|
||||
char tmp_char_buf[MAX_LINE_LEN] = {0};
|
||||
char *lptr;
|
||||
|
||||
struct stat st;
|
||||
|
||||
* First see if the config file exists. If it doesn't, and was
|
||||
* specified via command-line, then error out. Otherwise, complain
|
||||
* and go on with program defaults.
|
||||
*
|
||||
if(stat(options->config_file, &st) != 0)
|
||||
{
|
||||
if(ot->got_config_file)
|
||||
{
|
||||
fprintf(stderr, "[*] Could not open config file: %s\n",
|
||||
options->config_file);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
fprintf(stderr,
|
||||
"** Config file was not found. Attempting to continue with defaults...\n"
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ((cfile_ptr = fopen(options->config_file, "r")) == NULL)
|
||||
{
|
||||
fprintf(stderr, "[*] Could not open config file: %s\n",
|
||||
options->config_file);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
while ((fgets(conf_line_buf, MAX_LINE_LEN, cfile_ptr)) != NULL)
|
||||
{
|
||||
numLines++;
|
||||
conf_line_buf[MAX_LINE_LEN-1] = '\0';
|
||||
lptr = conf_line_buf;
|
||||
|
||||
memset(tmp_char_buf, 0x0, MAX_LINE_LEN);
|
||||
|
||||
while (*lptr == ' ' || *lptr == '\t' || *lptr == '=')
|
||||
lptr++;
|
||||
|
||||
* Get past comments and empty lines.
|
||||
*
|
||||
if (*lptr == '#' || *lptr == '\n' || *lptr == '\r' || *lptr == '\0' || *lptr == ';')
|
||||
continue;
|
||||
}
|
||||
|
||||
fclose(cfile_ptr);
|
||||
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
||||
/* Sanity and bounds checks for the various options.
|
||||
*/
|
||||
static void
|
||||
validate_options(fko_srv_options_t *options)
|
||||
{
|
||||
/*** TODO: put stuff here ***/
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* Initialize program configuration via config file and/or command-line
|
||||
* switches.
|
||||
*/
|
||||
void
|
||||
config_init(fko_srv_options_t *options, int argc, char **argv)
|
||||
{
|
||||
int cmd_arg, index;
|
||||
struct opts_track ot;
|
||||
|
||||
/* Zero out options and opts_track.
|
||||
*/
|
||||
memset(options, 0x00, sizeof(fko_srv_options_t));
|
||||
memset(&ot, 0x00, sizeof(ot));
|
||||
|
||||
/* Establish a few defaults such as UDP/62201 for sending the SPA
|
||||
* packet (can be changed with --server-proto/--server-port)
|
||||
*/
|
||||
|
||||
while ((cmd_arg = getopt_long(argc, argv,
|
||||
"hvV", cmd_opts, &index)) != -1) {
|
||||
|
||||
switch(cmd_arg) {
|
||||
case 'h':
|
||||
usage();
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
case 'v':
|
||||
options->verbose = 1;
|
||||
break;
|
||||
case 'V':
|
||||
options->version = 1;
|
||||
break;
|
||||
case GPG_HOME_DIR:
|
||||
strlcpy(options->gpg_home_dir, optarg, MAX_PATH_LEN);
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
/* Parse configuration file to populate any params not already specified
|
||||
* via command-line options
|
||||
*/
|
||||
//--DSS XXX: We will use this when we have a config file to use.
|
||||
//parse_config_file(options, &ot);
|
||||
|
||||
/* Now that we have all of our options set, we can validate them.
|
||||
*/
|
||||
validate_options(options);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* Print usage message...
|
||||
*/
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprintf(stderr, "\n%s server version %s\n%s\n\n", MY_NAME, MY_VERSION, MY_DESC);
|
||||
fprintf(stderr,
|
||||
"Usage: fwknopd [options]\n\n"
|
||||
" -h, --help - Print this usage message and exit.\n"
|
||||
" -c, --config-file - Specify an alternate configuration file.\n"
|
||||
" -v, --verbose - Set verbose mode.\n"
|
||||
" -V, --version - Print version number.\n"
|
||||
" --gpg-home-dir - Specify the GPG home directory.\n"
|
||||
"\n"
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/***EOF***/
|
||||
64
server/config_init.h
Normal file
64
server/config_init.h
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
******************************************************************************
|
||||
*
|
||||
* File: fwknop.h
|
||||
*
|
||||
* Author: Damien Stuart
|
||||
*
|
||||
* Purpose: Header file for fwknopd config_init.
|
||||
*
|
||||
* Copyright (C) 2009 Damien Stuart (dstuart@dstuart.org)
|
||||
*
|
||||
* License (GNU Public License):
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
#ifndef CONFIG_INIT_H
|
||||
#define CONFIG_INIT_H
|
||||
|
||||
#include <getopt.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
/* Long options values (for those without a short option).
|
||||
*/
|
||||
enum {
|
||||
GPG_HOME_DIR = 0x200,
|
||||
NOOP /* Just to be a marker for the end */
|
||||
};
|
||||
|
||||
/* Our program command-line options...
|
||||
*/
|
||||
static struct option cmd_opts[] =
|
||||
{
|
||||
{"gpg-home-dir", 1, NULL, GPG_HOME_DIR },
|
||||
{"help", 0, NULL, 'h'},
|
||||
{"verbose", 0, NULL, 'v'},
|
||||
{"version", 0, NULL, 'V'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
/* Track config options set via command-line.
|
||||
* --DSS: XXX: These will need to be reviewed...
|
||||
*/
|
||||
typedef struct opts_track {
|
||||
unsigned int got_server_port:1;
|
||||
} opts_track_t;
|
||||
|
||||
/* Function Prototypes
|
||||
*/
|
||||
void config_init(fko_srv_options_t *options, int argc, char **argv);
|
||||
void usage(void);
|
||||
|
||||
#endif /* CONFIG_INIT_H */
|
||||
|
||||
/***EOF***/
|
||||
122
server/fwknopd.c
Normal file
122
server/fwknopd.c
Normal file
@ -0,0 +1,122 @@
|
||||
/* $Id$
|
||||
*****************************************************************************
|
||||
*
|
||||
* File: fwknopd.c
|
||||
*
|
||||
* Author: Damien S. Stuart
|
||||
*
|
||||
* Purpose: An implementation of an fwknop server.
|
||||
*
|
||||
* Copyright (C) 2009 Damien Stuart (dstuart@dstuart.org)
|
||||
*
|
||||
* License (GNU Public License):
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA
|
||||
*
|
||||
*****************************************************************************
|
||||
*/
|
||||
#include "fwknopd.h"
|
||||
#include "config_init.h"
|
||||
#include "utils.h"
|
||||
|
||||
/* prototypes
|
||||
*/
|
||||
static void display_ctx(fko_ctx_t ctx);
|
||||
void errmsg(char *msg, int err);
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
fko_ctx_t ctx;
|
||||
int res;
|
||||
char *spa_data, *version;
|
||||
char access_buf[MAX_LINE_LEN];
|
||||
|
||||
fko_srv_options_t options;
|
||||
|
||||
/* Handle command line
|
||||
*/
|
||||
config_init(&options, argc, argv);
|
||||
|
||||
/* Display version info and exit.
|
||||
*/
|
||||
if (options.version) {
|
||||
fko_get_version(ctx, &version);
|
||||
|
||||
fprintf(stdout, "[+] fwknopd server %s\n", MY_VERSION);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* Display an FKO error message.
|
||||
*/
|
||||
void
|
||||
errmsg(char *msg, int err) {
|
||||
fprintf(stderr, "[*] %s: %s: Error %i - %s\n",
|
||||
MY_NAME, msg, err, fko_errstr(err));
|
||||
}
|
||||
|
||||
/* Show the fields of the FKO context.
|
||||
*/
|
||||
static void
|
||||
display_ctx(fko_ctx_t ctx)
|
||||
{
|
||||
char *rand_val = NULL;
|
||||
char *username = NULL;
|
||||
char *version = NULL;
|
||||
char *spa_message = NULL;
|
||||
char *nat_access = NULL;
|
||||
char *server_auth = NULL;
|
||||
char *enc_data = NULL;
|
||||
char *spa_digest = NULL;
|
||||
char *spa_data = NULL;
|
||||
|
||||
time_t timestamp = 0;
|
||||
short msg_type = -1;
|
||||
short digest_type = -1;
|
||||
int client_timeout = -1;
|
||||
|
||||
/* Should be checking return values, but this is temp code. --DSS
|
||||
*/
|
||||
fko_get_rand_value(ctx, &rand_val);
|
||||
fko_get_username(ctx, &username);
|
||||
fko_get_timestamp(ctx, ×tamp);
|
||||
fko_get_version(ctx, &version);
|
||||
fko_get_spa_message_type(ctx, &msg_type);
|
||||
fko_get_spa_message(ctx, &spa_message);
|
||||
fko_get_spa_nat_access(ctx, &nat_access);
|
||||
fko_get_spa_server_auth(ctx, &server_auth);
|
||||
fko_get_spa_client_timeout(ctx, &client_timeout);
|
||||
fko_get_spa_digest_type(ctx, &digest_type);
|
||||
fko_get_encoded_data(ctx, &enc_data);
|
||||
fko_get_spa_digest(ctx, &spa_digest);
|
||||
fko_get_spa_data(ctx, &spa_data);
|
||||
|
||||
printf("\nFKO Field Values:\n=================\n\n");
|
||||
printf(" Random Value: %s\n", rand_val == NULL ? "<NULL>" : rand_val);
|
||||
printf(" Username: %s\n", username == NULL ? "<NULL>" : username);
|
||||
printf(" Timestamp: %u\n", (unsigned int) timestamp);
|
||||
printf(" FKO Version: %s\n", version == NULL ? "<NULL>" : version);
|
||||
printf(" Message Type: %i\n", msg_type);
|
||||
printf(" Message String: %s\n", spa_message == NULL ? "<NULL>" : spa_message);
|
||||
printf(" Nat Access: %s\n", nat_access == NULL ? "<NULL>" : nat_access);
|
||||
printf(" Server Auth: %s\n", server_auth == NULL ? "<NULL>" : server_auth);
|
||||
printf(" Client Timeout: %u\n", client_timeout);
|
||||
printf(" Digest Type: %u\n", digest_type);
|
||||
printf("\n Encoded Data: %s\n", enc_data == NULL ? "<NULL>" : enc_data);
|
||||
printf("\nSPA Data Digest: %s\n", spa_digest == NULL ? "<NULL>" : spa_digest);
|
||||
printf("\nFinal Packed/Encrypted/Encoded Data:\n\n%s\n\n", spa_data);
|
||||
}
|
||||
|
||||
/***EOF***/
|
||||
37
server/fwknopd.h
Normal file
37
server/fwknopd.h
Normal file
@ -0,0 +1,37 @@
|
||||
/* $Id: fwknop.h 95 2009-06-07 16:55:22Z dstuart $
|
||||
*****************************************************************************
|
||||
*
|
||||
* File: fwknopd.h
|
||||
*
|
||||
* Author: Damien S. Stuart (dstuart@dstuart.org)
|
||||
* Michael Rash (mbr@cipherdyne.org)
|
||||
*
|
||||
* Purpose: Header file for fwknopd server program.
|
||||
*
|
||||
* Copyright (C) 2009 Damien Stuart (dstuart@dstuart.org)
|
||||
*
|
||||
* License (GNU Public License):
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA
|
||||
*
|
||||
*****************************************************************************
|
||||
*/
|
||||
#ifndef FWKNOPD_H
|
||||
#define FWKNOPD_H
|
||||
|
||||
#include "fwknopd_common.h"
|
||||
|
||||
/* Used by the get_user_pw function.
|
||||
*/
|
||||
#define CRYPT_OP_ENCRYPT 1
|
||||
#define CRYPT_OP_DECRYPT 2
|
||||
|
||||
#endif /* FWKNOPD_H */
|
||||
65
server/fwknopd_common.h
Normal file
65
server/fwknopd_common.h
Normal file
@ -0,0 +1,65 @@
|
||||
/*
|
||||
******************************************************************************
|
||||
*
|
||||
* File: fwknopd_common.h
|
||||
*
|
||||
* Author: Damien Stuart
|
||||
*
|
||||
* Purpose: Header file for fwknopd source files.
|
||||
*
|
||||
* Copyright (C) 2009 Damien Stuart (dstuart@dstuart.org)
|
||||
*
|
||||
* License (GNU Public License):
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
#ifndef FWKNOPD_COMMON_H
|
||||
#define FWKNOPD_COMMON_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
/* My Name and Version
|
||||
*/
|
||||
#define MY_NAME "fwknopd"
|
||||
#define MY_DESC "Single Packet Authorization server"
|
||||
|
||||
/* Get our program version from VERSION (defined in config.h).
|
||||
*/
|
||||
#define MY_VERSION VERSION
|
||||
|
||||
/* Default config path, can override with -c
|
||||
*/
|
||||
#define DEF_CONFIG_FILE MY_NAME".conf"
|
||||
|
||||
/* fwknopd server configuration parameters and values
|
||||
*/
|
||||
typedef struct fko_srv_options
|
||||
{
|
||||
char config_file[MAX_PATH_LEN];
|
||||
char gpg_home_dir[MAX_PATH_LEN];
|
||||
|
||||
/* Various command-line flags */
|
||||
unsigned char verbose; /* --verbose mode */
|
||||
unsigned char version; /* --version */
|
||||
unsigned char test;
|
||||
int fw_timeout;
|
||||
|
||||
//char config_file[MAX_PATH_LEN];
|
||||
|
||||
} fko_srv_options_t;
|
||||
|
||||
extern fko_srv_options_t options;
|
||||
|
||||
#endif /* FWKNOPD_COMMON_H */
|
||||
|
||||
/***EOF***/
|
||||
68
server/utils.c
Normal file
68
server/utils.c
Normal file
@ -0,0 +1,68 @@
|
||||
/* $Id: utils.c 63 2009-02-12 05:05:40Z mbr $
|
||||
*****************************************************************************
|
||||
*
|
||||
* File: utils.c
|
||||
*
|
||||
* Author: Damien S. Stuart
|
||||
*
|
||||
* Purpose: General/Generic functions for the fwknop server.
|
||||
*
|
||||
* Copyright (C) 2009 Damien Stuart (dstuart@dstuart.org)
|
||||
*
|
||||
* License (GNU Public License):
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA
|
||||
*
|
||||
*****************************************************************************
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "utils.h"
|
||||
|
||||
/* Generic hex dump function.
|
||||
*/
|
||||
void
|
||||
hex_dump(unsigned char *data, int size)
|
||||
{
|
||||
int ln, i, j = 0;
|
||||
char ascii_str[17] = {0};
|
||||
|
||||
for(i=0; i<size; i++)
|
||||
{
|
||||
if((i % 16) == 0)
|
||||
{
|
||||
printf(" %s\n 0x%.4x: ", ascii_str, i);
|
||||
memset(ascii_str, 0x0, 17);
|
||||
j = 0;
|
||||
}
|
||||
|
||||
printf("%.2x ", data[i]);
|
||||
|
||||
ascii_str[j++] = (data[i] < 0x20 || data[i] > 0x7e) ? '.' : data[i];
|
||||
|
||||
if(j == 8)
|
||||
printf(" ");
|
||||
}
|
||||
|
||||
/* Remainder...
|
||||
*/
|
||||
ln = strlen(ascii_str);
|
||||
if(ln > 0)
|
||||
{
|
||||
for(i=0; i < 16-ln; i++)
|
||||
printf(" ");
|
||||
|
||||
printf(" %s\n\n", ascii_str);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***EOF***/
|
||||
42
server/utils.h
Normal file
42
server/utils.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
*****************************************************************************
|
||||
*
|
||||
* File: utils.h
|
||||
*
|
||||
* Author: Damien Stuart (dstuart@dstuart.org)
|
||||
*
|
||||
* Purpose: Header file for utils.c fwknopd server program.
|
||||
*
|
||||
* Copyright (C) 2009 Damien Stuart (dstuart@dstuart.org)
|
||||
*
|
||||
* License (GNU Public License):
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA
|
||||
*
|
||||
*****************************************************************************
|
||||
*/
|
||||
#ifndef UTILS_H
|
||||
#define UTILS_H
|
||||
|
||||
|
||||
/* Prototypes
|
||||
*/
|
||||
void hex_dump(unsigned char *data, int size);
|
||||
|
||||
|
||||
#ifdef WIN32
|
||||
/* Function prototypes we need for Windows
|
||||
*/
|
||||
size_t strlcat(char *dst, const char *src, size_t siz);
|
||||
size_t strlcpy(char *dst, const char *src, size_t siz);
|
||||
#endif
|
||||
|
||||
#endif /* UTILS_H */
|
||||
Loading…
x
Reference in New Issue
Block a user