seclib.hpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  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. #ifdef _WIN32
  20. #ifndef SECLIB_EXPORTS
  21. #define SECLIB_API __declspec(dllimport)
  22. #else
  23. #define SECLIB_API __declspec(dllexport)
  24. #endif //SECLIB_EXPORTS
  25. #else
  26. #define SECLIB_API
  27. #endif //_WIN32
  28. #endif
  29. #define SECLIB "seclib"
  30. #define LDAPSECLIB "LdapSecurity"
  31. #define HTPASSWDSECLIB "htpasswdSecurity"
  32. enum NewSecAccessFlags
  33. {
  34. NewSecAccess_None = 0,
  35. NewSecAccess_Access = 1,
  36. NewSecAccess_Read = 2,
  37. NewSecAccess_Write = 4,
  38. NewSecAccess_Full = 255
  39. };
  40. enum SecAccessFlags
  41. {
  42. SecAccess_Unknown = -255,
  43. SecAccess_None = 0,
  44. SecAccess_Access = 1,
  45. SecAccess_Read = 3,
  46. SecAccess_Write = 7,
  47. SecAccess_Full = 255
  48. };
  49. enum SecResourceType
  50. {
  51. RT_DEFAULT = 0,
  52. RT_MODULE = 1,
  53. RT_SERVICE = 2,
  54. RT_FILE_SCOPE = 3,
  55. RT_WORKUNIT_SCOPE = 4,
  56. RT_SUDOERS = 5,
  57. RT_TRIAL = 6,
  58. RT_SCOPE_MAX = 7
  59. };
  60. const char* resTypeDesc(SecResourceType type);
  61. enum SecPermissionType
  62. {
  63. PT_DEFAULT = 0,
  64. PT_ADMINISTRATORS_ONLY = 1,
  65. PT_ADMINISTRATORS_AND_USER = 2 //excludes Authenticated users
  66. };
  67. #define DEFAULT_REQUIRED_ACCESS SecAccess_Read
  68. enum SecPasswordEncoding
  69. {
  70. SecPwEnc_unknown = 0,
  71. SecPwEnc_plain_text = 1,
  72. SecPwEnc_salt_sha1 = 2,
  73. SecPwEnc_salt_md5 = 3,
  74. SecPwEnc_Rijndael = 4,
  75. SecPwEnc_salt_accurint_md5 = 5
  76. };
  77. enum SecUserStatus
  78. {
  79. SecUserStatus_Inhouse = 0,
  80. SecUserStatus_Active = 1,
  81. SecUserStatus_Exempt = 2,
  82. SecUserStatus_FreeTrial = 3,
  83. SecUserStatus_csdemo = 4,
  84. SecUserStatus_Rollover = 5,
  85. SecUserStatus_Suspended = 6,
  86. SecUserStatus_Terminated = 7,
  87. SecUserStatus_TrialExpired = 8,
  88. SecUserStatus_Status_Hold = 9,
  89. SecUserStatus_Unknown = 10
  90. };
  91. const static int scPasswordExpired = -1;
  92. const static int scPasswordNeverExpires = -2;
  93. interface ISecCredentials : extends IInterface
  94. {
  95. virtual bool setPassword(const char * pw) = 0;
  96. virtual const char * getPassword() = 0;
  97. virtual bool addToken(unsigned type, void * data, unsigned length) = 0;
  98. virtual bool setPasswordExpiration(CDateTime & expirationDate) = 0;
  99. virtual CDateTime & getPasswordExpiration(CDateTime & expirationDate) = 0;
  100. virtual int getPasswordDaysRemaining() = 0;
  101. };
  102. //LDAP authentication status
  103. enum authStatus
  104. {
  105. AS_AUTHENTICATED = 0,
  106. AS_UNKNOWN = 1,//have not attempted to authenticate
  107. AS_UNEXPECTED_ERROR = 2,
  108. AS_INVALID_CREDENTIALS = 3,
  109. AS_PASSWORD_EXPIRED = 4,
  110. AS_PASSWORD_VALID_BUT_EXPIRED = 5//user entered valid password, but authentication failed because it is expired
  111. };
  112. class CDateTime;
  113. interface ISecUser : extends IInterface
  114. {
  115. virtual const char * getName() = 0;
  116. virtual bool setName(const char * name) = 0;
  117. virtual const char * getFullName() = 0;
  118. virtual bool setFullName(const char * name) = 0;
  119. virtual const char * getFirstName() = 0;
  120. virtual bool setFirstName(const char * fname) = 0;
  121. virtual const char * getLastName() = 0;
  122. virtual bool setLastName(const char * lname) = 0;
  123. virtual const char * getRealm() = 0;
  124. virtual bool setRealm(const char * realm) = 0;
  125. virtual const char * getFqdn() = 0;
  126. virtual bool setFqdn(const char * Fqdn) = 0;
  127. virtual const char * getPeer() = 0;
  128. virtual bool setPeer(const char * Peer) = 0;
  129. virtual SecUserStatus getStatus() = 0;
  130. virtual bool setStatus(SecUserStatus Status) = 0;
  131. virtual authStatus getAuthenticateStatus() = 0;
  132. virtual void setAuthenticateStatus(authStatus status) = 0;
  133. virtual ISecCredentials & credentials() = 0;
  134. virtual unsigned getUserID() = 0;
  135. virtual void copyTo(ISecUser & destination) = 0;
  136. virtual CDateTime & getPasswordExpiration(CDateTime & expirationDate) = 0;
  137. virtual bool setPasswordExpiration(CDateTime & expirationDate) = 0;
  138. virtual int getPasswordDaysRemaining() = 0;
  139. virtual void setProperty(const char * name, const char * value) = 0;
  140. virtual const char * getProperty(const char * name) = 0;
  141. virtual void setPropertyInt(const char * name, int value) = 0;
  142. virtual int getPropertyInt(const char * name) = 0;
  143. virtual ISecUser * clone() = 0;
  144. };
  145. interface ISecAuthenticEvents : extends IInterface
  146. {
  147. virtual bool onAuthenticationSuccess(ISecUser & User) = 0;
  148. virtual bool onAuthenticationFailure(ISecUser & User, unsigned reason, const char * description) = 0;
  149. virtual bool onRealmRequired(ISecUser & User) = 0;
  150. virtual bool onPasswordRequired(ISecUser & User, void * salt, unsigned salt_len) = 0;
  151. virtual bool onTokenRequired(ISecUser & User, unsigned type, void * salt, unsigned salt_len) = 0;
  152. };
  153. interface ISecProperty : extends IInterface
  154. {
  155. virtual const char * getName() = 0;
  156. virtual const char * getValue() = 0;
  157. };
  158. interface ISecResource : extends ISecProperty
  159. {
  160. virtual void setAccessFlags(int flags) = 0;
  161. virtual int getAccessFlags() = 0;
  162. virtual void setRequiredAccessFlags(int flags) = 0;
  163. virtual int getRequiredAccessFlags() = 0;
  164. virtual int addParameter(const char * name, const char * value) = 0;
  165. virtual const char * getParameter(const char * name) = 0;
  166. virtual void setDescription(const char * description) = 0;
  167. virtual const char * getDescription() = 0;
  168. virtual ISecResource * clone() = 0;
  169. virtual void copy(ISecResource * from) = 0;
  170. virtual SecResourceType getResourceType() = 0;
  171. virtual void setResourceType(SecResourceType resourcetype) = 0;
  172. virtual StringBuffer & toString(StringBuffer & s) = 0;
  173. };
  174. interface ISecPropertyIterator : extends IIteratorOf<ISecProperty>
  175. {
  176. };
  177. interface ISecPropertyList : extends IInterface
  178. {
  179. virtual ISecPropertyIterator * getPropertyItr() = 0;
  180. virtual ISecProperty * findProperty(const char * name) = 0;
  181. };
  182. interface ISecResourceList : extends ISecPropertyList
  183. {
  184. virtual bool isAuthorizationComplete() = 0;
  185. virtual ISecResourceList * clone() = 0;
  186. virtual bool copyTo(ISecResourceList & destination) = 0;
  187. virtual void clear() = 0;
  188. virtual ISecResource * addResource(const char * name) = 0;
  189. virtual void addResource(ISecResource * resource) = 0;
  190. virtual bool addCustomResource(const char * name, const char * config) = 0;
  191. virtual ISecResource * getResource(const char * feature) = 0;
  192. virtual ISecResource * queryResource(unsigned seq) = 0;
  193. virtual int count() = 0;
  194. virtual const char * getName() = 0;
  195. virtual StringBuffer & toString(StringBuffer & s) = 0;
  196. };
  197. typedef IArrayOf<ISecUser> IUserArray;
  198. typedef IArrayOf<ISecResource> IResourceArray;
  199. typedef IArrayOf<ISecProperty> IPropertyArray;
  200. interface ISecUserIterator : extends IIteratorOf<ISecUser>
  201. {
  202. };
  203. interface IAuthMap : extends IInterface
  204. {
  205. virtual int add(const char * path, ISecResourceList * resourceList) = 0;
  206. virtual bool shouldAuth(const char * path) = 0;
  207. virtual ISecResourceList * queryResourceList(const char * path) = 0;
  208. virtual ISecResourceList * getResourceList(const char * path) = 0;
  209. };
  210. enum secManagerType
  211. {
  212. SMT_New,
  213. SMT_Default,
  214. SMT_Local,
  215. SMT_LDAP,
  216. SMT_HTPasswd
  217. };
  218. interface ISecManager : extends IInterface
  219. {
  220. virtual ISecUser * createUser(const char * user_name) = 0;
  221. virtual ISecResourceList * createResourceList(const char * rlname) = 0;
  222. virtual bool subscribe(ISecAuthenticEvents & events) = 0;
  223. virtual bool unsubscribe(ISecAuthenticEvents & events) = 0;
  224. virtual bool authorize(ISecUser & user, ISecResourceList * resources) = 0;
  225. virtual bool authorizeEx(SecResourceType rtype, ISecUser & user, ISecResourceList * resources) = 0;
  226. virtual int authorizeEx(SecResourceType rtype, ISecUser & user, const char * resourcename) = 0;
  227. virtual int getAccessFlagsEx(SecResourceType rtype, ISecUser & user, const char * resourcename) = 0;
  228. virtual int authorizeFileScope(ISecUser & user, const char * filescope) = 0;
  229. virtual bool authorizeFileScope(ISecUser & user, ISecResourceList * resources) = 0;
  230. virtual bool addResources(ISecUser & user, ISecResourceList * resources) = 0;
  231. virtual bool addResourcesEx(SecResourceType rtype, ISecUser & user, ISecResourceList * resources, SecPermissionType ptype, const char * basedn) = 0;
  232. virtual bool addResourceEx(SecResourceType rtype, ISecUser & user, const char * resourcename, SecPermissionType ptype, const char * basedn) = 0;
  233. virtual bool getResources(SecResourceType rtype, const char * basedn, IResourceArray & resources) = 0;
  234. virtual bool updateResources(ISecUser & user, ISecResourceList * resources) = 0;
  235. virtual bool updateSettings(ISecUser & user, ISecPropertyList * resources) = 0;
  236. virtual bool addUser(ISecUser & user) = 0;
  237. virtual ISecUser * findUser(const char * username) = 0;
  238. virtual ISecUser * lookupUser(unsigned uid) = 0;
  239. virtual ISecUserIterator * getAllUsers() = 0;
  240. virtual void getAllGroups(StringArray & groups, StringArray & managedBy, StringArray & descriptions ) = 0;
  241. virtual bool updateUserPassword(ISecUser & user, const char * newPassword, const char* currPassword = 0) = 0;
  242. virtual bool initUser(ISecUser & user) = 0;
  243. virtual void setExtraParam(const char * name, const char * value) = 0;
  244. virtual IAuthMap * createAuthMap(IPropertyTree * authconfig) = 0;
  245. virtual IAuthMap * createFeatureMap(IPropertyTree * authconfig) = 0;
  246. virtual IAuthMap * createSettingMap(IPropertyTree * authconfig) = 0;
  247. virtual void deleteResource(SecResourceType rtype, const char * name, const char * basedn) = 0;
  248. virtual void renameResource(SecResourceType rtype, const char * oldname, const char * newname, const char * basedn) = 0;
  249. virtual void copyResource(SecResourceType rtype, const char * oldname, const char * newname, const char * basedn) = 0;
  250. virtual void cacheSwitch(SecResourceType rtype, bool on) = 0;
  251. virtual bool authTypeRequired(SecResourceType rtype) = 0;
  252. virtual int authorizeWorkunitScope(ISecUser & user, const char * filescope) = 0;
  253. virtual bool authorizeWorkunitScope(ISecUser & user, ISecResourceList * resources) = 0;
  254. virtual const char * getDescription() = 0;
  255. virtual unsigned getPasswordExpirationWarningDays() = 0;
  256. virtual bool createUserScopes() = 0;
  257. virtual aindex_t getManagedFileScopes(IArrayOf<ISecResource>& scopes) = 0;
  258. virtual int queryDefaultPermission(ISecUser& user) = 0;
  259. virtual bool clearPermissionsCache(ISecUser & user) = 0;
  260. virtual bool authenticateUser(ISecUser & user, bool &superUser) = 0;
  261. virtual secManagerType querySecMgrType() = 0;
  262. virtual const char* querySecMgrTypeName() = 0;
  263. };
  264. interface IRestartHandler : extends IInterface
  265. {
  266. virtual void Restart() = 0;
  267. };
  268. interface IRestartManager : extends IInterface
  269. {
  270. virtual void setRestartHandler(IRestartHandler * pRestartHandler) = 0;
  271. };
  272. extern "C" SECLIB_API ISecManager *createSecManager(const char *model_name, const char *serviceName, IPropertyTree &config);
  273. extern "C" SECLIB_API IAuthMap *createDefaultAuthMap(IPropertyTree* config);
  274. #endif