common.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include <ndb_global.h>
  14. #include "common.hpp"
  15. #include <logger/Logger.hpp>
  16. #include <pwd.h>
  17. #include <Properties.hpp>
  18. #include <BaseString.hpp>
  19. int debug = 0;
  20. Logger logger;
  21. int
  22. runas(const char * user){
  23.   if(user == 0 || strlen(user) == 0){
  24.     return 0;
  25.   }
  26.   struct passwd * pw = getpwnam(user);
  27.   if(pw == 0){
  28.     logger.error("Can't find user to %s", user);
  29.     return -1;
  30.   }
  31.   uid_t uid = pw->pw_uid;
  32.   gid_t gid = pw->pw_gid;
  33.   int res = setgid(gid);
  34.   if(res != 0){
  35.     logger.error("Can't change group to %s(%d)", user, gid);
  36.     return res;
  37.   }
  38.   res = setuid(uid);
  39.   if(res != 0){
  40.     logger.error("Can't change user to %s(%d)", user, uid);
  41.   }
  42.   return res;
  43. }
  44. int
  45. insert(const char * pair, Properties & p){
  46.   BaseString tmp(pair);
  47.   
  48.   tmp.trim(" tnr");
  49.   Vector<BaseString> split;
  50.   tmp.split(split, ":=", 2);
  51.   if(split.size() != 2)
  52.     return -1;
  53.   p.put(split[0].trim().c_str(), split[1].trim().c_str()); 
  54.   return 0;
  55. }
  56. int
  57. insert_file(FILE * f, class Properties& p, bool break_on_empty){
  58.   if(f == 0)
  59.     return -1;
  60.   while(!feof(f)){
  61.     char buf[1024];
  62.     fgets(buf, 1024, f);
  63.     BaseString tmp = buf;
  64.     if(tmp.length() > 0 && tmp.c_str()[0] == '#')
  65.       continue;
  66.     if(insert(tmp.c_str(), p) != 0 && break_on_empty)
  67.       break;
  68.   }
  69.   return 0;
  70. }
  71. int
  72. insert_file(const char * filename, class Properties& p){
  73.   FILE * f = fopen(filename, "r");
  74.   int res = insert_file(f, p);
  75.   if(f) fclose(f);
  76.   return res;
  77. }