Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
	}
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
	stringbuffer::~stringbuffer() {
		stringbuffer_free(this->obj);
	}
Esempio n. 8
0
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);
}
Esempio n. 9
0
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;
}