UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2017 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include "wstool.h" 30 31 #include <stdio.h> 32 #include <stdlib.h> 33 #include <string.h> 34 35 #include "../server/config/serverconf.h" 36 37 #include "srvctrlsocket.h" 38 39 static void print_info(char *cmd) { 40 fprintf(stderr, "usage:\n"); 41 fprintf(stderr, "%s -t <srvconfigfile>\n", cmd); 42 fprintf(stderr, "%s -s <socketpath> <command>\n", cmd); 43 fprintf(stderr, "Commands: reconfig, shutdown, stat, log\n"); 44 } 45 46 int main(int argc, char **argv) { 47 if(argc > 2) { 48 if(!strcmp(argv[1], "-t")) { 49 return tool_get_tmpdir(argv[2]); 50 } else if(!strcmp(argv[1], "-s")) { 51 if(argc != 4) { 52 print_info(argv[0]); 53 return -2; 54 } 55 return tool_srvctrl(argv[2], argv[3]); 56 } 57 } 58 59 print_info(argv[0]); 60 return -2; 61 } 62 63 int tool_get_tmpdir(char *configfile) { 64 ServerConfig *serverconf = load_server_config(configfile); 65 UcxList *list = ucx_map_sstr_get(serverconf->objects, sstrn("Runtime", 7)); 66 if(!list) { 67 fprintf(stderr, "Error: No Runtime element in %s\n", configfile); 68 return -1; 69 } 70 if(ucx_list_size(list) != 1) { 71 fprintf(stderr, "Error: Multiple Runtime elements in %s\n", configfile); 72 return -1; 73 } 74 ServerConfigObject *runtime = list->data; 75 sstr_t tmp = cfg_directivelist_get_str(runtime->directives, sstr("Temp")); 76 if(!tmp.ptr) { 77 fprintf(stderr, "Error: No Temp directive in Runtime Object\n"); 78 return -1; 79 } 80 81 printf("%.*s\n", (int)tmp.length, tmp.ptr); 82 83 return 0; 84 } 85 86 int tool_srvctrl(char *socketfile, char *cmd) { 87 SrvConnection *srv = srvctrl_connet(socketfile); 88 if(!srv) { 89 return -1; 90 } 91 92 fprintf(srv->stream, "%s\n", cmd); 93 fflush(srv->stream); 94 95 SrvMsg msg; 96 while(!srvctrl_readmsg(srv, &msg)) { 97 if(msg.type == 0) { 98 fprintf(stdout, "%.*s", (int)msg.length, msg.message); 99 fflush(stdout); 100 } else if(msg.type == 1) { 101 fprintf(stderr, "%.*s", (int)msg.length, msg.message); 102 fflush(stderr); 103 } 104 } 105 106 srvctrl_close(srv); 107 108 return 0; 109 } 110 111 112 113 int log_ereport(int degree, const char *format, ...) { 114 va_list args; 115 va_start(args, format); 116 int ret = log_ereport_v(degree, format, args); 117 va_end(args); 118 return ret; 119 } 120 121 int log_ereport_v(int degree, const char *format, va_list args) { 122 return 0; 123 } 124