void config_open(const char *filename) { if (!file_exists(filename)) config_save(filename); STRINGBUFFER *cmd = stringbuffer_new(); #ifdef SYSTEM_OS_TYPE_WINDOW stringbuffer_append(cmd, "notepad.exe"); #else if (file_exists("/usr/bin/vim")) stringbuffer_append(cmd, "/usr/bin/vim"); else if (file_exists("/usr/bin/emacs")) stringbuffer_append(cmd, "/usr/bin/emacs"); else if (file_exists("/usr/bin/nano")) stringbuffer_append(cmd, "/usr/bin/nano"); else if (file_exists("/bin/vi")) stringbuffer_append(cmd, "/bin/vi"); else message_error("no editor found"); #endif stringbuffer_append(cmd, " "); stringbuffer_append(cmd, filename); system(stringbuffer_getTextPointer(cmd)); stringbuffer_free(cmd); config_load(filename); }
void checkParameter(char *key, char *value) { if (parameter_get(_config_param, key) == NULL) { STRINGBUFFER *tmp = stringbuffer_clone(_config_directory); stringbuffer_append(tmp, SEPARATOR); stringbuffer_append(tmp, value); parameter_add(_config_param, key, stringbuffer_getTextPointer(tmp)); stringbuffer_free(tmp); } }
void initConfig() { _config_param = parameter_new(); /* config-dir */ char *home = getenv("HOME"); if (home == NULL) { error_set(ERROR_CONFIG_HOME, "Unable to get home directory."); return; } STRINGBUFFER *tmp_cfg = stringbuffer_new(); /* config-directory */ stringbuffer_append(tmp_cfg, home); stringbuffer_append(tmp_cfg, SEPARATOR); stringbuffer_append(tmp_cfg, CONFIG_DIRECTORY); _config_directory = stringbuffer_clone(tmp_cfg); /* config-file */ stringbuffer_append(tmp_cfg, SEPARATOR); stringbuffer_append(tmp_cfg, CONFIG_FILE); _config_file = stringbuffer_clone(tmp_cfg); printf ( "CONFIGFILE:\t%s\n", stringbuffer_getTextPointer(_config_file) ); stringbuffer_free(tmp_cfg); /* load config */ _config_param = parameter_new(); parameter_loadFromFile(_config_param, stringbuffer_getTextPointer(_config_file)); checkParameter(CONFIG_DIRECTORY_STORE_KEY, CONFIG_DIRECTORY_STORE_VALUE); checkParameter(CONFIG_DIRECTORY_RESTORE_KEY, CONFIG_DIRECTORY_RESTORE_VALUE); checkParameter(CONFIG_DIRECTORY_KEY_KEY, CONFIG_DIRECTORY_KEY_VALUE); /* make directories */ char *tmp_dir; /* make store directory */ tmp_dir = parameter_get(_config_param, CONFIG_DIRECTORY_STORE_KEY); assert(tmp_dir); if (!directory_exists(tmp_dir)) directory_create(tmp_dir); free(tmp_dir); /* make restore directory */ tmp_dir = parameter_get(_config_param, CONFIG_DIRECTORY_RESTORE_KEY); assert(tmp_dir); if (!directory_exists(tmp_dir)) directory_create(tmp_dir); free(tmp_dir); /* make key directory */ tmp_dir = parameter_get(_config_param, CONFIG_DIRECTORY_KEY_KEY); assert(tmp_dir); if (!directory_exists(tmp_dir)) directory_create(tmp_dir); free(tmp_dir); }
void initList(int strc, char **strv) { if ( strc <= 0) return; stringbuffer_t *sb = stringbuffer_init(); int i; for (i = 0; i < strc; ++i) { stringbuffer_append(sb, strv[i]); stringbuffer_append(sb, " "); } gList = stringbuffer_text(sb); stringbuffer_free(sb); }
void doUpdate() { stringbuffer_t *sb = stringbuffer_init(); stringbuffer_append(sb, gPath); stringbuffer_append(sb, "/"); switch (gSystem) { case SYSTEM_YUM: stringbuffer_append(sb, "yum update"); break; case SYSTEM_APT: stringbuffer_append(sb, "apt-get update"); break; default: fprintf(stderr, "ERROR: Undefined system.\n"); exit(EXIT_FAILURE); } stringbuffer_append(sb, " "); stringbuffer_append(sb, gList); system(stringbuffer_getTextPointer(sb)); stringbuffer_free(sb); }
void doList() { STRINGBUFFER *sb = stringbuffer_new(); stringbuffer_append(sb, gPath); stringbuffer_append(sb, "/"); switch (gSystem) { case SYSTEM_YUM: stringbuffer_append(sb, "yum list"); break; case SYSTEM_APT: stringbuffer_append(sb, "apt-file list"); break; default: fprintf(stderr, "ERROR: Undefined system.\n"); exit(EXIT_FAILURE); } stringbuffer_append(sb, " "); stringbuffer_append(sb, gList); system(stringbuffer_getTextPointer(sb)); stringbuffer_free(sb); }
stringbuffer::~stringbuffer() { stringbuffer_free(this->obj); }
BOOL active_server_callCommandExternal(ACTIVE_SERVER *self, const char *cmd, const char *arg) { assert(self); assert(cmd); char *tmp; tmp = active_server_correct_path(self->root, cmd); STRINGBUFFER *bin = stringbuffer_new(); stringbuffer_append(bin, tmp); free(tmp); #ifdef SYSTEM_OS_TYPE_WINDOWS stringbuffer_append(bin, ".exe"); #endif if (!file_exists(stringbuffer_getTextPointer(bin))) { network_writeStatus(NET, FALSE); exception_setLong(ERR, -1, "binary file not found", stringbuffer_getTextPointer(bin), "check the command"); exception_throwCallback(ERR); stringbuffer_free(bin); return FALSE; } else { network_writeStatus(NET, TRUE); } /* get client OK */ if (!network_readStatus(NET)) { exception_setShort(ERR, -1, "client not ready"); exception_throwCallback(ERR); stringbuffer_free(bin); return FALSE; } /* create message-id */ STRINGBUFFER *sb = stringbuffer_new(); tmp = datetime_getTimestampAsString(); stringbuffer_append(sb, tmp); free(tmp); stringbuffer_append(sb, "_"); tmp = number_unsignedIntegerToString(rand()); stringbuffer_append(sb, tmp); free(tmp); stringbuffer_append(sb, "@"); tmp = network_getAcceptAddress(NET); stringbuffer_append(sb, tmp); free(tmp); char *id = stringbuffer_getText(sb); if (system_isDebug()) { printf ( "MESSAGE-ID:\t%s\n", id ); } network_writeString(NET, id); if (!network_readStatus(NET)) { free(id); stringbuffer_free(bin); exception_setShort(ERR, -1, "client allows id"); exception_throwCallback(ERR); return FALSE; } /* add arguments to command */ if (arg) { stringbuffer_append(bin, " "); stringbuffer_append(bin, arg); } if (system_isDebug()) { printf ( "EXECUTE:\t\t%s\n", stringbuffer_getTextPointer(bin) ); } /* redirect stderr-stream */ stringbuffer_append(bin, " 2>&1"); /* call process */ FILE *proc; proc = popen(stringbuffer_getTextPointer(bin), "r"); stringbuffer_free(bin); if (!proc) { free(id); exception_setLong(ERR, -1, "unable to start process", strerror(errno), "check command"); exception_throwCallback(ERR); return FALSE; } /* send line by line */ char line[ACTIVE_BUFFER_SIZE]; while (fgets(line, ACTIVE_BUFFER_SIZE, proc)) { network_writeString(NET, line); if (!network_readStatus(NET)) { free(id); pclose(proc); exception_setShort(ERR, -1, "client sent an error"); exception_throwCallback(ERR); return FALSE; } } /* close process */ int exitcode = pclose(proc); /* send EOF(id) */ char *eof = (char *)malloc(3 + 1 + strlen(id) + 1 + 1); strcpy(eof, "EOF("); strcat(eof, id); strcat(eof, ")"); network_writeString(NET, eof); /* read id */ char *res = network_readString(NET); BOOL ok = (strcmp(id, res) == 0); /* free */ free(res); free(eof); free(id); if (!ok) { network_writeStatus(NET, FALSE); exception_setShort(ERR, -1, "client sent an error"); exception_throwCallback(ERR); return FALSE; } network_writeStatus(NET, TRUE); /* send ok */ if (!network_readStatus(NET)) { exception_setShort(ERR, -1, "client allows id"); exception_throwCallback(ERR); return FALSE; } /* send exitcode */ network_writeNumber(NET, exitcode); return network_readStatus(NET); }
int main(int argc, char **argv) { CURL *curl; CURLcode res; struct curl_slist* slist = NULL; struct stringbuffer buffer; long resp_code = 0; char *token = NULL; curl = curl_easy_init(); stringbuffer_init(&buffer); if (curl) { /** Let it be known that I refuse to write manual, string-quoted JSON. */ slist = curl_slist_append(slist, "Content-type: application/json"); json_object *body_obj = json_object_new_object(); json_object *auth_obj = json_object_new_object(); json_object *cred_obj = json_object_new_object(); json_object *tenant_str = json_object_new_string(KEYSTONE_TENANT); json_object *user_str = json_object_new_string(KEYSTONE_USER); json_object *pass_str = json_object_new_string(KEYSTONE_PASS); json_object_object_add(body_obj, "auth", auth_obj); json_object_object_add(auth_obj, "passwordCredentials", cred_obj); json_object_object_add(auth_obj, "tenantName", tenant_str); json_object_object_add(cred_obj, "username", user_str); json_object_object_add(cred_obj, "password", pass_str); const char* body = json_object_to_json_string(body_obj); //printf("body[%d]:\n%s\n\n", strlen(body), body); curl_easy_setopt(curl, CURLOPT_URL, KEYSTONE_URL); curl_easy_setopt(curl, CURLOPT_POST, 1); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, (void*) http_received_data); res = curl_easy_perform(curl); json_object_put(body_obj); json_object_put(auth_obj); json_object_put(cred_obj); json_object_put(user_str); json_object_put(pass_str); json_object_put(tenant_str); curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &resp_code); //printf("HTTP %d\n", resp_code); //printf("body[%d]\n%s\n\n", buffer.len, buffer.ptr); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else if (resp_code == 200) { json_object *json = json_tokener_parse(buffer.ptr); json_object *access_obj = json_object_object_get(json, "access"); json_object *token_obj = json_object_object_get(access_obj, "token"); json_object *id_obj = json_object_object_get(token_obj, "id"); const char* tmp_token = json_object_get_string(id_obj); token = malloc(strlen(tmp_token) + 1); strcpy(token, tmp_token); json_object_put(id_obj); json_object_put(token_obj); json_object_put(access_obj); json_object_put(json); } else { fprintf(stderr, "Could not authenticate (HTTP %d received).\n", resp_code); } stringbuffer_free(&buffer); curl_easy_cleanup(curl); curl_slist_free_all(slist); } if (token != NULL) { printf("token is %s\n", token); } return 0; }