From 926f4d9125fa76d54e9abeba372ee78e9545182b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 11 Sep 1997 02:17:16 +0000 Subject: cgi.c is a simple set of CGI manipulation routines wsmbconf.c is a rudimentary web based smb.conf editor. Its really there just to demonstrate how such an editor can hook into loadparm.c, I don't expect anyone to actually use it as is. wsmbstatus.c is a simple web based smbstatus. Its probably broken. (This used to be commit ced5205f72ba58d677f3cfa480fddc58ec9faa27) --- source3/wsmbconf.c | 251 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 source3/wsmbconf.c (limited to 'source3/wsmbconf.c') diff --git a/source3/wsmbconf.c b/source3/wsmbconf.c new file mode 100644 index 0000000000..25b3deaa29 --- /dev/null +++ b/source3/wsmbconf.c @@ -0,0 +1,251 @@ +/* + Unix SMB/Netbios implementation. + Version 1.9. + html smb.conf editing - prototype only + Copyright (C) Andrew Tridgell 1997 + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifdef SYSLOG +#undef SYSLOG +#endif + +#include "includes.h" +#include "smb.h" + +#define SDEFAULTS "Service defaults" +#define SGLOBAL "Global Parameters" +#define GLOBALS_SNUM -2 +#define DEFAULTS_SNUM -1 + + +/* start the page with standard stuff */ +static void print_header(void) +{ + printf("Content-type: text/html\n\n"); + printf("\n"); + printf("\n\nsmb.conf\n\n\n\n"); +} + + +/* finish off the page */ +static void print_footer(void) +{ + printf("\n\n\n"); +} + +/* setup persisant variables */ +static void set_persistent(char *name) +{ + char *p; + p = cgi_variable(name); + if (!p) return; + printf("\n", name, p); +} + +/* display a servce, ready for editing */ +static void show_service(int snum, int allparameters) +{ + int i = 0; + pstring label, value; + char *sname; + + if (snum == GLOBALS_SNUM) + sname = SGLOBAL; + else if (snum == DEFAULTS_SNUM) + sname = SDEFAULTS; + else sname = lp_servicename(snum); + + printf("\n

\n\n\n\n
\n\n"); + printf("
\n"); + printf("

%s

\n", sname); + printf("\n", sname); + printf("\n"); + printf("\n"); + printf("\n"); + printf("\n"); + printf("

\n"); + printf("\n"); + printf("
\n
\n"); + + printf("

\n"); +} + + +/* loop over all services, displaying them one after the other */ +static void show_services(void) +{ + int i; + int n; + int allparameters = cgi_boolean("allparameters", 0); + + printf("

\n"); + printf("

Show all parameters?\n"); + printf("\n", + allparameters?"CHECKED":""); + + printf("\n"); + + printf("

\n"); + + n = lp_numservices(); + + show_service(GLOBALS_SNUM, allparameters); + show_service(DEFAULTS_SNUM, allparameters); + + for (i=0;iCan't load %s - using defaults

\n", + servicesf); + } + return 1; +} + + +static int save_reload(void) +{ + static pstring servicesf = CONFIGFILE; + char *p; + FILE *f; + + p = strrchr(servicesf,'/'); + if (!p) return 0; + + f = fopen(p,"w"); + if (!f) { + printf("failed to open %s for writing\n", servicesf); + return 0; + } + + fprintf(f, "# Samba config file created using wsmbconf\n"); + + lp_dump(f); + + fclose(f); + + lp_killunused(NULL); + + if (!lp_load(p,False)) { + printf("Can't reload %s\n", servicesf); + return 0; + } + + return 1; +} + +static void process_requests(void) +{ + char *req = cgi_variable("request"); + char *newvalue = cgi_variable("newvalue"); + char *parameter = cgi_variable("parameter"); + char *service = cgi_variable("service"); + int snum=0; + + if (!req) return; + + if (service) { + /* work out what service it is */ + if (strcmp(service,SGLOBAL) == 0) { + snum = GLOBALS_SNUM; + } else if (strcmp(service,SDEFAULTS) == 0) { + snum = DEFAULTS_SNUM; + } else { + snum = lp_servicenumber(service); + if (snum < 0) return; + } + } + + if (!newvalue) + newvalue = ""; + + if (strcmp(req,"Change") == 0) { + /* change the value of a parameter */ + if (!parameter || !service) return; + + lp_do_parameter(snum, parameter, newvalue); + } else if (strcmp(req,"Rename") == 0) { + /* rename a service */ + if (!newvalue || !service) return; + + lp_rename_service(snum, newvalue); + } else if (strcmp(req,"Remove") == 0) { + /* remove a service */ + if (!service) return; + + lp_remove_service(snum); + } else if (strcmp(req,"Copy") == 0) { + /* copy a service */ + if (!service || !newvalue) return; + + lp_copy_service(snum, newvalue); + } + + save_reload(); +} + + +int main(int argc, char *argv[]) +{ + extern FILE *dbf; + + print_header(); + + dbf = stderr; + + charset_initialise(); + + if (load_config()) { + cgi_load_variables(); + process_requests(); + show_services(); + } + print_footer(); + return 0; +} -- cgit