Re: [Freeipa-users] user-custom script

2013-05-27 Thread Martin Kosek
On 05/27/2013 12:50 PM, Sigbjorn Lie wrote:
 Hi,
 
 A while back I got some help writing a python script who extends the user 
 classes in ipalib to run
 a custom command when a user is added/modified/deleted. This has been working 
 perfectly in our
 production environment for a few years now, until I upgraded to IPA 3.0 last 
 week. The custom
 script is no longer executed.
 
 Did the libraries change since 2.2?
 
 
 The script sits in 
 /usr/lib/python2.6/site-packages/ipalib/plugins/user-custom.py and looks like:
 
 
 #
 # Extension to provide user-customizable script when a user id 
 added/modified/deleted
 #
 
 from ipapython import ipautil
 
 # Extend add
 
 from ipalib.plugins.user import user_add
 
 def script_post_add_callback(inst, ldap, dn, attrs_list, *keys, **options):
  inst.log.info('User added')
  if 'ipa_user_script' in inst.api.env:
  try:
  ipautil.run([inst.api.env.ipa_user_script,add, dn])
  except:
   pass
 
  return dn
 
 user_add.register_post_callback(script_post_add_callback)
 
 
 # Extend delete
 
 from ipalib.plugins.user import user_del
 
 def script_post_del_callback(inst, ldap, dn, attrs_list, *keys, **options):
  inst.log.info('User deleted')
  if 'ipa_user_script' in inst.api.env:
  try:
  ipautil.run([inst.api.env.ipa_user_script,del, dn])
  except:
   pass
 
  return dn
 
 user_del.register_post_callback(script_post_del_callback)
 
 
 # Extend modify
 
 from ipalib.plugins.user import user_mod
 
 def script_post_mod_callback(inst, ldap, dn, attrs_list, *keys, **options):
  inst.log.info('User modified')
  if 'ipa_user_script' in inst.api.env:
  try:
  ipautil.run([inst.api.env.ipa_user_script,mod, dn])
  except:
   pass
 
  return dn
 
 user_mod.register_post_callback(script_post_mod_callback)
 

Hello Signbjorn,

There were changes related to callback registration in 3.0:
https://fedorahosted.org/freeipa/ticket/2674

Adding Petr Viktorin to CC to advise how to fix this issue.

Martin

___
Freeipa-users mailing list
Freeipa-users@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-users


Re: [Freeipa-users] user-custom script

2013-05-27 Thread Petr Viktorin

On 05/27/2013 12:50 PM, Sigbjorn Lie wrote:

Hi,

A while back I got some help writing a python script who extends the user 
classes in ipalib to run
a custom command when a user is added/modified/deleted. This has been working 
perfectly in our
production environment for a few years now, until I upgraded to IPA 3.0 last 
week. The custom
script is no longer executed.

Did the libraries change since 2.2?


Hello,
Yes, IPA did change, though not in the callback registration API. See 
comment below.





The script sits in 
/usr/lib/python2.6/site-packages/ipalib/plugins/user-custom.py and looks like:


#
# Extension to provide user-customizable script when a user id 
added/modified/deleted
#

from ipapython import ipautil

# Extend add

from ipalib.plugins.user import user_add

def script_post_add_callback(inst, ldap, dn, attrs_list, *keys, **options):
  inst.log.info('User added')
  if 'ipa_user_script' in inst.api.env:
  try:
  ipautil.run([inst.api.env.ipa_user_script,add, dn])
  except:
   pass


First of all, you can add better logging so you can diagnose errors more 
easily, e.g.:


 try:
 ipautil.run([inst.api.env.ipa_user_script,add, dn])
 except Exception, e:
 inst.log.error(ipa_user_script: Exception: %s, e)

With this change, I can see the following line in the server log:

ipa: ERROR: ipa_user_script: Exception: sequence item 2: expected string 
or Unicode, DN found


The error is due to DN refactoring 
(https://fedorahosted.org/freeipa/ticket/1670). All DNs throughout IPA 
are now represented by DN objects. To use them as strings you need to 
convert them explicitly:


 ipautil.run([inst.api.env.ipa_user_script, add, str(dn)])

The same change is needed in the other three cases.
The modified code should still work under IPA 2.2.
Let me know if you're having more trouble.


  return dn

user_add.register_post_callback(script_post_add_callback)


# Extend delete

from ipalib.plugins.user import user_del

def script_post_del_callback(inst, ldap, dn, attrs_list, *keys, **options):
  inst.log.info('User deleted')
  if 'ipa_user_script' in inst.api.env:
  try:
  ipautil.run([inst.api.env.ipa_user_script,del, dn])
  except:
   pass

  return dn

user_del.register_post_callback(script_post_del_callback)


# Extend modify

from ipalib.plugins.user import user_mod

def script_post_mod_callback(inst, ldap, dn, attrs_list, *keys, **options):
  inst.log.info('User modified')
  if 'ipa_user_script' in inst.api.env:
  try:
  ipautil.run([inst.api.env.ipa_user_script,mod, dn])
  except:
   pass

  return dn

user_mod.register_post_callback(script_post_mod_callback)






--
PetrĀ³

___
Freeipa-users mailing list
Freeipa-users@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-users