Ejemplo n.º 1
0
static bool
get_console_input_systemd (const char *prompt, const bool echo, char *input, const int capacity)
{
  int std_out;
  bool ret = false;
  struct argv argv;

  argv_init (&argv);
  argv_printf (&argv, SYSTEMD_ASK_PASSWORD_PATH);
  argv_printf_cat (&argv, "%s", prompt);

  if ((std_out = openvpn_popen (&argv, NULL)) < 0) {
	  return false;
  }

  memset (input, 0, capacity);
  if (read (std_out, input, capacity-1) > 0)
    {
       chomp (input);
       ret = true;
    }
  close (std_out);

  argv_reset (&argv);

  return ret;
}
Ejemplo n.º 2
0
struct argv
argv_new (void)
{
  struct argv ret;
  argv_init (&ret);
  return ret;
}
Ejemplo n.º 3
0
void
argv_reset (struct argv *a)
{
  size_t i;
  for (i = 0; i < a->argc; ++i)
    free (a->argv[i]);
  free (a->argv);
  free (a->system_str);
  argv_init (a);
}
Ejemplo n.º 4
0
static void process_buf(const char *buf)
{
	int i;
	struct argv_buf a;

	argv_set_delim(&a, '\n');
	argv_init(&a);
	argv_strdup(&a, buf);
	argv_parse(&a);
	for (i = 0; i < a.argc; i++)
		process_line(a.argv[i]);
}
/*
 * ex_cinit --
 *	Create an EX command structure.
 *
 * PUBLIC: void ex_cinit __P((SCR *, EXCMD *, int, int, db_recno_t, db_recno_t, int));
 */
void
ex_cinit(SCR *sp, EXCMD *cmdp, int cmd_id, int naddr, db_recno_t lno1, db_recno_t lno2, int force)
{
	memset(cmdp, 0, sizeof(EXCMD));
	cmdp->cmd = &cmds[cmd_id];
	cmdp->addrcnt = naddr;
	cmdp->addr1.lno = lno1;
	cmdp->addr2.lno = lno2;
	cmdp->addr1.cno = cmdp->addr2.cno = 1;
	if (force)
		cmdp->iflags |= E_C_FORCE;
	(void)argv_init(sp, cmdp);
}
Ejemplo n.º 6
0
/*
 * Let's keep it simple.
 */
int main(int argc, char **argv)
{
	int ret = 0;

	set_defaults();
	inform_init(stderr);
	argv_init(argc, argv);

	ret = config_init();
	assert(ret);

	work_in_progress();

	ret = http_main();
	return ret;
}
Ejemplo n.º 7
0
struct argv
argv_clone (const struct argv *a, const size_t headroom)
{
  struct argv r;
  size_t i;

  argv_init (&r);
  for (i = 0; i < headroom; ++i)
    argv_append (&r, NULL);
  if (a)
    {
      for (i = 0; i < a->argc; ++i)
	argv_append (&r, string_alloc (a->argv[i], NULL));
      r.system_str = string_alloc (a->system_str, NULL);
    }
  return r;
}
Ejemplo n.º 8
0
static void setup(void) {
  args = argv_init();;
}
Ejemplo n.º 9
0
/*
 * Main parser used for converting a string (str) to an argc/argv style
 * parameter list.  This handles escape sequences and quoting.  Possibly
 * correctly.  :D
 * The argc/argv parameters passed are over-written.  After they have been
 * built by this function, the caller should use argv_free() on them to
 * free() all associated memory.
 * If the parsing goes correctly, 0 is returned.  Otherwise, 1 is returned
 * and the errmsg parameter is set to some appropriate error message and
 * both argc/argv are set to 0/NULL.
 */
int
str2argv(char *str, int *argc, char ***argv, const char **errmsg)
{
   bool in_token;
   bool in_container;
   bool escaped;
   char container_start;
   char c;
   int  len;
   int  i;

   const char *ERRORS[2] = {
      "Unmatched quotes",
      "Unused/Dangling escape sequence"
   };
   *errmsg = NULL;

   container_start = 0;
   in_token = false;
   in_container = false;
   escaped = false;

   len = strlen(str);

   argv_init(argc, argv);
   for (i = 0; i < len; i++) {
      c = str[i];

      switch (c) {
         /* handle whitespace */
         case ' ':
         case '\t':
         case '\n':
            if (!in_token)
               continue;

            if (in_container) {
               argv_addch(*argc, *argv, c);
               continue;
            }

            if (escaped) {
               escaped = false;
               argv_addch(*argc, *argv, c);
               continue;
            }

            /* if reached here, we're at end of token */
            in_token = false;
            argv_finish_token(argc, argv);
            break;

         /* handle quotes */
         case '\'':
         case '\"':

            if (escaped) {
               argv_addch(*argc, *argv, c);
               escaped = false;
               continue;
            }

            if (!in_token) {
               in_token = true;
               in_container = true;
               container_start = c;
               continue;
            }

            if (in_token && !in_container) {
               in_container = true;
               container_start = c;
               continue;
            }

            if (in_container) {
               if (c == container_start) {
                  in_container = false;
                  in_token = false;
                  argv_finish_token(argc, argv);
                  continue;
               } else {
                  argv_addch(*argc, *argv, c);
                  continue;
               }
            }

            *errmsg = ERRORS[0];
            argv_free(argc, argv);
            return 1;

         case '\\':
            if (in_container && str[i+1] != container_start) {
               argv_addch(*argc, *argv, c);
               continue;
            }

            if (escaped) {
               escaped = false;
               argv_addch(*argc, *argv, c);
               continue;
            }

            escaped = true;
            break;

         default:
            if (!in_token)
               in_token = true;

            if (escaped)
               escaped = false;

            argv_addch(*argc, *argv, c);
      }
   }
   argv_finish_token(argc, argv);

   if (in_container) {
      argv_free(argc, argv);
      *errmsg = ERRORS[0];
      return 1;
   }

   if (escaped) {
      argv_free(argc, argv);
      *errmsg = ERRORS[1];
      return 1;
   }

   (*argv)[*argc] = NULL;/*XXX*/

   return 0;
}