diff options
Diffstat (limited to 'src/ftphelper.c')
-rw-r--r-- | src/ftphelper.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/ftphelper.c b/src/ftphelper.c new file mode 100644 index 0000000..ffa289c --- /dev/null +++ b/src/ftphelper.c @@ -0,0 +1,104 @@ +/* + * ftphelper + * + * Copyright (C) 2012 Jonathan McCrohan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * 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, see <http://www.gnu.org/licenses/>. + */ + +// gcc ftphelper.c -o ftphelper `pkg-config --libs --cflags libconfig` +#include <stdio.h> +#include <sys/ioctl.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <net/if.h> +#include <string.h> +#include <libconfig.h> + +char *mac_address() { + int s; + struct ifreq ifr; + + s = socket(PF_INET, SOCK_DGRAM, 0); + memset(&ifr, 0x00, sizeof(ifr)); + strcpy(ifr.ifr_name, "eth0"); + ioctl(s, SIOCGIFHWADDR, &ifr); + close(s); + + static char mac_address[12]; + sprintf(mac_address, "%.2X%.2X%.2X%.2X%.2X%.2X", + (unsigned char) ifr.ifr_hwaddr.sa_data[0], + (unsigned char) ifr.ifr_hwaddr.sa_data[1], + (unsigned char) ifr.ifr_hwaddr.sa_data[2], + (unsigned char) ifr.ifr_hwaddr.sa_data[3], + (unsigned char) ifr.ifr_hwaddr.sa_data[4], + (unsigned char) ifr.ifr_hwaddr.sa_data[5]); + + return mac_address; +} + +int main(int argc, char *argv[]) { + + if (argc == 1) { + return 0; + } + + if (strcmp(argv[1], "--mac") == 0) { + printf("%s", mac_address()); + return 0; + } + + const char *configfile = "/etc/modbuslog.cfg"; + config_t cfg; + const char *ftp_server; + const char *ftp_username; + const char *ftp_password; + const char *ftp_directory; + + config_init(&cfg); + + if (!config_read_file(&cfg, configfile)) { + fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg), + config_error_line(&cfg), config_error_text(&cfg)); + config_destroy(&cfg); + fprintf(stderr, "Unable to find configfile.\n"); + return 1; + } + + if (!(config_lookup_string(&cfg, "ftp.server", &ftp_server) + && config_lookup_string(&cfg, "ftp.username", &ftp_username) + && config_lookup_string(&cfg, "ftp.password", &ftp_password) + && config_lookup_string(&cfg, "ftp.directory", &ftp_directory))) { + fprintf(stderr, + "Incomplete ftp configuration. Check configuration file.\n"); + return 1; + } + + if (strcmp(argv[1], "--server") == 0) { + printf("%s", ftp_server); + return 0; + } + if (strcmp(argv[1], "--username") == 0) { + printf("%s", ftp_username); + return 0; + } + if (strcmp(argv[1], "--password") == 0) { + printf("%s", ftp_password); + return 0; + } + if (strcmp(argv[1], "--directory") == 0) { + printf("%s", ftp_directory); + return 0; + } +} |