seclib.hpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. /*##############################################################################
  2. HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. ############################################################################## */
  13. #ifndef _SECLIB_HPP__
  14. #define _SECLIB_HPP__
  15. #include "jlib.hpp"
  16. #include "jtime.hpp"
  17. #include "jexcept.hpp"
  18. #ifndef SECLIB_API
  19. #ifndef SECLIB_EXPORTS
  20. #define SECLIB_API DECL_IMPORT
  21. #else
  22. #define SECLIB_API DECL_EXPORT
  23. #endif //SECLIB_EXPORTS
  24. #endif
  25. #define SECLIB "seclib"
  26. #define LDAPSECLIB "LdapSecurity"
  27. enum NewSecAccessFlags : int
  28. {
  29. NewSecAccess_None = 0,
  30. NewSecAccess_Access = 1,
  31. NewSecAccess_Read = 2,
  32. NewSecAccess_Write = 4,
  33. NewSecAccess_Full = 255
  34. };
  35. enum SecAccessFlags : int
  36. {
  37. SecAccess_Unavailable = -1,
  38. SecAccess_Unknown = -255,
  39. SecAccess_None = 0,
  40. SecAccess_Access = 1,
  41. SecAccess_Read = 3,
  42. SecAccess_Write = 7,
  43. SecAccess_Full = 255
  44. };
  45. static const char * getSecAccessFlagName(SecAccessFlags flag)
  46. {
  47. switch (flag)
  48. {
  49. case SecAccess_Unavailable:
  50. return "Unavailable";
  51. case SecAccess_None:
  52. return "None";
  53. case SecAccess_Access:
  54. return "Access";
  55. case SecAccess_Read:
  56. return "Read";
  57. case SecAccess_Write:
  58. return "Write";
  59. case SecAccess_Full:
  60. return "Full";
  61. case SecAccess_Unknown:
  62. default:
  63. return "Unknown";
  64. break;
  65. }
  66. }
  67. enum SecResourceType : int
  68. {
  69. RT_DEFAULT = 0,
  70. RT_MODULE = 1,
  71. RT_SERVICE = 2,
  72. RT_FILE_SCOPE = 3,
  73. RT_WORKUNIT_SCOPE = 4,
  74. RT_SUDOERS = 5,
  75. RT_TRIAL = 6,
  76. RT_VIEW_SCOPE = 7,
  77. RT_SCOPE_MAX = 8
  78. };
  79. const char* resTypeDesc(SecResourceType type);
  80. enum SecPermissionType : int
  81. {
  82. PT_DEFAULT = 0,
  83. PT_ADMINISTRATORS_ONLY = 1,
  84. PT_ADMINISTRATORS_AND_USER = 2 //excludes Authenticated users
  85. };
  86. #define DEFAULT_REQUIRED_ACCESS SecAccess_Read
  87. enum SecPasswordEncoding : int
  88. {
  89. SecPwEnc_unknown = 0,
  90. SecPwEnc_plain_text = 1,
  91. SecPwEnc_salt_sha1 = 2,
  92. SecPwEnc_salt_md5 = 3,
  93. SecPwEnc_Rijndael = 4,
  94. SecPwEnc_salt_accurint_md5 = 5
  95. };
  96. enum SecUserStatus : int
  97. {
  98. SecUserStatus_Inhouse = 0,
  99. SecUserStatus_Active = 1,
  100. SecUserStatus_Exempt = 2,
  101. SecUserStatus_FreeTrial = 3,
  102. SecUserStatus_csdemo = 4,
  103. SecUserStatus_Rollover = 5,
  104. SecUserStatus_Suspended = 6,
  105. SecUserStatus_Terminated = 7,
  106. SecUserStatus_TrialExpired = 8,
  107. SecUserStatus_Status_Hold = 9,
  108. SecUserStatus_Unknown = 10
  109. };
  110. const static int scPasswordExpired = -1;
  111. const static int scPasswordNeverExpires = -2;
  112. interface ISecCredentials : extends IInterface
  113. {
  114. virtual bool setPassword(const char * pw) = 0;
  115. virtual const char * getPassword() = 0;
  116. virtual void setSessionToken(unsigned token) = 0;
  117. virtual unsigned getSessionToken() = 0;
  118. virtual void setSignature(const char * signature) = 0;
  119. virtual const char * getSignature() = 0;
  120. virtual bool setPasswordExpiration(CDateTime & expirationDate) = 0;
  121. virtual CDateTime & getPasswordExpiration(CDateTime & expirationDate) = 0;
  122. virtual int getPasswordDaysRemaining() = 0;
  123. };
  124. //LDAP authentication status
  125. enum authStatus : int
  126. {
  127. AS_AUTHENTICATED = 0,
  128. AS_UNKNOWN = 1,//have not attempted to authenticate
  129. AS_UNEXPECTED_ERROR = 2,
  130. AS_INVALID_CREDENTIALS = 3,
  131. AS_PASSWORD_EXPIRED = 4,
  132. AS_PASSWORD_VALID_BUT_EXPIRED = 5//user entered valid password, but authentication failed because it is expired
  133. };
  134. class CDateTime;
  135. interface ISecUser : extends IInterface
  136. {
  137. virtual const char * getName() = 0;
  138. virtual bool setName(const char * name) = 0;
  139. virtual const char * getFullName() = 0;
  140. virtual bool setFullName(const char * name) = 0;
  141. virtual const char * getFirstName() = 0;
  142. virtual bool setFirstName(const char * fname) = 0;
  143. virtual const char * getLastName() = 0;
  144. virtual bool setLastName(const char * lname) = 0;
  145. virtual const char * getEmployeeID() = 0;
  146. virtual bool setEmployeeID(const char * emplID) = 0;
  147. virtual const char * getDistinguishedName() = 0;
  148. virtual bool setDistinguishedName(const char * dn) = 0;
  149. virtual const char * getRealm() = 0;
  150. virtual bool setRealm(const char * realm) = 0;
  151. virtual const char * getFqdn() = 0;
  152. virtual bool setFqdn(const char * Fqdn) = 0;
  153. virtual const char * getPeer() = 0;
  154. virtual bool setPeer(const char * Peer) = 0;
  155. virtual SecUserStatus getStatus() = 0;
  156. virtual bool setStatus(SecUserStatus Status) = 0;
  157. virtual authStatus getAuthenticateStatus() = 0;
  158. virtual void setAuthenticateStatus(authStatus status) = 0;
  159. virtual ISecCredentials & credentials() = 0;
  160. virtual unsigned getUserID() = 0;
  161. virtual void copyTo(ISecUser & destination) = 0;
  162. virtual CDateTime & getPasswordExpiration(CDateTime & expirationDate) = 0;
  163. virtual bool setPasswordExpiration(CDateTime & expirationDate) = 0;
  164. virtual int getPasswordDaysRemaining() = 0;
  165. virtual void setProperty(const char * name, const char * value) = 0;
  166. virtual const char * getProperty(const char * name) = 0;
  167. virtual void setPropertyInt(const char * name, int value) = 0;
  168. virtual int getPropertyInt(const char * name) = 0;
  169. virtual ISecUser * clone() = 0;
  170. };
  171. interface ISecAuthenticEvents : extends IInterface
  172. {
  173. virtual bool onAuthenticationSuccess(ISecUser & User) = 0;
  174. virtual bool onAuthenticationFailure(ISecUser & User, unsigned reason, const char * description) = 0;
  175. virtual bool onRealmRequired(ISecUser & User) = 0;
  176. virtual bool onPasswordRequired(ISecUser & User, void * salt, unsigned salt_len) = 0;
  177. virtual bool onTokenRequired(ISecUser & User, unsigned type, void * salt, unsigned salt_len) = 0;
  178. };
  179. interface ISecProperty : extends IInterface
  180. {
  181. virtual const char * getName() = 0;
  182. virtual const char * getValue() = 0;
  183. };
  184. interface ISecResource : extends ISecProperty
  185. {
  186. virtual void setAccessFlags(SecAccessFlags flags) = 0;
  187. virtual SecAccessFlags getAccessFlags() = 0;
  188. virtual void setRequiredAccessFlags(SecAccessFlags flags) = 0;
  189. virtual SecAccessFlags getRequiredAccessFlags() = 0;
  190. virtual int addParameter(const char * name, const char * value) = 0;
  191. virtual const char * getParameter(const char * name) = 0;
  192. virtual void setDescription(const char * description) = 0;
  193. virtual const char * getDescription() = 0;
  194. virtual ISecResource * clone() = 0;
  195. virtual void copy(ISecResource * from) = 0;
  196. virtual SecResourceType getResourceType() = 0;
  197. virtual void setResourceType(SecResourceType resourcetype) = 0;
  198. virtual StringBuffer & toString(StringBuffer & s) = 0;
  199. };
  200. interface ISecPropertyIterator : extends IIteratorOf<ISecProperty>
  201. {
  202. };
  203. interface ISecPropertyList : extends IInterface
  204. {
  205. virtual ISecPropertyIterator * getPropertyItr() = 0;
  206. virtual ISecProperty * findProperty(const char * name) = 0;
  207. };
  208. interface ISecResourceList : extends ISecPropertyList
  209. {
  210. virtual bool isAuthorizationComplete() = 0;
  211. virtual ISecResourceList * clone() = 0;
  212. virtual bool copyTo(ISecResourceList & destination) = 0;
  213. virtual void clear() = 0;
  214. virtual ISecResource * addResource(const char * name) = 0;
  215. virtual void addResource(ISecResource * resource) = 0;
  216. virtual bool addCustomResource(const char * name, const char * config) = 0;
  217. virtual ISecResource * getResource(const char * feature) = 0;
  218. virtual ISecResource * queryResource(unsigned seq) = 0;
  219. virtual int count() = 0;
  220. virtual const char * getName() = 0;
  221. virtual StringBuffer & toString(StringBuffer & s) = 0;
  222. };
  223. typedef IArrayOf<ISecUser> IUserArray;
  224. typedef IArrayOf<ISecResource> IResourceArray;
  225. typedef IArrayOf<ISecProperty> IPropertyArray;
  226. interface ISecUserIterator : extends IIteratorOf<ISecUser>
  227. {
  228. };
  229. interface IAuthMap : extends IInterface
  230. {
  231. virtual int add(const char * path, ISecResourceList * resourceList) = 0;
  232. virtual bool shouldAuth(const char * path) = 0;
  233. virtual ISecResourceList * queryResourceList(const char * path) = 0;
  234. virtual ISecResourceList * getResourceList(const char * path) = 0;
  235. };
  236. enum secManagerType : int
  237. {
  238. SMT_New,
  239. SMT_Default,
  240. SMT_Local,
  241. SMT_LDAP,
  242. SMT_HTPasswd,
  243. SMT_SingleUser,
  244. SMT_HTPluggable
  245. };
  246. interface IEspSecureContext;
  247. interface ISecManager : extends IInterface
  248. {
  249. virtual ISecUser * createUser(const char * user_name) = 0;
  250. virtual ISecResourceList * createResourceList(const char * rlname) = 0;
  251. virtual bool subscribe(ISecAuthenticEvents & events) = 0;
  252. virtual bool unsubscribe(ISecAuthenticEvents & events) = 0;
  253. virtual bool authorize(ISecUser & user, ISecResourceList * resources, IEspSecureContext* secureContext) = 0;
  254. virtual bool authorizeEx(SecResourceType rtype, ISecUser & user, ISecResourceList * resources, IEspSecureContext* secureContext = NULL) = 0;
  255. virtual SecAccessFlags authorizeEx(SecResourceType rtype, ISecUser & user, const char * resourcename, IEspSecureContext* secureContext = NULL) = 0;
  256. virtual SecAccessFlags getAccessFlagsEx(SecResourceType rtype, ISecUser & user, const char * resourcename) = 0;
  257. virtual SecAccessFlags authorizeFileScope(ISecUser & user, const char * filescope) = 0;
  258. virtual bool authorizeFileScope(ISecUser & user, ISecResourceList * resources) = 0;
  259. virtual bool addResources(ISecUser & user, ISecResourceList * resources) = 0;
  260. virtual bool addResourcesEx(SecResourceType rtype, ISecUser & user, ISecResourceList * resources, SecPermissionType ptype, const char * basedn) = 0;
  261. virtual bool addResourceEx(SecResourceType rtype, ISecUser & user, const char * resourcename, SecPermissionType ptype, const char * basedn) = 0;
  262. virtual bool getResources(SecResourceType rtype, const char * basedn, IResourceArray & resources) = 0;
  263. virtual bool updateResources(ISecUser & user, ISecResourceList * resources) = 0;
  264. virtual bool updateSettings(ISecUser & user, ISecPropertyList * resources, IEspSecureContext* secureContext) = 0;
  265. virtual bool addUser(ISecUser & user) = 0;
  266. virtual ISecUser * findUser(const char * username) = 0;
  267. virtual ISecUser * lookupUser(unsigned uid) = 0;
  268. virtual ISecUserIterator * getAllUsers() = 0;
  269. virtual void getAllGroups(StringArray & groups, StringArray & managedBy, StringArray & descriptions ) = 0;
  270. virtual bool updateUserPassword(ISecUser & user, const char * newPassword, const char* currPassword = 0) = 0;
  271. virtual bool initUser(ISecUser & user) = 0;
  272. virtual void setExtraParam(const char * name, const char * value) = 0;
  273. virtual IAuthMap * createAuthMap(IPropertyTree * authconfig) = 0;
  274. virtual IAuthMap * createFeatureMap(IPropertyTree * authconfig) = 0;
  275. virtual IAuthMap * createSettingMap(IPropertyTree * authconfig) = 0;
  276. virtual void deleteResource(SecResourceType rtype, const char * name, const char * basedn) = 0;
  277. virtual void renameResource(SecResourceType rtype, const char * oldname, const char * newname, const char * basedn) = 0;
  278. virtual void copyResource(SecResourceType rtype, const char * oldname, const char * newname, const char * basedn) = 0;
  279. virtual void cacheSwitch(SecResourceType rtype, bool on) = 0;
  280. virtual bool authTypeRequired(SecResourceType rtype) = 0;
  281. virtual SecAccessFlags authorizeWorkunitScope(ISecUser & user, const char * filescope) = 0;
  282. virtual bool authorizeWorkunitScope(ISecUser & user, ISecResourceList * resources) = 0;
  283. virtual const char * getDescription() = 0;
  284. virtual unsigned getPasswordExpirationWarningDays() = 0;
  285. virtual bool createUserScopes() = 0;
  286. virtual aindex_t getManagedFileScopes(IArrayOf<ISecResource>& scopes) = 0;
  287. virtual SecAccessFlags queryDefaultPermission(ISecUser& user) = 0;
  288. virtual bool clearPermissionsCache(ISecUser & user) = 0;
  289. virtual bool authenticateUser(ISecUser & user, bool * superUser) = 0;
  290. virtual secManagerType querySecMgrType() = 0;
  291. virtual const char* querySecMgrTypeName() = 0;
  292. virtual bool logoutUser(ISecUser & user) = 0;
  293. };
  294. interface IRestartHandler : extends IInterface
  295. {
  296. virtual void Restart() = 0;
  297. };
  298. interface IRestartManager : extends IInterface
  299. {
  300. virtual void setRestartHandler(IRestartHandler * pRestartHandler) = 0;
  301. };
  302. #endif