Пример #1
0
static void build_nomls_vecs()
{
	const void *item;
	const apol_vector_t *v = NULL;
	size_t i, str_len = 0;
	char *str = NULL;
	v = poldiff_get_user_vector(diff);
	for (i = 0; i < apol_vector_get_size(v); ++i) {
		item = apol_vector_get_element(v, i);
		poldiff_user_t *u = (poldiff_user_t *) item;
		const char *name = poldiff_user_get_name(u);
		const apol_vector_t *added_roles = poldiff_user_get_added_roles(u);
		const apol_vector_t *removed_roles = poldiff_user_get_removed_roles(u);
		if (apol_vector_get_size(added_roles) == 0 && apol_vector_get_size(removed_roles) == 0) {
			apol_vector_append(unchanged_users_v, strdup(name));
		} else {
			char *added_roles_str = vector_to_string(added_roles, "", " +");
			char *removed_roles_str = vector_to_string(removed_roles, "-", " ");
			apol_str_appendf(&str, &str_len, "%s %s%s", name, added_roles_str, removed_roles_str);
			free(added_roles_str);
			free(removed_roles_str);
			apol_str_trim(str);
			apol_vector_append(changed_users_v, str);
			str = NULL;
			str_len = 0;
		}
	}
}
Пример #2
0
static void daemon_change_password(std::string &user, std::string &base64_rsa_md5saltsum_old_password, std::string &base64_rsa_md5saltsum_new_password)
{
	std::vector<unsigned char> v;
	base64_decode(base64_rsa_md5saltsum_old_password, v);
	std::vector<unsigned char> v2;
	rsa_decrypt(v, v2, RSA_Public_Key_d, RSA_Public_Key_n);
	std::string old_passwd;
	vector_to_string(v2, old_passwd);

	base64_decode(base64_rsa_md5saltsum_new_password, v);
	rsa_decrypt(v, v2, RSA_Public_Key_d, RSA_Public_Key_n);
	std::string new_passwd;
	vector_to_string(v2, new_passwd);


	if (new_passwd.length()!=32) {
		daemon_printf( "%d wrong new password\n", CODE_DENIED );
		return;
	}
	if (init_database()) {
		daemon_printf( "%d Connect to MySQL failed!\n", CODE_DENIED );
		return;
	}
	std::string sql;
	if (auth_user != "root") {
		sql = "SELECT user_md5saltpassword FROM stardict_users WHERE username="******"%d Query failed!\n", CODE_DENIED );
			return;
		}
		MySQLResult *res = stardictdMain.conn.getResult();
		if (!res) {
			daemon_printf( "%d Get result failed!\n", CODE_DENIED );
			return;
		}
		DB_ROW row = res->fetchRow();
		if (!row) {
			res->destroy();
			daemon_printf( "%d user doesn't exist\n", CODE_DENIED );
			return;
		}
		if (old_passwd != row[0]) {
			res->destroy();
			daemon_printf( "%d old password is wrong\n", CODE_DENIED );
			return;
		}
		res->destroy();
	}
	sql = "UPDATE stardict_users SET user_md5saltpassword="******" WHERE username="******"%d Query failed!\n", CODE_DENIED );
		return;
	}
	daemon_printf( "%d\n", CODE_OK );
}
Пример #3
0
 std::string autobroadcast_incompatible_shapes::error_str(const ngraph::Shape& shape1,
                                                          const ngraph::Shape& shape2)
 {
     ostringstream os;
     os << "Auto-broadcast not possible for these input shapes:"
        << " shape1=" << vector_to_string(shape1) << " shape2=" << vector_to_string(shape2);
     return os.str();
 }
Пример #4
0
  std::u32string value::to_string() const
  {
    switch (m_type)
    {
      case type::boolean:
        return m_value_boolean ? U"true" : U"false";

      case type::number:
        return number_to_string(*m_value_number);

      case type::vector:
        return vector_to_string(*m_value_vector);

      case type::string:
        return *m_value_string;

      case type::quote:
        return m_value_quote->to_source();

      case type::month:
        return month_to_string(m_value_month);

      case type::weekday:
        return weekday_to_string(m_value_weekday);

      case type::date:
        return date_to_string(*m_value_date);

      case type::time:
        return time_to_string(*m_value_time);
    }

    return U"";
  }
std::string file_specification::image(void) const
{
  std::string result = m_drive;
  if (absolute())
    result += preferred_separator;
  if (!m_path.empty())
    result += vector_to_string(m_path, std::string(1,preferred_separator));
  else if (relative())
    result += '.';
  if (!m_filename.empty())
  {
    result += preferred_separator;
    result += m_filename;
  }
  return result;
}
Пример #6
0
void setup_word_to_print (char *type, int cp, int str, struct pcp_vars *pcp)
{
   register int *y = y_address;

#if defined (GROUP) 
   vector_to_string (cp, str, pcp);

   /* may need to set up pointer to this string at a later stage */
   ++str;

   printf ("The %s is ", type);
   if (y[str] == 0) 
      print_word (0, pcp);
   else
      print_word (-str + 1, pcp);

#endif
}
Пример #7
0
void evaluate_list (int *queue, int *queue_length, int *list, int depth, struct pcp_vars *pcp)
{
   register int *y = y_address;

   register int lastg = pcp->lastg;
   register int cp = pcp->lused;
   register int cp1 = cp + lastg;
   register int cp2 = cp1 + lastg;
   register int i, a;

   for (i = 1; i <= lastg; ++i)
      y[cp + i] = 0;

   while (depth > 0) {
      a = list[depth];
      for (i = 1; i <= lastg; ++i)
	 y[cp1 + i] = 0;
      y[cp1 + a] = 1;
      /* compute a^power_of_entry */
      power (power_of_entry, cp1, pcp);
      vector_to_string (cp1, cp2, pcp);
      if (y[cp2 + 1] != 0)
	 collect (-cp2, cp, pcp);
      --depth;
   }

#ifdef DEBUG
   print_array (y, cp + 1, cp + lastg + 1);
   printf ("The result is ");
   print_array (y, cp + 1, cp + lastg + 1);
#endif

   /* now compute word^exponent */
   power (exponent, cp, pcp);
   setup_word_to_print ("result of collection", cp, cp + lastg + 1, pcp);

   /*
     if (pcp->m != 0)
     */
   setup_echelon (queue, queue_length, cp, pcp);
}
Пример #8
0
Variable::Variable(const std::vector<std::string>& name)
{
    m_name = vector_to_string (name);
    m_name_vector = name;
}
Пример #9
0
void power (int exp, int cp, struct pcp_vars *pcp)
{
   register int *y = y_address;

   register int p = pcp->p;
   register int lastg = pcp->lastg;
   register int x = cp;
   register int a = pcp->submlg - (lastg + 1);
   register int b = a - (lastg + 1);
   register int z = b - (lastg + 1);
   register int q, r, pp, nn;
   register int i;

   if (exp == 1) return;

   /* nn is the exponent requested */
   nn = exp;

   /* first consider small primes */
   if (p == 2 || p == 3) {

      /* extract all powers of the prime from the exponent */
      while (MOD (nn, p) == 0) {
	 nn /= p;

	 /* pack word in X into string for multiplication p - 1 times */
	 vector_to_string (x, a, pcp);
	 if (y[a + 1] == 0) return;

	 /* now multiply p - 1 times to get X^p */
	 for (i = 1; i <= p - 1; ++i) {
	    collect (-a, x, pcp);
	 }
      }

      if (nn == 1) return;

      /* have extracted all powers of p from exponent - 
	 now do rest using prime p expansion */

      /* move X into Z, set X to 1 */
      copy_array (x, lastg, z, pcp);
      zero_array (x, lastg, pcp);

      while (nn > 0) {
	 r = MOD (nn, p);
	 nn /= p;

	 /* move Z into A to multiply onto Z p - 1 times and 
	    onto X r times */
	 vector_to_string (z, a, pcp);

	 /* now calculate Z = Z^p and X = X * Z^r */
	 if (y[a + 1] != 0) {
	    for (i = 1; i <= p - 1; ++i) {
	       if (i <= r) 
		  collect (-a, x, pcp);
	       collect (-a, z, pcp);
	    }
	 }
      }
   }

   /* for larger primes, use prime p decomposition and subsequent 
      binary expansion */

   else {
      /* move X into Z and set X to 1 */
      vector_to_string (x, z, pcp);
      zero_array (x, lastg, pcp);

      while (nn > 0) {

	 /* move word w in Z into A, and set Z to 1; A will square each 
	    iteration, and Z will accumulate some of these powers to 
	    end up with w^p at end of while loop */

	 string_to_vector (z, a, pcp);
	 zero_array (z, lastg, pcp);

	 q = nn / p;
	 r = MOD (nn, p);
	 pp = p;

	 /* Now use binary expansion of both PP (ie p) and remainder R
	    to accumulate w^p in Z and w^R onto X from squaring of w.
	    Must continue until we have last w^R on X or until we get 
	    w^p in Z if there is any remaining exponent (ie Q > 0) */

	 while (r > 0 || (pp > 0 && q > 0)) {

	    /* collect onto answer if needed (ie R = 1) */
	    if (MOD (r, 2) == 1) {
	       copy_array (a, lastg, b, pcp);
	       if (y[x + 1] > 0) {
		  collect (-x, b, pcp);
	       }
	       vector_to_string (b, x, pcp);
	    }

	    /* collect onto Z for next power of w if next iteration reqd */
	    if (MOD (pp, 2) == 1 && q > 0) {
	       copy_array (a, lastg, b, pcp);
	       if (y[z + 1] > 0) {
		  collect (-z, b, pcp);
	       }
	       vector_to_string (b, z, pcp);
	    }

	    r = r >> 1;
	    pp = pp >> 1;

	    /* if powers still needed for answer X or for w^p in Z for
	       another iteration (ie Q > 0) then square A by unpacking into
	       exponent vector B, collecting A and B, then repacking into A */

	    if (r > 0 || (pp > 0 && q > 0)) {
	       /* square A */
	       vector_to_string (a, b, pcp);
	       if (y[b + 1] > 0) {
		  collect (-b, a, pcp);
	       }
	    }
	 }
	 nn = q;
      }

      /* now X is the answer as a string, so convert to exponent vector */
      string_to_vector (x, b, pcp);
      copy_array (b, lastg, x, pcp);
   }
}
Пример #10
0
static void daemon_register(std::string &user, std::string &base64_rsa_md5saltsum_password, std::string &email)
{
	std::vector<unsigned char> v;
	base64_decode(base64_rsa_md5saltsum_password, v);
	std::vector<unsigned char> v2;
	rsa_decrypt(v, v2, RSA_Public_Key_d, RSA_Public_Key_n);
	std::string password;
	vector_to_string(v2, password);

	if (user.length()>16 || password.length()!=32 || strchr(email.c_str(), '@')==NULL) {
		daemon_printf( "%d invalid parameter\n", CODE_DENIED );
		return;
	}
	if (init_database()) {
		daemon_printf( "%d Connect to MySQL failed!\n", CODE_DENIED );
		return;
	}
	std::string sql;
	// Original insert sql code.
	sql = "INSERT INTO stardict_users (username, user_md5saltpassword) VALUES(";
	AppendMysql(sql, user.c_str());
	sql += ",";
	AppendMysql(sql, password.c_str());
	sql += ")";
	if (stardictdMain.conn.query(sql.c_str(), sql.length())) {
		daemon_printf( "%d user already exists\n", CODE_DENIED );
		return;
	}
	stardictdMain.conn.lastInsertID(userID);
	sql = "INSERT INTO user_basic (id, register_time, email) VALUES(";
	sql += userID;
	sql += ",";
	gchar *register_time = g_strdup_printf("%u", (unsigned int)time(NULL));
	sql += register_time;
	g_free(register_time);
	sql += ",";
	AppendMysql(sql, email.c_str());
	sql += ")";
	std::string text;
	if (stardictdMain.conn.query(sql.c_str(), sql.length())) {
		text = "Init user_basic table failed: ";
		text += sql;
		stardictdMain.logger->log(LOG_ERROR, text.c_str());
	}
	// Code to cooperate with phpBB3 forum.
	// It works in PROTOCOL_VERSION_0.3 ago, but don't works in PROTOCOL_VERSION_0.4 now. As change "user_password" to "user_md5saltpassword".
	//
	//
	/*gchar *register_time = g_strdup_printf("%u", (unsigned int)time(NULL));
	sql = "INSERT INTO `stardict_users`(`user_type`, `group_id`, `user_permissions`, `user_perm_from`, `user_ip`, `user_regdate`, `username`, `username_clean`, `user_password`, `user_passchg`, `user_pass_convert`, `user_email`, `user_email_hash`, `user_birthday`, `user_lastvisit`, `user_lastmark`, `user_lastpost_time`) VALUES(";
	sql += "0 ,2, '', 0, ''";
	sql += ",";
	sql += register_time;
	sql += ",";
	AppendMysql(sql, user.c_str());
	sql += ",";
	AppendMysql(sql, user.c_str());
	sql += ",";
	AppendMysql(sql, password.c_str());
	sql += ",";
	sql += register_time;
	sql += ",";
	sql += "0";
	sql += ",";
	AppendMysql(sql, email.c_str());
	sql += ",";
	sql += "'0' ,''";
	sql += ",";
	sql += register_time;
	sql += ",";
	sql += register_time;
	sql += ",";
	sql += "'0'"; 
	sql += ")";
	if (stardictdMain.conn.query(sql.c_str(), sql.length())) {
		daemon_printf( "%d user already exists\n", CODE_DENIED );
		g_free(register_time);
		return;
	}
	stardictdMain.conn.lastInsertID(userID);
	
	sql = "INSERT INTO user_basic (id, register_time, email) VALUES(";
	sql += userID;
	sql += ",";
	sql += register_time;
	g_free(register_time);
	sql += ",";
	AppendMysql(sql, email.c_str());
	sql += ")";

	std::string text;	
	if (stardictdMain.conn.query(sql.c_str(), sql.length())) {
		text = "Init user_basic table failed: ";
		text += sql;
		stardictdMain.logger->log(LOG_ERROR, text.c_str());
	}
	
	sql = "INSERT INTO `stardict_user_group` (`user_id`, `group_id`,`group_leader`, `user_pending`) VALUES(";
	sql += userID;
	sql += ",";
	sql += "2";
	sql += ",";
	sql += "0";
	sql += ",";
	sql += "0";
	sql += ")";
	
	if (stardictdMain.conn.query(sql.c_str(), sql.length())) {
		text = "Init stardict_user_group table failed: ";
		text += sql;
		stardictdMain.logger->log(LOG_ERROR, text.c_str());
	}*/
	text = "Register user: "******"%d registered\n", CODE_OK );
}
    bool _check_for_loops() {
        std::vector<int>           visited_stream;
        std::map<int, size_t> when_visited; // (v at k) say, that k is already visited at position v
        int idx = idx_decode(next_free.load());
        int last = -1;
        while( idx != -1 ) {
            if( when_visited.find(idx) != when_visited.end() ) {
                // we've already seen this value, so WE HAVE LOOP

                tprintf(tinfra::err, "T[%i]: _check_for_loops %i->%i is a loop, whole vector\n", get_thread_string(), last, idx, vector_to_string(visited_stream));
                return false;
            }

            when_visited[idx] = visited_stream.size();
            visited_stream.push_back(idx);
            last = idx;
            idx = item_next_free_idx(idx);
        }
        return true;
    }