How to bring a jpeg in through and XML document on the publisher channel in Identity Manger

  • 7008932
  • 02-Jul-2011
  • 26-Apr-2012

Environment

Novell Identity Manager 3.6.1
Novell Identity Manager 4.0
Novell Identity Manager 4.0.1

Situation

I'm trying to use the scripting driver (Perl) to update the photo attribute for user objects but have run into a problem with adding it correctly.  eDir (and anything that uses the photo attribute) expects it to be a base64 encoded jpeg image which is easy to set manually or through and LDIF but usclh doesn't seem to like multiline values.  No matter how I try to feed it in only the first line is ever stored as the attribute, i.e.:

/opt/novell/usdrv/bin/usclh -t xds <<EOF
-t xds
<modify class-name="User">
 <association>20535</association>
 <modify-attr attr-name="photo">
   <remove-all-values/>
   <add-value>
     <value>"/99j/4AAQSkZJRgABAQEAYABgAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4p
LSwzOko+MzZGNywtQFdBRkxOUlNSMj5aYVpQYEpRUk//2wBDAQ4ODhMREyYVFSZPNS01T09PT09P
T09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0//wAARCADIAKEDASIA
..........
kMbYQhXRzMdqhaaeCQaQhazCC/HYZHGrcevddNxRfqFoQlRrHhHZpo9IT0baGyEIMHKQhCAP/9k="</value>
   </add-value>
 </modify-attr>
</modify>
EOF

I've tried with and without quotes, xds and normal, and nothing seems to work.  Is there anyway to properly escape newline characters or somehow get a multiline value into an attribute the usclh will support?
Tried stripping out newlines (which likely breaks the image as base64 has to be encoded with newlines every 57 bytes) and it usclh appears to work correctly in that case.

Resolution

One way, not using XDS format, is as follows:

<quote>
bogus@novellidm0:/opt/novell/usdrv/bin> sudo ./usclh -t modify -c User -a bob <<EOF
> ADD_photo=c2VsZ2FwMDE6L29wdC9ub3ZlbGwgIyBmaW5kIC4gLW5hbWUgKi5sb2cNCi4vc2xtL3Zhci9vcHQvbm92ZWxsL3NlbnRpbmVsX2xvZ19tZ3IvZGF0YS9yYXdkYXRhL29ubGluZS80OTIyNjIwMS1FRURFLTEwMkQtQTdCMS0wMDUwNTZCMjA4NUYvMjAxMS0wNi8wMS0xMTAwLmxvZw0KLi9zbG0vdmFyL29wdC9ub3ZlbGwvc2VudGluZWxfbG9nX21nci9kYXRhL3Jhd2RhdGEvb25saW5lL0YwNUE2NzAzLTdDOTQtMTAyRC05NUM3LTAwNTA1NkIyMDg1Ri8yMDExLTA2LzAxLTExMDAubG9nDQouL3NsbS92YXIvb3B0L25vdmVsbC9zZW50aW5lbF9sb2dfbWdyL2RhdGEvcmF3ZGF0YS9vbmxpbmUvMUE5MTU0MDYtQzQyNy0xMDJELUJFMTYtMDA1MDU2QjIwODVGLzIwMTEtMDYvMDEtMTEwMC5sb2cNCi4vc2xtL3Zhci9vcHQvbm92ZWxsL3NlbnRpbmVsX2xvZ19tZ3IvZGF0YS9yYXdkYXRhL29ubGluZS9FRjAxRjBGMS1FQjM3LTEwMkQtOEFDRi0wMDUwNTZCMjA4NUYvMjAxMS0wNi8wMS0xMTAwLmxvZw0KLi9zbG0vdmFyL29wdC9ub3ZlbGwvc2VudGluZWxfbG9nX21nci9kYXRhL3Jhd2RhdGEvb25saW5lLzQ5MjI2MjAxLUVFREUtMTAyRC1BNkM2LTAwNTA1NkIyMDg1Ri8yMDExLTA2LzAxLTExMDAubG9nDQouL3NsbS92YXIvb3B0L25vdmVsbC9zZW50aW5lbF9sb2dfbWdyL2RhdGEvcmF3ZGF0YS9vbmxpbmUvNjFEM0VCMTMtNEVBOC0xMDJELUI3MjctMDA1MDU2QjIwODVGLzIwMTEtMDYvMDEtMTEwMC5sb2cNCi4vc2xtL3Zhci9vcHQvbm92ZWxsL3NlbnRpbmVsX2xvZ19tZ3IvZGF0YS9yYXdkYXRhL29ubGluZS81MjM2Q0M5Mi03Q0Q5LTEwMkQtQjZBRi0wMDUwNTZCMjA4NUYvMjAxMS0wNi8wMS0xMTAwLmxvZw0KLi9zbG0vdmFyL29wdC9ub3ZlbGwvc2VudGluZWxfbG9nX21nci9kYXRhL3Jhd2RhdGEvb25saW5lL0YxRDlFQ0E0LTU1MzgtMTAyRC05MjA4LTAwNTA1NkIyMDg1Ri8yMDExLTA2LzAxLTExMDAubG9nDQouL3NsbS92YXIvb3B0L25vdmVsbC9zZW50aW5lbF9sb2dfbWdyL2RhdGEvcmF3ZGF0YS9vbmxpbmUvRjA1QTY3MDgtN0M5NC0xMDJELTgwMjYtMDA1MDU2QjIwODVGLzIwMTEtMDYvMDEtMTEwMC5sb2cNCi4vc2xtL3Zhci9vcHQvbm92ZWxsL3NlbnRpbmVsX2xvZ19tZ3IvZGF0YS9yYXdkYXRhL29ubGluZS85NEE4MzE3NC1DM0U0LTEwMkQtODUzNi0wMDUwNTZCMjA4NUYvMjAxMS0wNi8wMS0xMTAwLmxvZw0KLi9zbG0vdmFyL29wdC9ub3ZlbGwvc2VudGluZWxfbG9nX21nci9kYXRhL3Jhd2RhdGEvb25saW5lL0YwNUE2NzA4LTdDOTQtMTAyRC04QjhFLTAwNTA1NkIyMDg1Ri8yMDExLTA2LzAxLTExMDAubG9nDQouL3NsbS92YXIvb3B0L25vdmVsbC9zZW50aW5lbF9sb2dfbWdyL2RhdGEvcmF3ZGF0YS9vbmxpbmUvRjA1QTY3MDMtN0M5NC0xMDJELUEzRUItMDA1MDU2QjIwODVGLzIwMTEtMDYvMDEtMTEwMC5sb2cNCi4vc2xtL3Zhci9vcHQvbm92ZWxsL3NlbnRpbmVsX2xvZ19tZ3IvZGF0YS9yYXdkYXRhL29ubGluZS83MUZFOTM4OC01NTMwLTEwMkQtQkI2Ri0wMDUwNTZCMjA4NUYvMjAxMS0wNi8wMS0xMTAwLmxvZw0KLi9zbG0vdmFyL29wdC9ub3ZlbGwvc2VudGluZWxfbG9nX21nci9kYXRhL3Jhd2RhdGEvb25saW5lLzZGNERCRjMyLTdDOUYtMTAyRC1CODhCLTAwNTA1NkIyMDg1Ri8yMDExLTA2LzAxLTExMDAubG9nDQouL3NsbS92YXIvb3B0L25vdmVsbC9zZW50aW5lbF9sb2dfbWdyL2RhdGEvcmF3ZGF0YS9vbmxpbmUvNDkyMjYyMDEtRUVERS0xMDJELUE3QjktMDA1MDU2QjIwODVGLzIwMTEtMDYvMDEtMTEwMC5sb2cNCi4vc2xtL3Zhci9vcHQvbm92ZWxsL3NlbnRpbmVsX2xvZ19tZ3IvZGF0YS9yYXdkYXRhL29ubGluZS9GMDVBNjcwMy03Qzk0LTEwMkQtOUI1NC0wMDUwNTZCMjA4NUYvMjAxMS0wNi8wMS0xMTAwLmxvZw0KLi9zbG0vdmFyL29wdC9ub3ZlbGwvc2VudGluZWxfbG9nX21nci9kYXRhL3Jhd2RhdGEvb25saW5lLzQ5MjI2MjAxLUVFREUtMTAyRC1BNzMyLTAwNTA1NkIyMDg1Ri8yMDExLTA2LzAxLTExMDAubG9nDQouL3NsbS92YXIvb3B0L25vdmVsbC9zZW50aW5lbF9sb2dfbWdyL2RhdGEvcmF3ZGF0YS9vbmxpbmUvNDkyMjYyMDEtRUVERS0xMDJELUE3QTAtMDA1MDU2QjIwODVGLzIwMTEtMDYvMDEtMTEwMC5sb2cNCi4vc2xtL3Zhci9vcHQvbm92ZWxsL3NlbnRpbmVsX2xvZ19tZ3IvZGF0YS9yYXdkYXRhL29ubGluZS9GMDVBNjcwNC03Qzk0LTEwMkQtOTQxRC0wMDUwNTZCMjA4NUYvMjAxMS0wNi8wMS0xMTAwLmxvZw0KLi9zbG0vdmFyL29wdC9ub3ZlbGwvc2VudGluZWxfbG9nX21nci9kYXRhL3Jhd2RhdGEvb25saW5lLzQ5MjI2MjAxLUVFREUtMTAyRC1BMUI4LTAwNTA1NkIyMDg1Ri8yMDExLTA2LzAxLTExMDAubG9nDQouL3NsbS92YXIvb3B0L25vdmVsbC9zZW50aW5lbF9sb2dfbWdyL2RhdGEvcmF3ZGF0YS9vbmxpbmUvQ0MyNDZEQzAtNDk2QS0xMDJELUJBRkMtMDA1MDU2QjIwODVGLzIwMTEtMDYvMDEtMTEwMC5sb2cNCi4vc2xtL3Zhci9vcHQvbm92ZWxsL3NlbnRpbmVsX2xvZ19tZ3IvZGF0YS9yYXdkYXRhL29ubGluZS82NkE0MjM5MS04MzY4LTEwMkQtQTc1NC0wMDUwNTZCMjA4NUYvMjAxMS0wNi8wMS0xMTAwLmxvZw0KLi9zbG0vdmFyL29wdC9ub3ZlbGwvc2VudGluZWxfbG9nX21nci9kYXRhL3Jhd2RhdGEvb25saW5lLzYxRDNFQjE3LTRFQTgtMTAyRC05MUQ5LTAwNTA1NkIyMDg1Ri8yMDExLTA2LzAxLTExMDAubG9nDQouL3NsbS92YXIvb3B0L25vdmVsbC9zZW50aW5lbF9sb2dfbWdyL2RhdGEvcmF3ZGF0YS9vbmxpbmUvRjA1QTY3MDYtN0M5NC0xMDJELThGREMtMDA1MDU2QjIwODVGLzIwMTEtMDYvMDEtMTEwMC5sb2cNCi4vc2xtL3Zhci9vcHQvbm92ZWxsL3NlbnRpbmVsX2xvZ19tZ3IvZGF0YS9yYXdkYXRhL29ubGluZS80QjRERTVFNC1CMzg4LTEwMkQtOTY5
> EOF
</quote>

Another way of doing it is as follows.  It has the advantage of not relying on properly formatting XDS as input.  This also accepts multiple attributes at a time if desired.

<quote>
sudo cat /tmp/photo0.xds|sudo ./usclh -t xds
</quote>

The contents of the photo0.xds file follows.  Each line below is its own line, not a continuation of one long line:

<quote>

<nds dtdversion="4.0" ndsversion="8.x"><input>
<modify cached-time="20110622001203.890Z" class-name="User" event-id="idm2-a#20110622001203#2#1:771e281e-22ee-42a0-e085-1e281e77ee22" qualified-src-dn="dc=org\O=suse\OU=testscriptingperl00\CN=bob" src-dn="\IDM0TREE0\org\suse\testscriptingperl00\bob" src-entry-id="874626" timestamp="1308701523#1">
<association state="associated">bob</association>
<modify-attr attr-name="photo">
<add-value>
<value type="octet">c2V ... <value of picture> ... TEwMkQtOTY5</value>
</add-value>
</modify-attr>
</modify>
</input>
</nds>

</quote>