CUBRID Engine  latest
client_credentials.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #include "client_credentials.hpp"
20 
21 #include "porting.h"
22 
23 #include <algorithm>
24 
25 static void
26 string_ncopy (std::string &dest, const char *src, size_t max_size)
27 {
28  const char *copyupto = std::find (src, src + max_size, 0); // find terminator
29  dest.assign (src, copyupto);
30 }
31 
32 const char *
33 clientids::UNKNOWN_ID = "(unknown)";
34 
36  : client_type (DB_CLIENT_TYPE_UNKNOWN)
37  , client_info {}
38  , db_user {}
39  , program_name {}
40  , login_name {}
41  , host_name {}
42  , process_id (0)
43 {
44 }
45 
47 {
48 }
49 
50 const char *
52 {
53  return client_info.c_str ();
54 }
55 
56 const char *
58 {
59  return db_user.c_str ();
60 }
61 
62 const char *
64 {
65  return program_name.c_str ();
66 }
67 
68 const char *
70 {
71  return login_name.c_str ();
72 }
73 
74 const char *
76 {
77  return host_name.c_str ();
78 }
79 
80 void
81 clientids::set_ids (db_client_type type_arg, const char *client_info_arg, const char *db_user_arg,
82  const char *program_name_arg, const char *login_name_arg, const char *host_name_arg,
83  int process_id_arg)
84 {
85  set_client_info (client_info_arg);
86  set_user (db_user_arg);
87  set_program_name (program_name_arg);
88  set_login_name (login_name_arg);
89  set_host_name (host_name_arg);
90 
91  client_type = type_arg;
92  process_id = process_id_arg;
93 }
94 
95 void
97 {
98  set_ids (other.client_type, other.client_info.c_str (), other.get_db_user (), other.get_program_name (),
99  other.get_login_name (), other.get_host_name (), other.process_id);
100 }
101 
102 void
103 clientids::set_client_info (const char *client_info_arg)
104 {
106 }
107 
108 void
109 clientids::set_user (const char *db_user_arg)
110 {
111  string_ncopy (db_user, db_user_arg, LOG_USERNAME_MAX);
112 }
113 
114 void
115 clientids::set_program_name (const char *program_name_arg)
116 {
117  char prgname_buf[PATH_MAX] = {'\0'};
118 
119  if (program_name_arg == NULL || basename_r (program_name_arg, prgname_buf, PATH_MAX) < 0)
120  {
121  string_ncopy (program_name, UNKNOWN_ID, PATH_MAX);
122  }
123  else
124  {
125  string_ncopy (program_name, prgname_buf, PATH_MAX);
126  }
127 }
128 
129 void
130 clientids::set_login_name (const char *login_name_arg)
131 {
132  string_ncopy (login_name, login_name_arg, L_cuserid);
133 }
134 
135 void
136 clientids::set_host_name (const char *host_name_arg)
137 {
138  string_ncopy (host_name, host_name_arg, CUB_MAXHOSTNAMELEN);
139 }
140 
141 void
143 {
144  reset ();
146 }
147 
148 void
150 {
152  db_user = db_user_arg;
153 }
154 
155 void
157 {
158  client_info.clear ();
159  db_user.clear ();
160  program_name.clear ();
161  login_name.clear ();
162  host_name.clear ();
163  process_id = 0;
165 }
166 
167 //
168 // packing of clientids
169 //
170 
171 #define CLIENTID_PACKER_ARGS(client_type_as_int) \
172  client_type_as_int, client_info, db_user, program_name, login_name, host_name, process_id
173 
174 size_t
175 clientids::get_packed_size (cubpacking::packer &serializator, std::size_t start_offset) const
176 {
177  return serializator.get_all_packed_size (CLIENTID_PACKER_ARGS (static_cast<int> (client_type)));
178 }
179 
180 void
181 clientids::pack (cubpacking::packer &serializator) const
182 {
183  serializator.pack_all (CLIENTID_PACKER_ARGS (static_cast<int> (client_type)));
184 }
185 
186 void
188 {
189  int read_int;
190  deserializator.unpack_all (CLIENTID_PACKER_ARGS (read_int));
191  client_type = static_cast<db_client_type> (read_int);
192 }
193 
194 //
195 // boot_client_credential
196 //
197 
199  : clientids ()
200  , db_name {}
201  , db_password {}
203  , connect_order (0)
204 {
205 }
206 
208 {
209 }
210 
211 const char *
213 {
214  return db_name.c_str ();
215 }
216 
217 const char *
219 {
220  return db_password.c_str ();
221 }
222 
223 //
224 // packing of boot_client_credential
225 //
226 
227 #define BOOTCLCRED_PACKER_ARGS \
228  db_name, db_password
229 
230 size_t
231 boot_client_credential::get_packed_size (cubpacking::packer &serializator, std::size_t start_offset) const
232 {
233  return clientids::get_packed_size (serializator) + serializator.get_all_packed_size (BOOTCLCRED_PACKER_ARGS);
234 }
235 
236 void
238 {
239  clientids::pack (serializator);
240  serializator.pack_all (BOOTCLCRED_PACKER_ARGS);
241 }
242 
243 void
245 {
246  clientids::unpack (deserializator);
247  deserializator.unpack_all (BOOTCLCRED_PACKER_ARGS);
248 }
const char * get_db_password() const
virtual size_t get_packed_size(cubpacking::packer &serializator, std::size_t start_offset=0) const override
#define L_cuserid
Definition: porting.h:58
void set_system_internal_with_user(const char *db_user)
virtual void pack(cubpacking::packer &serializator) const override
#define BOOTCLCRED_PACKER_ARGS
const char * get_host_name() const
void set_program_name(const char *program_name)
virtual void unpack(cubpacking::unpacker &deserializator) override
void set_user(const char *db_user)
void pack_all(Args &&...args)
Definition: packer.hpp:319
db_client_type client_type
const char * get_program_name() const
static const char * UNKNOWN_ID
~clientids() override
void set_client_info(const char *client_info)
const char * get_client_info() const
std::string client_info
void set_system_internal()
size_t get_all_packed_size(Args &&...args)
Definition: packer.hpp:289
#define DB_MAX_IDENTIFIER_LENGTH
Definition: dbtype_def.h:495
std::string db_user
virtual void pack(cubpacking::packer &serializator) const override
#define NULL
Definition: freelistheap.h:34
db_client_type
#define CLIENTID_PACKER_ARGS(client_type_as_int)
static void string_ncopy(std::string &dest, const char *src, size_t max_size)
std::string program_name
virtual size_t get_packed_size(cubpacking::packer &serializator, std::size_t start_offset=0) const override
char * db_name
virtual void unpack(cubpacking::unpacker &deserializator) override
const char * get_login_name() const
const char * get_db_user() const
void unpack_all(Args &&...args)
Definition: packer.hpp:397
const size_t LOG_USERNAME_MAX
void set_host_name(const char *host_name)
std::string host_name
#define CUB_MAXHOSTNAMELEN
Definition: porting.h:379
void set_ids(db_client_type type, const char *client_info, const char *db_user, const char *program_name, const char *login_name, const char *host_name, int process_id)
std::string login_name
void set_login_name(const char *login_name)
const char * get_db_name() const
int basename_r(const char *path, char *pathbuf, size_t buflen)
Definition: porting.c:1082