Index: common/xymoncfg.c =================================================================== --- common/xymoncfg.c (revision 7121) +++ common/xymoncfg.c (working copy) @@ -25,6 +25,8 @@ strbuffer_t *inbuf; int argi; char *include2 = NULL; + enum { S_NONE, S_KSH, S_CSH } shelltype = S_NONE; + char *p; for (argi=1; (argi < argc); argi++) { @@ -42,6 +44,12 @@ else if ((strcmp(argv[argi], "--web") == 0) || (strcmp(argv[argi], "--bbdisp") == 0)) { include2 = "dispinclude"; } + else if (strcmp(argv[argi], "-s") == 0) { + shelltype = S_KSH; + } + else if (strcmp(argv[argi], "-c") == 0) { + shelltype = S_CSH; + } else if (*argv[argi] != '-') { fn = strdup(argv[argi]); } @@ -63,7 +71,33 @@ inbuf = newstrbuffer(0); while (stackfgets(inbuf, include2)) { - printf("%s", STRBUF(inbuf)); + switch (shelltype) { + case S_NONE: + printf("%s", STRBUF(inbuf)); + break; + case S_KSH: + sanitize_input(inbuf, 1, 0); + p = STRBUF(inbuf) + strspn(STRBUF(inbuf), "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); + if (*p == '=') { + char *val = p+1; + + *p = '\0'; + p = val + strcspn(val, "\r\n"); *p = '\0'; + printf("%s=%s;export %s\n", STRBUF(inbuf), val, STRBUF(inbuf)); + } + break; + case S_CSH: + sanitize_input(inbuf, 1, 0); + p = STRBUF(inbuf) + strspn(STRBUF(inbuf), "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); + if (*p == '=') { + char *val = p+1; + + *p = '\0'; + p = val + strcspn(val, "\r\n"); *p = '\0'; + printf("setenv %s %s\n", STRBUF(inbuf), val); + } + break; + } } stackfclose(cfgfile);