From baa9ce8c4cc73dffe8e1170153324dedc17d1570 Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: Mon, 4 Apr 2016 15:31:40 -0400 Subject: [PATCH] Ticket 48659 - Add support for root DSE searches Description: Add support for root DSE searches. Also updated the sphinx documentation https://fedorahosted.org/389/ticket/48659 Reviewed by: ? --- docs/_build/doctrees/environment.pickle | Bin 21742 -> 21886 bytes docs/_build/doctrees/rest389.doctree | Bin 112833 -> 120212 bytes docs/_build/doctrees/rest389.ui.doctree | Bin 11273 -> 10779 bytes docs/_build/html/genindex.html | 12 +++- docs/_build/html/objects.inv | Bin 766 -> 778 bytes docs/_build/html/rest389.html | 51 ++++++++++++----- docs/_build/html/rest389.ui.html | 8 +-- docs/_build/html/searchindex.js | 2 +- rest389/Authentication.py | 25 +++++++-- rest389/Helpers.py | 11 +++- rest389/LDAPOps.py | 94 +++++++++++++++++++++++++++++--- rest389/SchemaResource.py | 22 +++++++- rest389/__init__.py | 4 +- 13 files changed, 190 insertions(+), 39 deletions(-) diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 290efa96f0b02992c4bbd9c8cb66a5fa17a221d0..4eaf8bdc4018338efc6f7c9caff2982bc938b74c 100644 GIT binary patch literal 21886 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 literal 21742 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 diff --git a/docs/_build/doctrees/rest389.doctree b/docs/_build/doctrees/rest389.doctree index 1ea99731dc8e87ed22097ff38621509aea8cea6d..a84e866e8d6a7f250b0c361bca94bd36f2ebf14e 100644 GIT binary patch literal 120212 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 diff --git a/docs/_build/doctrees/rest389.ui.doctree b/docs/_build/doctrees/rest389.ui.doctree index 63eeeae66acd4eca5b6dc61c2605835a63296bf1..6bc2afc523c157d79333251f6e7d944d073081cf 100644 GIT binary patch literal 10779 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 diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index 0b7ecc7..a0217a8 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -366,16 +366,24 @@ -
search_rootdse() (in module rest389.LDAPOps)
-
search_SF() (in module rest389.LDAPOps) +
search_rootdse_attrs() (in module rest389.LDAPOps) +
+ + +
search_S() (in module rest389.LDAPOps)
+
search_SF() (in module rest389.LDAPOps) +
+ +
search_SFA() (in module rest389.LDAPOps)
diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv index 63783c04c3b1667d373e1862401627c297bc8924..51237fe1c598a8b8a869e9fc436fea7c11ac11ff 100644 GIT binary patch delta 636 zcmV-?0)zej1&RicnSU*UPi$HY9$>Zo_rnG&_2#5p{1#)r4>*Pcqy$D-0ndq4#SKLV zpvmGoDQ#(5shYk^es#aEYFnmYLe7bn!k}40Y3Gt14iMV5A6V5on4|kFe&90e>Eh$CjDj*JI}eSqUoI z@l;fi@tdSM)5C9uR&6R_uA!9*^YNv&k+{-wQWM^dyoxh5`5W)OEc&_*TeRuWgq7~UzxzW;{AHmJ?5>z;Ps_P zWQvp$|GB(7(0_e6JAl3%WUwZR?-N&!ntquTNFjIB%mCF2=GlYI?Q*wm{8pP~UNzcH zAmZIcgi=dVH51ZEJ zIk4#g&kuf?bssev7qyda7_gjAr{6}|gzeHCj`+xnIRey4=IM$p^E=Qv z$=vs=3|CO2pgb@}`-!vE8CjoDl?ZFTcWl=&2H8Kl?!0GUJqmJY6-4%7(8!z;sp4dH zcYG$S6m{LVnaw2QRQ&LuZ(f)pIiJWkTK#+vo4+IURpRqrLt~M-IBbFkVFkYD{z-}J zLeSL;j$NB-$z-5gayHibmHAU6kW2NI>{y?@;tz&NR9?!j4&>R1aFKliig^uwsMPxk W!2v-spgth8B0ovqX!tJ-#A#us<2%U! delta 624 zcmV-$0+0QQ2L1(*nSUdKPi$HY9$>Zo_rrjddP`C+ev2{Rci@{tK$s^R5{uIM%;8Y}sbxi;I|w$9#Xv!QQ3?^F#;5sVb!ECJ2Y@e-DtF@L~=@z62*`+DrWAge$n zJDzHe8WIZ&)Jk9WC(ssz49cEk@;$`NAgN7dQ2&N6b5cA?Qhu z$Q&sp{&NKnpnrdGZUUwqWV9xUHyhUuwWiEUq>w*qSAgmS3mn1fcD`A+Vb$iCS3&y) zM1q6nv_!4%d`FCcKcTVgM!zd!x$n{7+?TxLj3_Rm>f#?ZZ|rqs=mFpD!|M7CjrRi4 zI}vp+kEm>%;B#CfR>6u_34_Q>z`O*rUoMb@&!3WH{eO;2=T)ON>tdT?I#yzDD-=?l zoW{2_S)*xLJL-lB%jtCbZjw#7Ax+^(&%Br-LA_*}p}4lN zaOV2RpwEX&#DzDG^)kgE&86>q?+mPGLH3=3#4!vSxuZm?G+EOhUJ0v2|7<2R$ut$; zKj`lsOlgsvP86Cgv)<#@?+AUh@dek=SY(gwtLRBMLFlRbq{O!nbhnaY-%uSnndpw3 z&9%N||5AwLa{WPcXwH6M4~CPdytKc1kY^XdMfM3O<_(0QQomOSj!2RP^|6?hyQAcd Kz<&WbH9Zc4G(@lf diff --git a/docs/_build/html/rest389.html b/docs/_build/html/rest389.html index 53ec557..254d796 100644 --- a/docs/_build/html/rest389.html +++ b/docs/_build/html/rest389.html @@ -60,12 +60,14 @@
rest389.Authentication.authenticateConnection(f)
-
+

Authenticate the connection

+
rest389.Authentication.getConnection(binddn='', password='', saslmethod=None)
-
+

Get the DS connection object

+
@@ -101,17 +103,20 @@ pre-json representation(dict)

-
+

Return the link for a reaponse message

+
rest389.Helpers.jsonGetPatchOp(mod)
-
+

Parse the modify type

+
rest389.Helpers.jsonResponse(msg, status_code, link)
-
+

Return the json representation

+
@@ -175,7 +180,8 @@ DELETE - Delete index definition

rest389.LDAPOps.jsonReturnEntries(entries, link)
-
+

Return a JSON representation of ldap entries

+
@@ -239,6 +245,18 @@ DELETE = Delete JSON Rep (None)

Search it: Scope, Filter, Attrs (comma separated)

+
+
+rest389.LDAPOps.search_rootdse(ds)
+

Get the root DSE entry

+
+ +
+
+rest389.LDAPOps.search_rootdse_attrs(ds, attrs)
+

Get the root DSE entry with requested attributes

+
+

rest389.MonitorResource module

@@ -645,32 +663,38 @@ MatchingRules:
rest389.SchemaResource.schema_attribute(ds, attribute_name)
-
+

Get a particular attribute

+
rest389.SchemaResource.schema_attributes_list(ds)
-
+

Get all the attributes

+
rest389.SchemaResource.schema_matchingrule(ds, mr_name)
-
+

Get a particular matching rule

+
rest389.SchemaResource.schema_matchingrules(ds)
-
+

Get all the matching rules

+
rest389.SchemaResource.schema_objectclass(ds, objectclass_name)
-
+

Get a particular objectclass

+
rest389.SchemaResource.schema_objectclasses_list(ds)
-
+

Get all the objectclasses

+
@@ -713,7 +737,8 @@ MatchingRules:
rest389.apidoc()
-
+

Must be last so that we get all the api bits registered.

+
diff --git a/docs/_build/html/rest389.ui.html b/docs/_build/html/rest389.ui.html index bf31cdc..42cf7d4 100644 --- a/docs/_build/html/rest389.ui.html +++ b/docs/_build/html/rest389.ui.html @@ -45,22 +45,22 @@

rest389.ui.index module

-rest389.ui.index.perfmon(*args, **kwargs)
+rest389.ui.index.perfmon(ds)
-rest389.ui.index.suffix(*args, **kwargs)
+rest389.ui.index.suffix(ds, suffix)
-rest389.ui.index.suffixes(*args, **kwargs)
+rest389.ui.index.suffixes(ds)
-rest389.ui.index.welcome(*args, **kwargs)
+rest389.ui.index.welcome(ds)
diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index c88e62d..10e9c3d 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:46,filenames:["index","modules","rest389","rest389.ui"],objects:{"":{rest389:[2,0,0,"-"]},"rest389.Authentication":{authenticateConnection:[2,1,1,""],getConnection:[2,1,1,""],whoami:[2,1,1,""],wraps:[2,1,1,""]},"rest389.Helpers":{backendToSuffix:[2,1,1,""],getEntryRepByDN:[2,1,1,""],getSrchLink:[2,1,1,""],jsonGetPatchOp:[2,1,1,""],jsonResponse:[2,1,1,""],postEntryToRep:[2,1,1,""],suffixToBackend:[2,1,1,""]},"rest389.IndexResource":{attrIndexResource:[2,1,1,""],getBackendIndexes:[2,1,1,""],getIndexes:[2,1,1,""],index_api:[2,2,1,""],jsonReturnIndexes:[2,1,1,""]},"rest389.LDAPOps":{jsonReturnEntries:[2,1,1,""],ldap_api:[2,2,1,""],ldap_req:[2,1,1,""],search_S:[2,1,1,""],search_SF:[2,1,1,""],search_SFA:[2,1,1,""]},"rest389.MonitorResource":{monitor:[2,1,1,""],monitor_backend:[2,1,1,""],monitor_backends:[2,1,1,""]},"rest389.ReplicationResource":{changeLog:[2,1,1,""],decodeEntryBase64:[2,1,1,""],doReplAgmtPOST:[2,1,1,""],jsonReturnAgmtStatus:[2,1,1,""],jsonReturnChangelog:[2,1,1,""],jsonReturnReplAgmts:[2,1,1,""],jsonReturnReplicas:[2,1,1,""],replAgmt:[2,1,1,""],replAgmtStatus:[2,1,1,""],replAgmts:[2,1,1,""],replStatus:[2,1,1,""],replicationSuffix:[2,1,1,""],replicationSuffixes:[2,1,1,""]},"rest389.SchemaResource":{jsonAttrToStr:[2,1,1,""],jsonOCToStr:[2,1,1,""],schema_api:[2,2,1,""],schema_attribute:[2,1,1,""],schema_attributes_list:[2,1,1,""],schema_matchingrule:[2,1,1,""],schema_matchingrules:[2,1,1,""],schema_objectclass:[2,1,1,""],schema_objectclasses_list:[2,1,1,""]},"rest389.SuffixResource":{jsonReturnSuffixes:[2,1,1,""],suffixList:[2,1,1,""],suffixResource:[2,1,1,""],suffix_api:[2,2,1,""]},"rest389.ui":{"static":[3,0,0,"-"],index:[3,0,0,"-"]},"rest389.ui.index":{perfmon:[3,1,1,""],suffix:[3,1,1,""],suffixes:[3,1,1,""],welcome:[3,1,1,""]},"rest389.ui.static":{send_static:[3,1,1,""]},rest389:{Authentication:[2,0,0,"-"],Helpers:[2,0,0,"-"],IndexResource:[2,0,0,"-"],LDAPOps:[2,0,0,"-"],MonitorResource:[2,0,0,"-"],ReplicationResource:[2,0,0,"-"],SchemaResource:[2,0,0,"-"],SuffixResource:[2,0,0,"-"],apidoc:[2,1,1,""],ui:[3,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","data","Python data"]},objtypes:{"0":"py:module","1":"py:function","2":"py:data"},terms:{"20151109201336z":2,"20151109201346z":2,"abstract":2,"class":[],"default":2,"function":2,"int":2,"return":2,"static":[],"true":2,abc:2,action:2,add:2,advanc:[],agmt:2,agmt_dn:2,agreement:2,agrrement:2,all:2,anonym:2,apidoc:2,arg1:[],arg2:[],arg:3,argument:[],attr:2,attribut:2,attribute_nam:2,attrindexresourc:2,authenticateconnect:2,auxilari:2,avali:2,backend:2,backendtosuffix:2,base64:2,basedn:2,bind:2,binddn:2,blueprint:2,bound:2,brq:2,builtin:[],call:[],can:2,changelog:2,changelogcompactdbinterv:2,changelogdir:2,changelogencryptionalgorithm:2,changelogmaxag:2,changelogmaxconcurrentwrit:2,changelogmaxentri:2,changelogsymmetrickei:2,changelogtriminterv:2,classmethod:[],com:2,comma:2,concept:[],config:2,consum:2,consumer_host:2,consumer_port:2,content:[],control:2,convert:2,creat:2,current:2,data:2,declar:[],decod:2,decodeentrybase64:2,decor:2,def:[],definit:2,delet:2,deleteoldrdn:2,demot:2,desc:2,descript:2,detail:2,dict:2,directoryoper:2,disabl:2,distributedoper:2,doe:[],doreplagmtpost:2,dsaoper:2,either:[],enabl:2,eng:2,entir:2,entri:2,equal:2,error:2,everi:2,exampl:2,except:[],fals:2,filter:2,filter_str:2,first:[],flask:2,found:[],from:2,func:2,functool:2,gener:2,get:2,getadminport:[],getbackendindex:2,getconnect:2,getentryrepbydn:2,getindex:2,getsrchlink:2,gssapi:2,host:2,hub:2,idiom:[],idm:2,ignor:[],implicit:[],index:[],index_api:2,index_typ:2,indextyp:2,initi:2,instanc:[],interv:2,java:[],json:2,jsonattrtostr:2,jsongetpatchop:2,jsonoctostr:2,jsonrespons:2,jsonreturnagmtstatu:2,jsonreturnchangelog:2,jsonreturnentri:2,jsonreturnindex:2,jsonreturnreplagmt:2,jsonreturnreplica:2,jsonreturnsuffix:2,kind:2,kwarg:3,lab:2,ldap:2,ldap_api:2,ldap_req:2,link:2,list:2,mai:2,master:2,matchingrul:2,messag:2,method:[],mod:2,mod_typ:2,modifi:2,modrdn:2,modul:[],monitor:2,monitor_backend:2,more:[],mr_name:2,msg:2,must:2,name:2,newrdn:2,newrid:2,newrol:2,newsuperior:2,no_user_mod:2,none:2,object:2,objectclass:2,objectclass_nam:2,obsolet:2,off:2,oid:2,onli:2,oper:2,order:2,our:2,page:0,param:2,parent:2,particular:2,password:2,patch:2,path:[2,3],peopl:2,perfmon:3,perform:2,port:2,post:2,postentri:2,postentrytorep:2,pre:2,present:2,preserv:2,promot:2,put:2,python:[],read:2,receiv:[],redhat:2,referr:2,rep:2,replac:2,replagmt:2,replagmtstatu:2,replic:2,replica:2,replicaabortcleanruv:2,replicabackoffmax:2,replicabackoffmin:2,replicabeginrefresh:2,replicabindcredenti:2,replicabinddn:2,replicabinddngroup:2,replicabinddngroupcheckinterv:2,replicabindmethod:2,replicabusywaittim:2,replicachangecount:2,replicachangessentsincestartup:2,replicacleanruv:2,replicaconntimeout:2,replicaen:2,replicaflag:2,replicaflowcontrolpaus:2,replicaflowcontrolwindow:2,replicahost:2,replicaid:2,replicalastinitend:2,replicalastinitstart:2,replicalastinitstatu:2,replicalastupdateend:2,replicalastupdatestart:2,replicalastupdatestatu:2,replicalegacyconsum:2,replicamaxcsn:2,replicanam:2,replicaport:2,replicaprecisetombstonepurg:2,replicaprotocoltimeout:2,replicapurgedelai:2,replicareapact:2,replicareferr:2,replicarefresh:2,replicarol:2,replicaroot:2,replicaruv:2,replicaschedul:2,replicasessionpausetim:2,replicast:2,replicastatu:2,replicastripattr:2,replicatedattributelist:2,replicatedattributelisttot:2,replicationsuffix:2,replicatombstonepurgeinterv:2,replicatransportinfo:2,replicatyp:2,replicaupdateinprogress:2,replstatu:2,represent:2,resourc:2,respons:2,result_statu:2,rid:2,sasl:2,saslmethod:2,schema:2,schema_api:2,schema_attribut:2,schema_attributes_list:2,schema_matchingrul:2,schema_objectclass:2,schema_objectclasses_list:2,scope:2,sdfdf:2,search:[0,2],search_:2,search_sf:2,search_sfa:2,secret:2,see:[],send_stat:3,send_upd:2,separ:2,server:2,signatur:2,similar:[],simpl:2,single_valu:2,sphinx:2,start:2,state:2,staticmethod:[],statu:2,status_cod:2,status_text:2,string:2,structur:2,substr:2,suffix:[2,3],suffix_api:2,suffixlist:2,suffixtobackend:2,sup:2,superior:2,sync:2,syntax:2,systemindex:2,take:2,target:2,text:2,them:2,thi:2,those:[],turn:2,type:2,uid:2,under:2,undo:2,updat:2,url:2,usag:2,user:2,userappl:2,val:2,valu:2,were:2,whoami:2,window:2,windowsreplicasubtre:2,winsync:2,winsyncdirectoryfilt:2,winsyncdirectoryreplicasubtre:2,winsyncdirsynccooki:2,winsyncinterv:2,winsyncmoveact:2,winsyncnewwingroupsyncen:2,winsyncnewwinusersyncen:2,winsynconewaysync:2,winsyncsubtreepair:2,winsyncwindowsdomain:2,winsyncwindowsfilt:2,wrap:2,your:2},titles:["Welcome to 389 REST API’s documentation!","rest389","rest389 package","rest389.ui package"],titleterms:{"static":3,api:0,authent:2,content:[2,3],document:0,helper:2,index:3,indexresourc:2,indic:0,ldapop:2,modul:[2,3],monitorresourc:2,packag:[2,3],replicationresourc:2,rest389:[1,2,3],rest:0,schemaresourc:2,submodul:[2,3],subpackag:2,suffixresourc:2,tabl:0,welcom:0}}) \ No newline at end of file +Search.setIndex({envversion:46,filenames:["index","modules","rest389","rest389.ui"],objects:{"":{rest389:[2,0,0,"-"]},"rest389.Authentication":{authenticateConnection:[2,1,1,""],getConnection:[2,1,1,""],whoami:[2,1,1,""],wraps:[2,1,1,""]},"rest389.Helpers":{backendToSuffix:[2,1,1,""],getEntryRepByDN:[2,1,1,""],getSrchLink:[2,1,1,""],jsonGetPatchOp:[2,1,1,""],jsonResponse:[2,1,1,""],postEntryToRep:[2,1,1,""],suffixToBackend:[2,1,1,""]},"rest389.IndexResource":{attrIndexResource:[2,1,1,""],getBackendIndexes:[2,1,1,""],getIndexes:[2,1,1,""],index_api:[2,2,1,""],jsonReturnIndexes:[2,1,1,""]},"rest389.LDAPOps":{jsonReturnEntries:[2,1,1,""],ldap_api:[2,2,1,""],ldap_req:[2,1,1,""],search_S:[2,1,1,""],search_SF:[2,1,1,""],search_SFA:[2,1,1,""],search_rootdse:[2,1,1,""],search_rootdse_attrs:[2,1,1,""]},"rest389.MonitorResource":{monitor:[2,1,1,""],monitor_backend:[2,1,1,""],monitor_backends:[2,1,1,""]},"rest389.ReplicationResource":{changeLog:[2,1,1,""],decodeEntryBase64:[2,1,1,""],doReplAgmtPOST:[2,1,1,""],jsonReturnAgmtStatus:[2,1,1,""],jsonReturnChangelog:[2,1,1,""],jsonReturnReplAgmts:[2,1,1,""],jsonReturnReplicas:[2,1,1,""],replAgmt:[2,1,1,""],replAgmtStatus:[2,1,1,""],replAgmts:[2,1,1,""],replStatus:[2,1,1,""],replicationSuffix:[2,1,1,""],replicationSuffixes:[2,1,1,""]},"rest389.SchemaResource":{jsonAttrToStr:[2,1,1,""],jsonOCToStr:[2,1,1,""],schema_api:[2,2,1,""],schema_attribute:[2,1,1,""],schema_attributes_list:[2,1,1,""],schema_matchingrule:[2,1,1,""],schema_matchingrules:[2,1,1,""],schema_objectclass:[2,1,1,""],schema_objectclasses_list:[2,1,1,""]},"rest389.SuffixResource":{jsonReturnSuffixes:[2,1,1,""],suffixList:[2,1,1,""],suffixResource:[2,1,1,""],suffix_api:[2,2,1,""]},"rest389.ui":{"static":[3,0,0,"-"],index:[3,0,0,"-"]},"rest389.ui.index":{perfmon:[3,1,1,""],suffix:[3,1,1,""],suffixes:[3,1,1,""],welcome:[3,1,1,""]},"rest389.ui.static":{send_static:[3,1,1,""]},rest389:{Authentication:[2,0,0,"-"],Helpers:[2,0,0,"-"],IndexResource:[2,0,0,"-"],LDAPOps:[2,0,0,"-"],MonitorResource:[2,0,0,"-"],ReplicationResource:[2,0,0,"-"],SchemaResource:[2,0,0,"-"],SuffixResource:[2,0,0,"-"],apidoc:[2,1,1,""],ui:[3,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","data","Python data"]},objtypes:{"0":"py:module","1":"py:function","2":"py:data"},terms:{"20151109201336z":2,"20151109201346z":2,"abstract":2,"class":[],"default":2,"function":2,"int":2,"return":2,"static":[],"true":2,abc:2,action:2,add:2,advanc:[],agmt:2,agmt_dn:2,agreement:2,agrrement:2,all:2,anonym:2,apidoc:2,arg1:[],arg2:[],arg:[],argument:[],attr:2,attribut:2,attribute_nam:2,attrindexresourc:2,authenticateconnect:2,auxilari:2,avali:2,backend:2,backendtosuffix:2,base64:2,basedn:2,bind:2,binddn:2,bit:2,blueprint:2,bound:2,brq:2,builtin:[],call:[],can:2,changelog:2,changelogcompactdbinterv:2,changelogdir:2,changelogencryptionalgorithm:2,changelogmaxag:2,changelogmaxconcurrentwrit:2,changelogmaxentri:2,changelogsymmetrickei:2,changelogtriminterv:2,classmethod:[],com:2,comma:2,concept:[],config:2,connect:2,consum:2,consumer_host:2,consumer_port:2,content:[],control:2,convert:2,creat:2,current:2,data:2,declar:[],decod:2,decodeentrybase64:2,decor:2,def:[],definit:2,delet:2,deleteoldrdn:2,demot:2,desc:2,descript:2,detail:2,dict:2,directoryoper:2,disabl:2,distributedoper:2,doe:[],doreplagmtpost:2,dsaoper:2,dse:2,either:[],enabl:2,eng:2,entir:2,entri:2,equal:2,error:2,everi:2,exampl:2,except:[],fals:2,filter:2,filter_str:2,first:[],flask:2,found:[],from:2,func:2,functool:2,gener:2,get:2,getadminport:[],getbackendindex:2,getconnect:2,getentryrepbydn:2,getindex:2,getsrchlink:2,gssapi:2,host:2,hub:2,idiom:[],idm:2,ignor:[],implicit:[],index:[],index_api:2,index_typ:2,indextyp:2,initi:2,instanc:[],interv:2,java:[],json:2,jsonattrtostr:2,jsongetpatchop:2,jsonoctostr:2,jsonrespons:2,jsonreturnagmtstatu:2,jsonreturnchangelog:2,jsonreturnentri:2,jsonreturnindex:2,jsonreturnreplagmt:2,jsonreturnreplica:2,jsonreturnsuffix:2,kind:2,kwarg:[],lab:2,last:2,ldap:2,ldap_api:2,ldap_req:2,link:2,list:2,mai:2,master:2,match:2,matchingrul:2,messag:2,method:[],mod:2,mod_typ:2,modifi:2,modrdn:2,modul:[],monitor:2,monitor_backend:2,more:[],mr_name:2,msg:2,must:2,name:2,newrdn:2,newrid:2,newrol:2,newsuperior:2,no_user_mod:2,none:2,object:2,objectclass:2,objectclass_nam:2,obsolet:2,off:2,oid:2,onli:2,oper:2,order:2,our:2,page:0,param:2,parent:2,pars:2,particular:2,password:2,patch:2,path:[2,3],peopl:2,perfmon:3,perform:2,port:2,post:2,postentri:2,postentrytorep:2,pre:2,present:2,preserv:2,promot:2,put:2,python:[],read:2,reapons:2,receiv:[],redhat:2,referr:2,regist:2,rep:2,replac:2,replagmt:2,replagmtstatu:2,replic:2,replica:2,replicaabortcleanruv:2,replicabackoffmax:2,replicabackoffmin:2,replicabeginrefresh:2,replicabindcredenti:2,replicabinddn:2,replicabinddngroup:2,replicabinddngroupcheckinterv:2,replicabindmethod:2,replicabusywaittim:2,replicachangecount:2,replicachangessentsincestartup:2,replicacleanruv:2,replicaconntimeout:2,replicaen:2,replicaflag:2,replicaflowcontrolpaus:2,replicaflowcontrolwindow:2,replicahost:2,replicaid:2,replicalastinitend:2,replicalastinitstart:2,replicalastinitstatu:2,replicalastupdateend:2,replicalastupdatestart:2,replicalastupdatestatu:2,replicalegacyconsum:2,replicamaxcsn:2,replicanam:2,replicaport:2,replicaprecisetombstonepurg:2,replicaprotocoltimeout:2,replicapurgedelai:2,replicareapact:2,replicareferr:2,replicarefresh:2,replicarol:2,replicaroot:2,replicaruv:2,replicaschedul:2,replicasessionpausetim:2,replicast:2,replicastatu:2,replicastripattr:2,replicatedattributelist:2,replicatedattributelisttot:2,replicationsuffix:2,replicatombstonepurgeinterv:2,replicatransportinfo:2,replicatyp:2,replicaupdateinprogress:2,replstatu:2,represent:2,request:2,resourc:2,respons:2,result_statu:2,rid:2,root:2,rule:2,sasl:2,saslmethod:2,schema:2,schema_api:2,schema_attribut:2,schema_attributes_list:2,schema_matchingrul:2,schema_objectclass:2,schema_objectclasses_list:2,scope:2,sdfdf:2,search:[0,2],search_:2,search_rootds:2,search_rootdse_attr:2,search_sf:2,search_sfa:2,secret:2,see:[],send_stat:3,send_upd:2,separ:2,server:2,signatur:2,similar:[],simpl:2,single_valu:2,sphinx:2,start:2,state:2,staticmethod:[],statu:2,status_cod:2,status_text:2,string:2,structur:2,substr:2,suffix:[2,3],suffix_api:2,suffixlist:2,suffixtobackend:2,sup:2,superior:2,sync:2,syntax:2,systemindex:2,take:2,target:2,text:2,them:2,thi:2,those:[],turn:2,type:2,uid:2,under:2,undo:2,updat:2,url:2,usag:2,user:2,userappl:2,val:2,valu:2,were:2,whoami:2,window:2,windowsreplicasubtre:2,winsync:2,winsyncdirectoryfilt:2,winsyncdirectoryreplicasubtre:2,winsyncdirsynccooki:2,winsyncinterv:2,winsyncmoveact:2,winsyncnewwingroupsyncen:2,winsyncnewwinusersyncen:2,winsynconewaysync:2,winsyncsubtreepair:2,winsyncwindowsdomain:2,winsyncwindowsfilt:2,wrap:2,your:2},titles:["Welcome to 389 REST API’s documentation!","rest389","rest389 package","rest389.ui package"],titleterms:{"static":3,api:0,authent:2,content:[2,3],document:0,helper:2,index:3,indexresourc:2,indic:0,ldapop:2,modul:[2,3],monitorresourc:2,packag:[2,3],replicationresourc:2,rest389:[1,2,3],rest:0,schemaresourc:2,submodul:[2,3],subpackag:2,suffixresourc:2,tabl:0,welcom:0}}) \ No newline at end of file diff --git a/rest389/Authentication.py b/rest389/Authentication.py index f0bca0a..3c2712a 100644 --- a/rest389/Authentication.py +++ b/rest389/Authentication.py @@ -28,7 +28,9 @@ auth_api = Blueprint('auth_api', __name__) def getConnection(binddn='', password='', saslmethod=None): - + """ + Get the DS connection object + """ dir_srv_conn = DirSrv(verbose=False) headers = request.headers inst = {} @@ -64,6 +66,9 @@ def getConnection(binddn='', password='', saslmethod=None): def _negotiate_start(req): + """ + Start Negotiation + """ # We need a better way to specify the keytab. # configuration file perhaps .... # is there a way to determine the realm easily ... ? @@ -86,6 +91,9 @@ def _negotiate_start(req): def _negotiate_end(context): + """ + End Negotiation + """ # We still need to destroy the creds though if WE set them. # When we throw away the gss context, this memory cred is destroyed # but there is no way in python-gssapi to free gss_cred_id_t @@ -95,6 +103,9 @@ def _negotiate_end(context): def _connection(f, *args, **kwargs): + """ + Open a connection + """ retval = None auth = request.authorization negotiate = False @@ -159,8 +170,14 @@ def _connection(f, *args, **kwargs): # We can't do a callable / non-callable decorator due to flask magic. def authenticateConnection(f): + """ + Authenticate the connection + """ @wraps(f) def decorator(*args, **kwargs): + """ + Connection decorator + """ return _connection(f, *args, **kwargs) return decorator @@ -169,8 +186,8 @@ def authenticateConnection(f): @authenticateConnection def whoami(ds): """ -Returns the DN of the current user bound to the DS from your authentication -details, or will return "" for Anonymous bind. + Returns the DN of the current user bound to the DS from your authentication + details, or will return "" for Anonymous bind. """ if request.method == 'OPTIONS': # @@ -194,4 +211,4 @@ details, or will return "" for Anonymous bind. return jsonResponse(whoami, 200, request.url) except ldap.LDAPError as e: msg = 'Error: whoami failed (%s)' % str(e) - return jsonResponse(msg, 403, request.url) + return jsonResponse(msg, 403, request.url) \ No newline at end of file diff --git a/rest389/Helpers.py b/rest389/Helpers.py index e9d2adf..3bc83dc 100644 --- a/rest389/Helpers.py +++ b/rest389/Helpers.py @@ -5,7 +5,9 @@ import ldap def jsonResponse(msg, status_code, link): - # Return the json rep + """ + Return the json representation + """ count = 1 if isinstance(msg, list): count = len(msg) @@ -21,7 +23,9 @@ def jsonResponse(msg, status_code, link): def jsonGetPatchOp(mod): - # Parse the modify type + """ + Parse the modify type + """ if mod['op'] == 'remove': op = ldap.MOD_DELETE elif mod['op'] == 'add': @@ -55,6 +59,9 @@ def postEntryToRep(postentry): def getSrchLink(url, basedn, scope, filter_str): + """ + Return the link for a reaponse message + """ msg = '%sv1/ldap/%s/%s/%s' % (url, basedn, scope, filter_str) return msg diff --git a/rest389/LDAPOps.py b/rest389/LDAPOps.py index 208391d..0d6e7aa 100644 --- a/rest389/LDAPOps.py +++ b/rest389/LDAPOps.py @@ -1,6 +1,4 @@ import ldap -import urllib -import json from ldap.controls.readentry import PostReadControl from lib389._constants import * from lib389.properties import * @@ -50,6 +48,9 @@ pr = PostReadControl(criticality=True, attrList=['*']) def jsonReturnEntries(entries, link): + """ + Return a JSON representation of ldap entries + """ if not entries: return jsonResponse('No entries', 404, request.url) @@ -62,8 +63,8 @@ def jsonReturnEntries(entries, link): return jsonResponse(results, 200, link) -@ldap_api.route('/v1/ldap/', methods=['GET', 'PUT', 'PATCH', 'POST', - 'DELETE', 'OPTIONS', 'HEAD']) +@ldap_api.route('/v1/dit/', methods=['GET', 'PUT', 'PATCH', 'POST', + 'DELETE', 'OPTIONS', 'HEAD']) @authenticateConnection def ldap_req(ds, dn): """ @@ -263,7 +264,7 @@ def ldap_req(ds, dn): return jsonResponse(msg, 403, request.url) -@ldap_api.route('/v1/ldap//', methods=['GET', 'OPTIONS', 'HEAD']) +@ldap_api.route('/v1/dit//', methods=['GET', 'OPTIONS', 'HEAD']) @authenticateConnection def search_S(ds, dn, scope): """ @@ -297,9 +298,9 @@ def search_S(ds, dn, scope): return jsonResponse(msg, 404, request.url) -@ldap_api.route('/v1/ldap///', methods=['GET', - 'OPTIONS', - 'HEAD']) +@ldap_api.route('/v1/dit///', methods=['GET', + 'OPTIONS', + 'HEAD']) @authenticateConnection def search_SF(ds, dn, scope, filter_str): """ @@ -334,7 +335,7 @@ def search_SF(ds, dn, scope, filter_str): return jsonResponse(msg, 404, request.url) -@ldap_api.route('/v1/ldap////', +@ldap_api.route('/v1/dit////', methods=['GET', 'OPTIONS', 'HEAD']) @authenticateConnection def search_SFA(ds, dn, scope, filter_str, attrs): @@ -372,3 +373,78 @@ def search_SFA(ds, dn, scope, filter_str, attrs): except ldap.LDAPError as e: msg = ("Error: " + str(e)) return jsonResponse(msg, 404, request.url) + + +@ldap_api.route('/v1/dit/rootdse', + methods=['GET', 'OPTIONS', 'HEAD']) +@authenticateConnection +def search_rootdse(ds): + """ + Get the root DSE entry + """ + if request.method == 'OPTIONS': + # + # Return a list of the allowed methods + # + msg = {} + msg['allow'] = 'GET OPTIONS HEAD' + return jsonify(msg) + + try: + entries = ds.search_s("", ldap.SCOPE_BASE, "objectclass=top") + result = 200 + except ldap.LDAPError as e: + result = 404 + + if request.method == 'HEAD': + # + # Perform HEAD Request + # + return jsonResponse("", result, request.url) + + elif request.method == 'GET': + if result == 200: + return jsonReturnEntries(entries, request.url) + else: + msg = ("Error: " + str(e)) + return jsonResponse(msg, 404, request.url) + + +@ldap_api.route('/v1/dit/rootdse/', + methods=['GET', 'OPTIONS', 'HEAD']) +@authenticateConnection +def search_rootdse_attrs(ds, attrs): + """ + Get the root DSE entry with requested attributes + """ + if request.method == 'OPTIONS': + # + # Return a list of the allowed methods + # + msg = {} + msg['allow'] = 'GET OPTIONS HEAD' + return jsonify(msg) + + if request.method == 'HEAD': + # + # Perform HEAD Request + # + result = 200 + entries = [] + try: + entries = ds.search_s("", SCOPE[base], "objectclass=top") + except ldap.LDAPError as e: + result = 404 + return jsonResponse("", result, request.url) + + elif request.method == 'GET': + try: + alist = list(map(str, attrs.split(','))) + entries = ds.search_s("", + ldap.SCOPE_BASE, + "objectclass=top", + attrlist=alist) + return jsonReturnEntries(entries, request.url) + except ldap.LDAPError as e: + msg = ("Error: " + str(e)) + return jsonResponse(msg, 404, request.url) diff --git a/rest389/SchemaResource.py b/rest389/SchemaResource.py index 4609b5a..c9787ea 100644 --- a/rest389/SchemaResource.py +++ b/rest389/SchemaResource.py @@ -165,7 +165,9 @@ def jsonOCToStr(rep): methods=['GET', 'OPTIONS', 'HEAD']) @authenticateConnection def schema_attributes_list(ds): - + """ + Get all the attributes + """ if request.method == 'OPTIONS': # # Return a list of the allowed methods @@ -215,7 +217,9 @@ def schema_attributes_list(ds): methods=['GET', 'PUT', 'DELETE', 'OPTIONS', 'HEAD']) @authenticateConnection def schema_attribute(ds, attribute_name): - + """ + Get a particular attribute + """ if request.method == 'OPTIONS': # # Return a list of the allowed methods @@ -310,6 +314,9 @@ def schema_attribute(ds, attribute_name): methods=['GET', 'OPTIONS', 'HEAD']) @authenticateConnection def schema_objectclasses_list(ds): + """ + Get all the objectclasses + """ if request.method == 'OPTIONS': # # Return a list of the allowed methods @@ -351,10 +358,13 @@ def schema_objectclasses_list(ds): return jsonResponse(results, 200, request.url) -@schema_api.route('/v1/schema/objectclass/', +@schema_api.route('/v1/schema/objectclasses/', methods=['GET', 'PUT', 'DELETE', 'OPTIONS', 'HEAD']) @authenticateConnection def schema_objectclass(ds, objectclass_name): + """ + Get a particular objectclass + """ if request.method == 'OPTIONS': # # Return a list of the allowed methods @@ -445,6 +455,9 @@ def schema_objectclass(ds, objectclass_name): methods=['GET', 'OPTIONS', 'HEAD']) @authenticateConnection def schema_matchingrules(ds): + """ + Get all the matching rules + """ if request.method == 'OPTIONS': # # Return a list of the allowed methods @@ -484,6 +497,9 @@ def schema_matchingrules(ds): methods=['GET', 'OPTIONS', 'HEAD']) @authenticateConnection def schema_matchingrule(ds, mr_name): + """ + Get a particular matching rule + """ if request.method == 'OPTIONS': # # Return a list of the allowed methods diff --git a/rest389/__init__.py b/rest389/__init__.py index 955185f..734c1a4 100644 --- a/rest389/__init__.py +++ b/rest389/__init__.py @@ -30,7 +30,9 @@ rest389app.register_blueprint(static_ui) @rest389app.route('/apidoc') def apidoc(): - # Must be last so that we get all the api bits registered. + """ + Must be last so that we get all the api bits registered. + """ urls = dict([ (r.rule, { -- 2.4.3
search_S() (in module rest389.LDAPOps) +