gss-1.0.2/0000755000000000000000000000000011663555057007272 500000000000000gss-1.0.2/ABOUT-NLS0000644000000000000000000026713311663554672010457 000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. 1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. Installers may use special options at configuration time for changing the default behaviour. The command: ./configure --disable-nls will _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl' library and will decide to use it. If not, you may have to to use the `--with-libintl-prefix' option to tell `configure' where to look for it. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.2 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.4 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of June 2010. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca +--------------------------------------------------+ a2ps | [] [] | aegis | | ant-phone | | anubis | | aspell | [] [] | bash | | bfd | | bibshelf | [] | binutils | | bison | | bison-runtime | [] | bluez-pin | [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | | dfarc | | dialog | [] [] | dico | | diffutils | [] | dink | | doodle | | e2fsprogs | [] | enscript | [] | exif | | fetchmail | [] | findutils | [] | flex | [] | freedink | | gas | | gawk | [] [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] [] | gettext-tools | [] [] | gip | [] | gjay | | gliv | [] | glunarclock | [] [] | gnubiff | | gnucash | [] | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | | gold | | gpe-aerial | | gpe-beam | | gpe-bluetooth | | gpe-calendar | | gpe-clock | [] | gpe-conf | | gpe-contacts | | gpe-edit | | gpe-filemanager | | gpe-go | | gpe-login | | gpe-ownerinfo | [] | gpe-package | | gpe-sketchbook | | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | [] [] | gsasl | | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] [] [] | gtick | | gtkam | [] | gtkorphan | [] | gtkspell | [] [] [] | gutenprint | | hello | [] | help2man | | hylafax | | idutils | | indent | [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | | iso_639 | [] [] [] [] | iso_639_3 | | jwhois | | kbd | | keytouch | [] | keytouch-editor | | keytouch-keyboa... | [] | klavaro | [] | latrine | | ld | [] | leafpad | [] [] | libc | [] [] | libexif | () | libextractor | | libgnutls | | libgpewidget | | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | [] | libidn | | lifelines | | liferea | [] [] | lilypond | | linkdr | [] | lordsawar | | lprng | | lynx | [] | m4 | | mailfromd | | mailutils | | make | | man-db | | man-db-manpages | | minicom | | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | | psmisc | | pspp | [] | pwdutils | | radius | [] | recode | [] [] | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] [] | sed | [] [] | sharutils | [] [] | shishi | | skencil | | solfege | | solfege-manual | | soundtracker | | sp | | sysstat | | tar | [] | texinfo | | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] [] | wyslij-po | | xchat | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] | +--------------------------------------------------+ af am an ar as ast az be be@latin bg bn_IN bs ca 6 0 1 2 3 19 1 10 3 28 3 1 38 crh cs da de el en en_GB en_ZA eo es et eu fa +-------------------------------------------------+ a2ps | [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] () | anubis | [] [] | aspell | [] [] [] [] [] | bash | [] [] [] | bfd | [] | bibshelf | [] [] [] | binutils | [] | bison | [] [] | bison-runtime | [] [] [] [] | bluez-pin | [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] [] [] | cflow | [] [] | clisp | [] [] [] [] | coreutils | [] [] [] [] | cpio | | cppi | | cpplib | [] [] [] | cryptsetup | [] | dfarc | [] [] [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] | dink | [] [] [] | doodle | [] | e2fsprogs | [] [] [] | enscript | [] [] [] | exif | () [] [] | fetchmail | [] [] () [] [] [] | findutils | [] [] [] | flex | [] [] | freedink | [] [] [] | gas | [] | gawk | [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] [] | gip | [] [] [] [] | gjay | [] | gliv | [] [] [] | glunarclock | [] [] | gnubiff | () | gnucash | [] () () () () | gnuedu | [] [] | gnulib | [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] | gpe-aerial | [] [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] [] [] | gpe-edit | [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] () [] [] [] | gprof | [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] | grub | [] [] | gsasl | [] | gss | | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] () [] | gtkam | [] [] () [] [] | gtkorphan | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] [] [] | hello | [] [] [] [] | help2man | [] | hylafax | [] [] | idutils | [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] [] [] [] () [] [] [] () | iso_3166_2 | () | iso_4217 | [] [] [] () [] [] | iso_639 | [] [] [] [] () [] [] | iso_639_3 | [] | jwhois | [] | kbd | [] [] [] [] [] | keytouch | [] [] | keytouch-editor | [] [] | keytouch-keyboa... | [] | klavaro | [] [] [] [] | latrine | [] () | ld | [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | [] [] | libgphoto2 | [] () | libgphoto2_port | [] () [] | libgsasl | | libiconv | [] [] [] [] [] | libidn | [] [] [] | lifelines | [] () | liferea | [] [] [] [] [] | lilypond | [] [] [] | linkdr | [] [] [] | lordsawar | [] | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] [] | man-db | | man-db-manpages | | minicom | [] [] [] [] | mkisofs | | myserver | | nano | [] [] [] | opcodes | [] [] | parted | [] [] | pies | | popt | [] [] [] [] [] | psmisc | [] [] [] | pspp | [] | pwdutils | [] | radius | [] | recode | [] [] [] [] [] [] | rosegarden | () () () | rpm | [] [] [] | rush | | sarg | | screem | | scrollkeeper | [] [] [] [] [] | sed | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | | skencil | [] () [] | solfege | [] [] [] | solfege-manual | [] [] | soundtracker | [] [] [] | sp | [] | sysstat | [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] | tin | [] [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] | vice | () () | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] | wyslij-po | | xchat | [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ crh cs da de el en en_GB en_ZA eo es et eu fa 5 64 105 117 18 1 8 0 28 89 18 19 0 fi fr ga gl gu he hi hr hu hy id is it ja ka kn +----------------------------------------------------+ a2ps | [] [] [] [] | aegis | [] [] | ant-phone | [] [] | anubis | [] [] [] [] | aspell | [] [] [] [] | bash | [] [] [] [] | bfd | [] [] [] | bibshelf | [] [] [] [] [] | binutils | [] [] [] | bison | [] [] [] [] | bison-runtime | [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] | cflow | [] [] [] | clisp | [] | coreutils | [] [] [] [] [] | cpio | [] [] [] [] | cppi | [] [] | cpplib | [] [] [] | cryptsetup | [] [] [] | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] [] [] | dink | [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] | freedink | [] [] [] | gas | [] [] | gawk | [] [] [] [] () [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] [] [] | gjay | [] | gliv | [] () | glunarclock | [] [] [] [] | gnubiff | () [] () | gnucash | () () () () () [] | gnuedu | [] [] | gnulib | [] [] [] [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] [] | gpe-aerial | [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] [] [] | gpe-calendar | [] [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] [] | grub | [] [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] | gtkorphan | [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] | gutenprint | [] [] [] [] | hello | [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | () [] [] [] | iso_4217 | [] () [] [] [] [] | iso_639 | [] () [] [] [] [] [] [] [] | iso_639_3 | () [] [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] [] [] [] | keytouch-editor | [] [] [] [] [] | keytouch-keyboa... | [] [] [] [] [] | klavaro | [] [] | latrine | [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] () | libc | [] [] [] [] [] | libexif | [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] [] | libidn | [] [] [] [] | lifelines | () | liferea | [] [] [] [] | lilypond | [] [] | linkdr | [] [] [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] [] | man-db | [] [] | man-db-manpages | [] | minicom | [] [] [] [] [] | mkisofs | [] [] [] [] | myserver | | nano | [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] [] | pies | | popt | [] [] [] [] [] [] [] [] [] | psmisc | [] [] [] | pspp | | pwdutils | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () () () () | rpm | [] [] | rush | | sarg | [] | screem | [] [] | scrollkeeper | [] [] [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] | shishi | [] | skencil | [] | solfege | [] [] [] [] | solfege-manual | [] [] | soundtracker | [] [] | sp | [] () | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux-ng | [] [] [] [] [] [] | vice | () () () | vmm | [] | vorbis-tools | [] | wastesedge | () () | wdiff | [] | wget | [] [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] | +----------------------------------------------------+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne +-----------------------------------------------+ a2ps | [] | aegis | | ant-phone | | anubis | [] [] | aspell | [] | bash | | bfd | | bibshelf | [] [] | binutils | | bison | [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] | cpio | | cppi | | cpplib | | cryptsetup | | dfarc | [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] | dink | | doodle | | e2fsprogs | | enscript | | exif | [] | fetchmail | | findutils | | flex | | freedink | [] | gas | | gawk | | gcal | | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] | gettext-tools | [] | gip | [] [] | gjay | | gliv | | glunarclock | [] | gnubiff | | gnucash | () () () () | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | [] | gold | | gpe-aerial | [] | gpe-beam | [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] | gpe-timesheet | [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | | gsasl | | gss | | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | | gtick | | gtkam | [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | | hello | [] [] [] | help2man | | hylafax | | idutils | | indent | | iso_15924 | [] [] | iso_3166 | [] [] () [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] | iso_639 | [] [] | iso_639_3 | [] | jwhois | [] | kbd | | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | klavaro | [] | latrine | [] | ld | | leafpad | [] [] [] | libc | [] | libexif | | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | | libidn | | lifelines | | liferea | | lilypond | | linkdr | | lordsawar | | lprng | | lynx | | m4 | | mailfromd | | mailutils | | make | [] | man-db | | man-db-manpages | | minicom | [] | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | [] [] [] | psmisc | | pspp | | pwdutils | | radius | | recode | | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] | sed | | sharutils | | shishi | | skencil | | solfege | [] | solfege-manual | | soundtracker | | sp | | sysstat | [] | tar | [] | texinfo | [] | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] | wyslij-po | | xchat | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +-----------------------------------------------+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +---------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] () | buzztard | [] [] | cflow | [] | clisp | [] [] | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] | cryptsetup | [] | dfarc | [] | dialog | [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] [] | dink | () | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | exif | [] [] [] () [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] | gas | | gawk | [] [] [] [] | gcal | | gcc | [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | [] () | gnucash | [] () () () | gnuedu | [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gnutls | [] [] | gold | | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] | gphoto2 | [] [] [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | gutenprint | [] [] | hello | [] [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] [] [] [] | iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] [] | klavaro | [] [] | latrine | [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] | libgphoto2_port | [] [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] | lifelines | [] [] | liferea | [] [] [] [] [] () () [] | lilypond | [] | linkdr | [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | pies | [] | popt | [] [] [] [] | psmisc | [] [] [] | pspp | [] [] | pwdutils | [] | radius | [] [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () | rpm | [] [] [] | rush | [] [] | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] [] [] [] | solfege-manual | [] [] [] | soundtracker | [] | sp | | sysstat | [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | [] | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW +---------------------------------------------------+ a2ps | [] [] [] [] [] | 27 aegis | [] | 9 ant-phone | [] [] [] [] | 9 anubis | [] [] [] [] | 15 aspell | [] [] [] | 20 bash | [] [] [] | 12 bfd | [] | 6 bibshelf | [] [] [] | 16 binutils | [] [] | 8 bison | [] [] | 12 bison-runtime | [] [] [] [] [] [] | 29 bluez-pin | [] [] [] [] [] [] [] [] | 37 bombono-dvd | [] | 4 buzztard | [] | 7 cflow | [] [] [] | 9 clisp | | 10 coreutils | [] [] [] [] | 22 cpio | [] [] [] [] [] [] | 13 cppi | [] [] | 5 cpplib | [] [] [] [] [] [] | 14 cryptsetup | [] [] | 7 dfarc | [] | 9 dialog | [] [] [] [] [] [] [] | 30 dico | [] | 2 diffutils | [] [] [] [] [] [] | 30 dink | | 4 doodle | [] [] | 7 e2fsprogs | [] [] [] | 11 enscript | [] [] [] [] | 17 exif | [] [] [] | 16 fetchmail | [] [] [] | 17 findutils | [] [] [] [] [] | 20 flex | [] [] [] [] | 15 freedink | [] | 10 gas | [] | 4 gawk | [] [] [] [] | 18 gcal | [] [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] [] | 34 gettext-runtime | [] [] [] [] [] [] [] | 29 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () [] () | 10 gnuedu | [] [] | 7 gnulib | [] [] [] [] | 16 gnunet | [] | 1 gnunet-gtk | [] [] [] | 5 gnutls | [] [] [] | 10 gold | [] | 4 gpe-aerial | [] [] [] | 18 gpe-beam | [] [] [] | 19 gpe-bluetooth | [] [] [] | 13 gpe-calendar | [] [] [] [] | 12 gpe-clock | [] [] [] [] [] | 28 gpe-conf | [] [] [] [] | 20 gpe-contacts | [] [] [] | 17 gpe-edit | [] [] [] | 12 gpe-filemanager | [] [] [] [] | 16 gpe-go | [] [] [] [] [] | 25 gpe-login | [] [] [] | 11 gpe-ownerinfo | [] [] [] [] [] | 25 gpe-package | [] [] [] | 13 gpe-sketchbook | [] [] [] | 20 gpe-su | [] [] [] [] [] | 30 gpe-taskmanager | [] [] [] [] [] | 29 gpe-timesheet | [] [] [] [] [] | 25 gpe-today | [] [] [] [] [] [] | 30 gpe-todo | [] [] [] [] | 17 gphoto2 | [] [] [] [] [] | 24 gprof | [] [] [] | 15 gpsdrive | [] [] [] | 11 gramadoir | [] [] [] | 11 grep | [] [] [] | 10 grub | [] [] [] | 14 gsasl | [] [] [] [] | 14 gss | [] [] [] | 11 gst-plugins-bad | [] [] [] [] | 26 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] | 24 gst-plugins-ugly | [] [] [] [] [] | 29 gstreamer | [] [] [] [] | 22 gtick | [] [] [] | 13 gtkam | [] [] [] | 20 gtkorphan | [] [] [] | 14 gtkspell | [] [] [] [] [] [] [] [] [] | 45 gutenprint | [] | 10 hello | [] [] [] [] [] [] | 21 help2man | [] [] | 7 hylafax | [] | 5 idutils | [] [] [] [] | 17 indent | [] [] [] [] [] [] | 30 iso_15924 | () [] () [] [] | 16 iso_3166 | [] [] () [] [] () [] [] [] () | 53 iso_3166_2 | () [] () [] | 9 iso_4217 | [] () [] [] () [] [] | 26 iso_639 | [] [] [] () [] () [] [] [] [] | 38 iso_639_3 | [] () | 8 jwhois | [] [] [] [] [] | 16 kbd | [] [] [] [] [] | 15 keytouch | [] [] [] | 16 keytouch-editor | [] [] [] | 14 keytouch-keyboa... | [] [] [] | 14 klavaro | [] | 11 latrine | [] [] [] | 10 ld | [] [] [] [] | 11 leafpad | [] [] [] [] [] [] | 33 libc | [] [] [] [] [] | 21 libexif | [] () | 7 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 14 libgsasl | [] [] [] | 13 libiconv | [] [] [] [] | 21 libidn | () [] [] | 11 lifelines | [] | 4 liferea | [] [] [] | 21 lilypond | [] | 7 linkdr | [] [] [] [] [] | 17 lordsawar | | 1 lprng | [] | 3 lynx | [] [] [] [] | 17 m4 | [] [] [] [] | 19 mailfromd | [] [] | 3 mailutils | [] | 5 make | [] [] [] [] | 21 man-db | [] [] [] | 8 man-db-manpages | | 4 minicom | [] [] | 16 mkisofs | [] [] | 9 myserver | | 0 nano | [] [] [] [] | 21 opcodes | [] [] [] | 11 parted | [] [] [] [] [] | 15 pies | [] [] | 3 popt | [] [] [] [] [] [] | 27 psmisc | [] [] | 11 pspp | | 4 pwdutils | [] [] | 6 radius | [] [] | 9 recode | [] [] [] [] | 28 rosegarden | () | 0 rpm | [] [] [] | 11 rush | [] [] | 4 sarg | | 1 screem | [] | 3 scrollkeeper | [] [] [] [] [] | 27 sed | [] [] [] [] [] | 30 sharutils | [] [] [] [] [] | 22 shishi | [] | 3 skencil | [] [] | 7 solfege | [] [] [] [] | 16 solfege-manual | [] | 8 soundtracker | [] [] [] | 9 sp | [] | 3 sysstat | [] [] | 15 tar | [] [] [] [] [] [] | 23 texinfo | [] [] [] [] [] | 17 tin | | 4 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux-ng | [] [] [] [] | 20 vice | () () | 1 vmm | [] | 4 vorbis-tools | [] | 6 wastesedge | | 2 wdiff | [] [] | 7 wget | [] [] [] [] [] | 26 wyslij-po | [] [] | 8 xchat | [] [] [] [] [] [] | 36 xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 xkeyboard-config | [] [] [] | 22 +---------------------------------------------------+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If June 2010 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.5 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. gss-1.0.2/GNUmakefile0000644000000000000000000001144711662446265011272 00000000000000# Having a separate GNUmakefile lets me `include' the dynamically # generated rules created via cfg.mk (package-local configuration) # as well as maint.mk (generic maintainer rules). # This makefile is used only if you run GNU Make. # It is necessary if you want to build targets usually of interest # only to the maintainer. # Copyright (C) 2001, 2003, 2006-2011 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Systems where /bin/sh is not the default shell need this. The $(shell) # command below won't work with e.g. stock DOS/Windows shells. ifeq ($(wildcard /bin/s[h]),/bin/sh) SHELL = /bin/sh else # will be used only with the next shell-test line, then overwritten # by a configured-in value SHELL = sh endif # If the user runs GNU make but has not yet run ./configure, # give them a diagnostic. _have-Makefile := $(shell test -f Makefile && echo yes) ifeq ($(_have-Makefile),yes) # Make tar archive easier to reproduce. export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner # Allow the user to add to this in the Makefile. ALL_RECURSIVE_TARGETS = include Makefile # Some projects override e.g., _autoreconf here. -include $(srcdir)/cfg.mk # Allow cfg.mk to override these. _build-aux ?= build-aux _autoreconf ?= autoreconf -v include $(srcdir)/maint.mk # Ensure that $(VERSION) is up to date for dist-related targets, but not # for others: rerunning autoreconf and recompiling everything isn't cheap. _have-git-version-gen := \ $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes) ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL)) _is-dist-target ?= $(filter-out %clean, \ $(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS))) _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS))) ifneq (,$(_is-dist-target)$(_is-install-target)) _curr-ver := $(shell cd $(srcdir) \ && $(_build-aux)/git-version-gen \ .tarball-version \ $(git-version-gen-tag-sed-script)) ifneq ($(_curr-ver),$(VERSION)) ifeq ($(_curr-ver),UNKNOWN) $(info WARNING: unable to verify if $(VERSION) is the correct version) else ifneq (,$(_is-install-target)) # GNU Coding Standards state that 'make install' should not cause # recompilation after 'make all'. But as long as changing the version # string alters config.h, the cost of having 'make all' always have an # up-to-date version is prohibitive. So, as a compromise, we merely # warn when installing a version string that is out of date; the user # should run 'autoreconf' (or something like 'make distcheck') to # fix the version, 'make all' to propagate it, then 'make install'. $(info WARNING: version string $(VERSION) is out of date;) $(info run '$(MAKE) _version' to fix it) else $(info INFO: running autoreconf for new version string: $(_curr-ver)) GNUmakefile: _version touch GNUmakefile endif endif endif endif endif .PHONY: _version _version: cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf) $(MAKE) $(AM_MAKEFLAGS) Makefile else .DEFAULT_GOAL := abort-due-to-no-makefile srcdir = . # The package can override .DEFAULT_GOAL to run actions like autoreconf. -include ./cfg.mk # Allow cfg.mk to override these. _build-aux ?= build-aux _autoreconf ?= autoreconf -v include ./maint.mk ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) $(MAKECMDGOALS): abort-due-to-no-makefile endif abort-due-to-no-makefile: @echo There seems to be no Makefile in this directory. 1>&2 @echo "You must run ./configure before running \`make'." 1>&2 @exit 1 endif # Tell version 3.79 and up of GNU make to not build goals in this # directory in parallel, in case someone tries to build multiple # targets, and one of them can cause a recursive target to be invoked. # Only set this if Automake doesn't provide it. AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) \ dist distcheck tags ctags ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS) ifneq ($(word 2, $(MAKECMDGOALS)), ) ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), ) .NOTPARALLEL: endif endif gss-1.0.2/lib/0000755000000000000000000000000011663555055010036 500000000000000gss-1.0.2/lib/oid.c0000644000000000000000000001377211662452056010703 00000000000000/* oid.c --- Definition of static GSS-API OIDs. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x01"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) user_name(1)}. The constant * GSS_C_NT_USER_NAME should be initialized to point * to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_USER_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x01" }; gss_OID GSS_C_NT_USER_NAME = &GSS_C_NT_USER_NAME_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x02"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) machine_uid_name(2)}. * The constant GSS_C_NT_MACHINE_UID_NAME should be * initialized to point to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_MACHINE_UID_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x02" }; gss_OID GSS_C_NT_MACHINE_UID_NAME = &GSS_C_NT_MACHINE_UID_NAME_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x03"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) string_uid_name(3)}. * The constant GSS_C_NT_STRING_UID_NAME should be * initialized to point to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_STRING_UID_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x03" }; gss_OID GSS_C_NT_STRING_UID_NAME = &GSS_C_NT_STRING_UID_NAME_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\x01\x05\x06\x02"}, * corresponding to an object-identifier value of * {iso(1) org(3) dod(6) internet(1) security(5) * nametypes(6) gss-host-based-services(2)). The constant * GSS_C_NT_HOSTBASED_SERVICE_X should be initialized to point * to that gss_OID_desc. This is a deprecated OID value, and * implementations wishing to support hostbased-service names * should instead use the GSS_C_NT_HOSTBASED_SERVICE OID, * defined below, to identify such names; * GSS_C_NT_HOSTBASED_SERVICE_X should be accepted a synonym * for GSS_C_NT_HOSTBASED_SERVICE when presented as an input * parameter, but should not be emitted by GSS-API * implementations */ gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_X_static = { 6, (void *) "\x2b\x06\x01\x05\x06\x02" }; gss_OID GSS_C_NT_HOSTBASED_SERVICE_X = &GSS_C_NT_HOSTBASED_SERVICE_X_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x04"}, corresponding to an * object-identifier value of {iso(1) member-body(2) * Unites States(840) mit(113554) infosys(1) gssapi(2) * generic(1) service_name(4)}. The constant * GSS_C_NT_HOSTBASED_SERVICE should be initialized * to point to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x04" }; gss_OID GSS_C_NT_HOSTBASED_SERVICE = &GSS_C_NT_HOSTBASED_SERVICE_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\01\x05\x06\x03"}, * corresponding to an object identifier value of * {1(iso), 3(org), 6(dod), 1(internet), 5(security), * 6(nametypes), 3(gss-anonymous-name)}. The constant * and GSS_C_NT_ANONYMOUS should be initialized to point * to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_ANONYMOUS_static = { 6, (void *) "\x2b\x06\01\x05\x06\x03" }; gss_OID GSS_C_NT_ANONYMOUS = &GSS_C_NT_ANONYMOUS_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\x01\x05\x06\x04"}, * corresponding to an object-identifier value of * {1(iso), 3(org), 6(dod), 1(internet), 5(security), * 6(nametypes), 4(gss-api-exported-name)}. The constant * GSS_C_NT_EXPORT_NAME should be initialized to point * to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_EXPORT_NAME_static = { 6, (void *) "\x2b\x06\x01\x05\x06\x04" }; gss_OID GSS_C_NT_EXPORT_NAME = &GSS_C_NT_EXPORT_NAME_static; /** * gss_oid_equal: * @first_oid: (Object ID, read) First Object identifier. * @second_oid: (Object ID, read) First Object identifier. * * Compare two OIDs for equality. The comparison is "deep", i.e., the * actual byte sequences of the OIDs are compared instead of just the * pointer equality. This function is standardized in RFC 6339. * * Return value: Returns boolean value true when the two OIDs are * equal, otherwise false. **/ int gss_oid_equal (gss_const_OID first_oid, gss_const_OID second_oid) { return first_oid && second_oid && first_oid->length == second_oid->length && memcmp (first_oid->elements, second_oid->elements, second_oid->length) == 0; } gss-1.0.2/lib/meta.h0000644000000000000000000001136711546676340011066 00000000000000/* meta.h --- Prototypes for internally visible symbols from meta.c. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #ifndef META_H #define META_H #include #define MAX_NT 5 typedef struct _gss_mech_api_struct { gss_OID mech; const char *sasl_name; const char *mech_name; const char *mech_description; gss_OID name_types[MAX_NT]; OM_uint32 (*init_sec_context) (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec); OM_uint32 (*canonicalize_name) (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name); OM_uint32 (*export_name) (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name); OM_uint32 (*wrap) (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer); OM_uint32 (*unwrap) (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, gss_qop_t * qop_state); OM_uint32 (*get_mic) (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token); OM_uint32 (*verify_mic) (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state); OM_uint32 (*display_status) (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string); OM_uint32 (*acquire_cred) (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec); OM_uint32 (*release_cred) (OM_uint32 * minor_status, gss_cred_id_t * cred_handle); OM_uint32 (*accept_sec_context) (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle); OM_uint32 (*delete_sec_context) (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token); OM_uint32 (*context_time) (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec); OM_uint32 (*inquire_cred) (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms); OM_uint32 (*inquire_cred_by_mech) (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage); } _gss_mech_api_desc, *_gss_mech_api_t; _gss_mech_api_t _gss_find_mech (const gss_OID oid); _gss_mech_api_t _gss_find_mech_no_default (const gss_OID oid); _gss_mech_api_t _gss_find_mech_by_saslname (const gss_buffer_t sasl_mech_name); OM_uint32 _gss_indicate_mechs1 (OM_uint32 * minor_status, gss_OID_set * mech_set); #endif /* META_H */ gss-1.0.2/lib/gl/0000755000000000000000000000000011663555055010440 500000000000000gss-1.0.2/lib/gl/dummy.c0000644000000000000000000000325411662447025011657 00000000000000/* A dummy file, to prevent empty libraries from breaking builds. Copyright (C) 2004, 2007, 2009-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Some systems, reportedly OpenBSD and Mac OS X, refuse to create libraries without any object files. You might get an error like: > ar cru .libs/libgl.a > ar: no archive members specified Compiling this file, and adding its object file to the library, will prevent the library from being empty. */ /* Some systems, such as Solaris with cc 5.0, refuse to work with libraries that don't export any symbol. You might get an error like: > cc ... libgnu.a > ild: (bad file) garbled symbol table in archive ../gllib/libgnu.a Compiling this file, and adding its object file to the library, will prevent the library from exporting no symbols. */ #ifdef __sun /* This declaration ensures that the library will export at least 1 symbol. */ int gl_dummy_symbol; #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif gss-1.0.2/lib/gl/Makefile.am0000644000000000000000000002546711662447025012426 00000000000000## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: gnulib-tool --import --dir=. --local-dir=lib/gl/override --lib=libgnu --source-base=lib/gl --m4-base=lib/gl/m4 --doc-base=doc --tests-base=lib/gl/tests --aux-dir=build-aux --avoid=xalloc-die --no-conditional-dependencies --libtool --macro-prefix=libgl --no-vc-files gettext-h lib-msvc-compat strverscmp AUTOMAKE_OPTIONS = 1.5 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = EXTRA_DIST += m4/gnulib-cache.m4 AM_CPPFLAGS = AM_CFLAGS = noinst_LTLIBRARIES += libgnu.la libgnu_la_SOURCES = libgnu_la_LIBADD = $(libgl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(libgl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) libgnu_la_LDFLAGS += -no-undefined libgnu_la_LDFLAGS += $(LTLIBINTL) ## begin gnulib module gettext-h libgnu_la_SOURCES += gettext.h ## end gnulib module gettext-h ## begin gnulib module snippet/arg-nonnull # The BUILT_SOURCES created by this Makefile snippet are not used via #include # statements but through direct file reference. Therefore this snippet must be # present in all Makefile.am that need it. This is ensured by the applicability # 'all' defined above. BUILT_SOURCES += arg-nonnull.h # The arg-nonnull.h that gets inserted into generated .h files is the same as # build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut # off. arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/GL_ARG_NONNULL/,$$p' \ < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t ARG_NONNULL_H=arg-nonnull.h EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # The BUILT_SOURCES created by this Makefile snippet are not used via #include # statements but through direct file reference. Therefore this snippet must be # present in all Makefile.am that need it. This is ensured by the applicability # 'all' defined above. BUILT_SOURCES += c++defs.h # The c++defs.h that gets inserted into generated .h files is the same as # build-aux/snippet/c++defs.h, except that it has the copyright header cut off. c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/_GL_CXXDEFS/,$$p' \ < $(top_srcdir)/build-aux/snippet/c++defs.h \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += c++defs.h c++defs.h-t CXXDEFS_H=c++defs.h EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use BUILT_SOURCES += warn-on-use.h # The warn-on-use.h that gets inserted into generated .h files is the same as # build-aux/snippet/warn-on-use.h, except that it has the copyright header cut # off. warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/^.ifndef/,$$p' \ < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t WARN_ON_USE_H=warn-on-use.h EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module stddef BUILT_SOURCES += $(STDDEF_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_LIBGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ < $(srcdir)/stddef.in.h; \ } > $@-t && \ mv $@-t $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## begin gnulib module string BUILT_SOURCES += string.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_LIBGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += string.h string.h-t EXTRA_DIST += string.in.h ## end gnulib module string ## begin gnulib module strverscmp EXTRA_DIST += strverscmp.c EXTRA_libgnu_la_SOURCES += strverscmp.c ## end gnulib module strverscmp ## begin gnulib module dummy libgnu_la_SOURCES += dummy.c ## end gnulib module dummy mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : gss-1.0.2/lib/gl/stddef.in.h0000644000000000000000000000534311662447025012410 00000000000000/* A substitute for POSIX 2008 , for platforms that have issues. Copyright (C) 2009-2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Eric Blake. */ /* * POSIX 2008 for platforms that have issues. * */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_wchar_t || defined __need_size_t \ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t /* Special invocation convention inside gcc header files. In particular, gcc provides a version of that blindly redefines NULL even when __need_wint_t was defined, even though wint_t is not normally provided by . Hence, we must remember if special invocation has ever been used to obtain wint_t, in which case we need to clean up NULL yet again. */ # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) # ifdef __need_wint_t # undef _@GUARD_PREFIX@_STDDEF_H # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ #if @REPLACE_NULL@ # undef NULL # ifdef __cplusplus /* ISO C++ says that the macro NULL must expand to an integer constant expression, hence '((void *) 0)' is not allowed in C++. */ # if __GNUG__ >= 3 /* GNU C++ has a __null macro that behaves like an integer ('int' or 'long') but has the same size as a pointer. Use that, to avoid warnings. */ # define NULL __null # else # define NULL 0L # endif # else # define NULL ((void *) 0) # endif #endif /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ gss-1.0.2/lib/gl/Makefile.in0000644000000000000000000012361611663554705012437 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: gnulib-tool --import --dir=. --local-dir=lib/gl/override --lib=libgnu --source-base=lib/gl --m4-base=lib/gl/m4 --doc-base=doc --tests-base=lib/gl/tests --aux-dir=build-aux --avoid=xalloc-die --no-conditional-dependencies --libtool --macro-prefix=libgl --no-vc-files gettext-h lib-msvc-compat strverscmp VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib/gl DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = am_libgnu_la_OBJECTS = dummy.lo libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.5 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = libgnu.la EXTRA_DIST = m4/gnulib-cache.m4 \ $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ $(top_srcdir)/build-aux/snippet/c++defs.h \ $(top_srcdir)/build-aux/snippet/warn-on-use.h stddef.in.h \ string.in.h strverscmp.c # The BUILT_SOURCES created by this Makefile snippet are not used via #include # statements but through direct file reference. Therefore this snippet must be # present in all Makefile.am that need it. This is ensured by the applicability # 'all' defined above. # The BUILT_SOURCES created by this Makefile snippet are not used via #include # statements but through direct file reference. Therefore this snippet must be # present in all Makefile.am that need it. This is ensured by the applicability # 'all' defined above. BUILT_SOURCES = arg-nonnull.h c++defs.h warn-on-use.h $(STDDEF_H) \ string.h SUFFIXES = MOSTLYCLEANFILES = core *.stackdump arg-nonnull.h arg-nonnull.h-t \ c++defs.h c++defs.h-t warn-on-use.h warn-on-use.h-t stddef.h \ stddef.h-t string.h string.h-t MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CPPFLAGS = AM_CFLAGS = libgnu_la_SOURCES = gettext.h dummy.c libgnu_la_LIBADD = $(libgl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(libgl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = strverscmp.c libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(LTLIBINTL) ARG_NONNULL_H = arg-nonnull.h CXXDEFS_H = c++defs.h WARN_ON_USE_H = warn-on-use.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/gl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits lib/gl/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(AM_V_CCLD)$(libgnu_la_LINK) $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strverscmp.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am # The arg-nonnull.h that gets inserted into generated .h files is the same as # build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut # off. arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/GL_ARG_NONNULL/,$$p' \ < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ > $@-t && \ mv $@-t $@ # The c++defs.h that gets inserted into generated .h files is the same as # build-aux/snippet/c++defs.h, except that it has the copyright header cut off. c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/_GL_CXXDEFS/,$$p' \ < $(top_srcdir)/build-aux/snippet/c++defs.h \ > $@-t && \ mv $@-t $@ # The warn-on-use.h that gets inserted into generated .h files is the same as # build-aux/snippet/warn-on-use.h, except that it has the copyright header cut # off. warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/^.ifndef/,$$p' \ < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL_LIBGL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \ @GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_LIBGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/lib/gl/gettext.h0000644000000000000000000001044411662447025012214 00000000000000/* Convenience header for conditional use of GNU . Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option. */ #if ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by the gettext() and ngettext() macros. This is an alternative to calling textdomain(), and is useful for libraries. */ # ifdef DEFAULT_TEXT_DOMAIN # undef gettext # define gettext(Msgid) \ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) # endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. We don't include as well because people using "gettext.h" will not include , and also including would fail on SunOS 4, whereas is OK. */ #if defined(__sun) # include #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include , which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) # include # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H # include # endif #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # undef gettext # define gettext(Msgid) ((const char *) (Msgid)) # undef dgettext # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) # undef dcgettext # define dcgettext(Domainname, Msgid, Category) \ ((void) (Category), dgettext (Domainname, Msgid)) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 \ ? ((void) (Msgid2), (const char *) (Msgid1)) \ : ((void) (Msgid1), (const char *) (Msgid2))) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) # undef textdomain # define textdomain(Domainname) ((const char *) (Domainname)) # undef bindtextdomain # define bindtextdomain(Domainname, Dirname) \ ((void) (Domainname), (const char *) (Dirname)) # undef bind_textdomain_codeset # define bind_textdomain_codeset(Domainname, Codeset) \ ((void) (Domainname), (const char *) (Codeset)) #endif /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String #endif /* _LIBGETTEXT_H */ gss-1.0.2/lib/gl/m4/0000755000000000000000000000000011663555055010760 500000000000000gss-1.0.2/lib/gl/m4/warn-on-use.m40000644000000000000000000000416011662447025013312 00000000000000# warn-on-use.m4 serial 4 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) # --------------------------------------- # For each whitespace-separated element in the list of NAMES, define # HAVE_RAW_DECL_name if the function has a declaration among INCLUDES # even after being undefined as a macro. # # See warn-on-use.h for some hints on how to poison function names, as # well as ideas on poisoning global variables and macros. NAMES may # include global variables, but remember that only functions work with # _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single # header, but if the replacement header pulls in other headers because # some systems declare functions in the wrong header, then INCLUDES # should do likewise. # # If you assume C89, then it is generally safe to assume declarations # for functions declared in that standard (such as gets) without # needing gl_WARN_ON_USE_PREPARE. AC_DEFUN([gl_WARN_ON_USE_PREPARE], [ m4_foreach_w([gl_decl], [$2], [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), [Define to 1 if ]m4_defn([gl_decl])[ is declared even after undefining macros.])])dnl dnl FIXME: gl_Symbol must be used unquoted until we can assume dnl autoconf 2.64 or newer. for gl_func in m4_flatten([$2]); do AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl AC_CACHE_CHECK([whether $gl_func is declared without a macro], gl_Symbol, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], [@%:@undef $gl_func (void) $gl_func;])], [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])]) AS_VAR_IF(gl_Symbol, [yes], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) dnl shortcut - if the raw declaration exists, then set a cache dnl variable to allow skipping any later AC_CHECK_DECL efforts eval ac_cv_have_decl_$gl_func=yes]) AS_VAR_POPDEF([gl_Symbol])dnl done ]) gss-1.0.2/lib/gl/m4/ld-output-def.m40000644000000000000000000000203611662447025013630 00000000000000# ld-output-def.m4 serial 2 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # gl_LD_OUTPUT_DEF() # ------------- # Check if linker supports -Wl,--output-def and define automake # conditional HAVE_LD_OUTPUT_DEF if it is. AC_DEFUN([gl_LD_OUTPUT_DEF], [ AC_CACHE_CHECK([if gcc/ld supports -Wl,--output-def], [gl_cv_ld_output_def], [if test "$enable_shared" = no; then gl_cv_ld_output_def="not needed, shared libraries are disabled" else gl_ldflags_save=$LDFLAGS LDFLAGS="-Wl,--output-def,conftest.def" AC_LINK_IFELSE([AC_LANG_PROGRAM([])], [gl_cv_ld_output_def=yes], [gl_cv_ld_output_def=no]) rm -f conftest.def LDFLAGS="$gl_ldflags_save" fi]) AM_CONDITIONAL([HAVE_LD_OUTPUT_DEF], test "x$gl_cv_ld_output_def" = "xyes") ]) gss-1.0.2/lib/gl/m4/stddef_h.m40000644000000000000000000000275511662447025012727 00000000000000dnl A placeholder for POSIX 2008 , for platforms that have issues. # stddef_h.m4 serial 4 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STDDEF_H], [ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) STDDEF_H= if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], [gl_cv_decl_null_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include int test[2 * (sizeof NULL == sizeof (void *)) -1]; ]])], [gl_cv_decl_null_works=yes], [gl_cv_decl_null_works=no])]) if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi AC_SUBST([STDDEF_H]) AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) if test -n "$STDDEF_H"; then gl_NEXT_HEADERS([stddef.h]) fi ]) AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) AC_DEFUN([gl_STDDEF_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) ]) gss-1.0.2/lib/gl/m4/gnulib-cache.m40000644000000000000000000000376411662447025013471 00000000000000# Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the specification of how gnulib-tool is used. # It acts as a cache: It is written and read by gnulib-tool. # In projects that use version control, this file is meant to be put under # version control, like the configure.ac and various Makefile.am files. # Specification in the form of a command-line invocation: # gnulib-tool --import --dir=. --local-dir=lib/gl/override --lib=libgnu --source-base=lib/gl --m4-base=lib/gl/m4 --doc-base=doc --tests-base=lib/gl/tests --aux-dir=build-aux --avoid=xalloc-die --no-conditional-dependencies --libtool --macro-prefix=libgl --no-vc-files gettext-h lib-msvc-compat strverscmp # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([lib/gl/override]) gl_MODULES([ gettext-h lib-msvc-compat strverscmp ]) gl_AVOID([xalloc-die]) gl_SOURCE_BASE([lib/gl]) gl_M4_BASE([lib/gl/m4]) gl_PO_BASE([]) gl_DOC_BASE([doc]) gl_TESTS_BASE([lib/gl/tests]) gl_LIB([libgnu]) gl_MAKEFILE_NAME([]) gl_LIBTOOL gl_MACRO_PREFIX([libgl]) gl_PO_DOMAIN([]) gl_WITNESS_C_DOMAIN([]) gl_VC_FILES([false]) gss-1.0.2/lib/gl/m4/include_next.m40000644000000000000000000002542411662447025013626 00000000000000# include_next.m4 serial 23 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Derek Price. dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER. dnl dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to dnl 'include' otherwise. dnl dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler dnl supports it in the special case that it is the first include directive in dnl the given file, or to 'include' otherwise. dnl dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, dnl so as to avoid GCC warnings when the gcc option -pedantic is used. dnl '#pragma GCC system_header' has the same effect as if the file was found dnl through the include search path specified with '-isystem' options (as dnl opposed to the search path specified with '-I' options). Namely, gcc dnl does not warn about some things, and on some systems (Solaris and Interix) dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead dnl of plain '__STDC__'. dnl dnl PRAGMA_COLUMNS can be used in files that override system header files, so dnl as to avoid compilation errors on HP NonStop systems when the gnulib file dnl is included by a system header file that does a "#pragma COLUMNS 80" (which dnl has the effect of truncating the lines of that file and all files that it dnl includes to 80 columns) and the gnulib file has lines longer than 80 dnl columns. AC_DEFUN([gl_INCLUDE_NEXT], [ AC_LANG_PREPROC_REQUIRE() AC_CACHE_CHECK([whether the preprocessor supports include_next], [gl_cv_have_include_next], [rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on dnl AIX 6.1 support include_next when used as first preprocessor directive dnl in a file, but not when preceded by another include directive. Check dnl for this bug by including . dnl Additionally, with this same compiler, include_next is a no-op when dnl used in a header file that was included by specifying its absolute dnl file name. Despite these two bugs, include_next is used in the dnl compiler's . By virtue of the second bug, we need to use dnl include_next as well in this case. cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" dnl We intentionally avoid using AC_LANG_SOURCE here. AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], [gl_cv_have_include_next=yes], [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], [gl_cv_have_include_next=buggy], [gl_cv_have_include_next=no]) ]) CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 ]) PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi AC_SUBST([INCLUDE_NEXT]) AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) AC_SUBST([PRAGMA_SYSTEM_HEADER]) AC_CACHE_CHECK([whether system header files limit the line length], [gl_cv_pragma_columns], [dnl HP NonStop systems, which define __TANDEM, have this misfeature. AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_pragma_columns=yes], [gl_cv_pragma_columns=no]) ]) if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi AC_SUBST([PRAGMA_COLUMNS]) ]) # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------------ # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be # ''; otherwise define it to be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # Also, if #include_next works as first preprocessing directive in a file, # define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be ''; otherwise define it to # be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # That way, a header file with the following line: # #@INCLUDE_NEXT@ @NEXT_FOO_H@ # or # #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ # behaves (after sed substitution) as if it contained # #include_next # even if the compiler does not support include_next. # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use `""', not `<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. # # This macro also checks whether each header exists, by invoking # AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. AC_DEFUN([gl_CHECK_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [check]) ]) # gl_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------ # Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. # This is suitable for headers like that are standardized by C89 # and therefore can be assumed to exist. AC_DEFUN([gl_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [assume]) ]) # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], [ AC_REQUIRE([gl_INCLUDE_NEXT]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_if([$2], [check], [AC_CHECK_HEADERS_ONCE([$1]) ]) dnl FIXME: gl_next_header and gl_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_next_header], [gl_cv_next_]m4_defn([gl_HEADER_NAME])) if test $gl_cv_have_include_next = yes; then AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) else AC_CACHE_CHECK( [absolute name of <]m4_defn([gl_HEADER_NAME])[>], m4_defn([gl_next_header]), [m4_if([$2], [check], [AS_VAR_PUSHDEF([gl_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME])) if test AS_VAR_GET(gl_header_exists) = yes; then AS_VAR_POPDEF([gl_header_exists]) ]) AC_LANG_CONFTEST( [AC_LANG_SOURCE( [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]] )]) dnl AIX "xlc -E" and "cc -E" omit #line directives for header dnl files that contain only a #include of other header files and dnl no non-comment tokens of their own. This leads to a failure dnl to detect the absolute name of , , dnl and others. The workaround is to force preservation dnl of comments through option -C. This ensures all necessary dnl #line directives are present. GCC supports option -C as well. case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac changequote(,) case "$host_os" in mingw*) dnl For the sake of native Windows compilers (excluding gcc), dnl treat backslash as a directory separator, like /. dnl Actually, these compilers use a double-backslash as dnl directory separator, inside the dnl # line "filename" dnl directives. gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac dnl A sed expression that turns a string into a basic regular dnl expression, for use within "/.../". gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' changequote([,]) gl_header_literal_regex=`echo ']m4_defn([gl_HEADER_NAME])[' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ changequote(,)dnl s|^/[^/]|//&| changequote([,])dnl p q }' dnl eval is necessary to expand gl_absname_cpp. dnl Ultrix and Pyramid sh refuse to redirect output of eval, dnl so use subshell. AS_VAR_SET(gl_next_header, ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`'"']) m4_if([$2], [check], [else AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) fi ]) ]) fi AC_SUBST( AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), [AS_VAR_GET(gl_next_header)]) if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'gl_HEADER_NAME'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=AS_VAR_GET(gl_next_header) fi AC_SUBST( AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), [$gl_next_as_first_directive]) AS_VAR_POPDEF([gl_next_header])]) ]) # Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; # this fallback is safe for all earlier autoconf versions. m4_define_default([AC_LANG_DEFINES_PROVIDED]) gss-1.0.2/lib/gl/m4/gnulib-comp.m40000644000000000000000000002065011662447025013355 00000000000000# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from ./configure.ac, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([libgl_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable AC_REQUIRE([gl_PROG_AR_RANLIB]) # Code from module extensions: AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Code from module gettext-h: # Code from module include_next: # Code from module lib-msvc-compat: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module stddef: # Code from module string: # Code from module strverscmp: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([libgl_INIT], [ AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) gl_cond_libtool=true gl_m4_base='lib/gl/m4' m4_pushdef([AC_LIBOBJ], m4_defn([libgl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([libgl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([libgl_LIBSOURCES])) m4_pushdef([libgl_LIBSOURCES_LIST], []) m4_pushdef([libgl_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='lib/gl' AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) gl_LD_OUTPUT_DEF gl_STDDEF_H gl_HEADER_STRING_H gl_FUNC_STRVERSCMP if test $HAVE_STRVERSCMP = 0; then AC_LIBOBJ([strverscmp]) gl_PREREQ_STRVERSCMP fi gl_STRING_MODULE_INDICATOR([strverscmp]) # End of code from modules m4_ifval(libgl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([libgl_LIBSOURCES_DIR])[ || for gl_file in ]libgl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([libgl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([libgl_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([libgl_LIBSOURCES_DIR]) m4_popdef([libgl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ libgl_libobjs= libgl_ltlibobjs= if test -n "$libgl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $libgl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do libgl_libobjs="$libgl_libobjs $i.$ac_objext" libgl_ltlibobjs="$libgl_ltlibobjs $i.lo" done fi AC_SUBST([libgl_LIBOBJS], [$libgl_libobjs]) AC_SUBST([libgl_LTLIBOBJS], [$libgl_ltlibobjs]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([libgltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([libgltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([libgltests_LIBSOURCES])) m4_pushdef([libgltests_LIBSOURCES_LIST], []) m4_pushdef([libgltests_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='lib/gl/tests' changequote(,)dnl libgltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS changequote([, ])dnl AC_SUBST([libgltests_WITNESS]) gl_module_indicator_condition=$libgltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(libgltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([libgltests_LIBSOURCES_DIR])[ || for gl_file in ]libgltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([libgltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([libgltests_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([libgltests_LIBSOURCES_DIR]) m4_popdef([libgltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ libgltests_libobjs= libgltests_ltlibobjs= if test -n "$libgltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $libgltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do libgltests_libobjs="$libgltests_libobjs $i.$ac_objext" libgltests_ltlibobjs="$libgltests_ltlibobjs $i.lo" done fi AC_SUBST([libgltests_LIBOBJS], [$libgltests_libobjs]) AC_SUBST([libgltests_LTLIBOBJS], [$libgltests_ltlibobjs]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into libgl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([libgl_LIBOBJ], [ AS_LITERAL_IF([$1], [libgl_LIBSOURCES([$1.c])])dnl libgl_LIBOBJS="$libgl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into libgl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([libgl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [libgl_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([libgl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([libgl_LIBSOURCES_DIR], [lib/gl]) m4_append([libgl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into libgltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([libgltests_LIBOBJ], [ AS_LITERAL_IF([$1], [libgltests_LIBSOURCES([$1.c])])dnl libgltests_LIBOBJS="$libgltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into libgltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([libgltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [libgltests_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([libgltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([libgltests_LIBSOURCES_DIR], [lib/gl/tests]) m4_append([libgltests_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([libgl_FILE_LIST], [ build-aux/snippet/arg-nonnull.h build-aux/snippet/c++defs.h build-aux/snippet/warn-on-use.h lib/dummy.c lib/gettext.h lib/stddef.in.h lib/string.in.h lib/strverscmp.c m4/00gnulib.m4 m4/extensions.m4 m4/gnulib-common.m4 m4/include_next.m4 m4/ld-output-def.m4 m4/stddef_h.m4 m4/string_h.m4 m4/strverscmp.m4 m4/warn-on-use.m4 m4/wchar_t.m4 ]) gss-1.0.2/lib/gl/m4/string_h.m40000644000000000000000000001271411662447025012760 00000000000000# Configure a GNU-like replacement for . # Copyright (C) 2007-2011 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 21 # Written by Paul Eggert. AC_DEFUN([gl_HEADER_STRING_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_HEADER_STRING_H_BODY]) ]) AC_DEFUN([gl_HEADER_STRING_H_BODY], [ AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_NEXT_HEADERS([string.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include ]], [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp]) ]) AC_DEFUN([gl_STRING_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], [ GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) gss-1.0.2/lib/gl/m4/extensions.m40000644000000000000000000001073611662447025013344 00000000000000# serial 10 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 2006-2011 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS # Autoconf. Perhaps we can remove this once we can assume Autoconf # 2.62 or later everywhere, but since CVS Autoconf mutates rapidly # enough in this area it's likely we'll need to redefine # AC_USE_SYSTEM_EXTENSIONS for quite some time. # If autoconf reports a warning # warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # the fix is # 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked # but always AC_REQUIREd, # 2) to ensure that for each occurrence of # AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) # or # AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # the corresponding gnulib module description has 'extensions' among # its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS # invocation occurs in gl_EARLY, not in gl_INIT. # AC_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. # Remember that #undef in AH_VERBATIM gets replaced with #define by # AC_DEFINE. The goal here is to define all known feature-enabling # macros, then, if reports of conflicts are made, disable macros that # cause problems on some platforms (such as __EXTENSIONS__). AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], [AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) if test "$MINIX" = yes; then AC_DEFINE([_POSIX_SOURCE], [1], [Define to 1 if you need to in order for `stat' and other things to work.]) AC_DEFINE([_POSIX_1_SOURCE], [2], [Define to 2 if the system does not provide POSIX.1 features except with this defined.]) AC_DEFINE([_MINIX], [1], [Define to 1 if on MINIX.]) fi dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, dnl regardless of whether the flags -Ae or _D_HPUX_SOURCE=1 are already dnl provided. case "$host_os" in hpux*) AC_DEFINE([_XOPEN_SOURCE], [500], [Define to 500 only on HP-UX.]) ;; esac AH_VERBATIM([__EXTENSIONS__], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on MacOS X. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif ]) AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], [ac_cv_safe_to_define___extensions__], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ # define __EXTENSIONS__ 1 ]AC_INCLUDES_DEFAULT])], [ac_cv_safe_to_define___extensions__=yes], [ac_cv_safe_to_define___extensions__=no])]) test $ac_cv_safe_to_define___extensions__ = yes && AC_DEFINE([__EXTENSIONS__]) AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([_TANDEM_SOURCE]) ])# AC_USE_SYSTEM_EXTENSIONS # gl_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], [ dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. dnl gnulib does not need it. But if it gets required by third-party macros dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. AC_REQUIRE([AC_GNU_SOURCE]) AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) gss-1.0.2/lib/gl/m4/strverscmp.m40000644000000000000000000000120611662447025013345 00000000000000# strverscmp.m4 serial 8 dnl Copyright (C) 2002, 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRVERSCMP], [ dnl Persuade glibc to declare strverscmp(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strverscmp]) if test $ac_cv_func_strverscmp = no; then HAVE_STRVERSCMP=0 fi ]) # Prerequisites of lib/strverscmp.c. AC_DEFUN([gl_PREREQ_STRVERSCMP], [ : ]) gss-1.0.2/lib/gl/strverscmp.c0000644000000000000000000000757011662447025012741 00000000000000/* Compare strings while treating digits characters numerically. Copyright (C) 1997, 2000, 2002, 2004, 2006, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jean-François Bignolles , 1997. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if !_LIBC # include #endif #include #include /* states: S_N: normal, S_I: comparing integral part, S_F: comparing fractional parts, S_Z: idem but with leading Zeroes only */ #define S_N 0x0 #define S_I 0x4 #define S_F 0x8 #define S_Z 0xC /* result_type: CMP: return diff; LEN: compare using len_diff/diff */ #define CMP 2 #define LEN 3 /* ISDIGIT differs from isdigit, as follows: - Its arg may be any int or unsigned int; it need not be an unsigned char or EOF. - It's typically faster. POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to isdigit unless it's important to use the locale's definition of `digit' even when the host does not conform to POSIX. */ #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) #undef __strverscmp #undef strverscmp #ifndef weak_alias # define __strverscmp strverscmp #endif /* Compare S1 and S2 as strings holding indices/version numbers, returning less than, equal to or greater than zero if S1 is less than, equal to or greater than S2 (for more info, see the texinfo doc). */ int __strverscmp (const char *s1, const char *s2) { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; int state; int diff; /* Symbol(s) 0 [1-9] others (padding) Transition (10) 0 (01) d (00) x (11) - */ static const unsigned int next_state[] = { /* state x d 0 - */ /* S_N */ S_N, S_I, S_Z, S_N, /* S_I */ S_N, S_I, S_I, S_I, /* S_F */ S_N, S_F, S_F, S_F, /* S_Z */ S_N, S_F, S_Z, S_Z }; static const int result_type[] = { /* state x/x x/d x/0 x/- d/x d/d d/0 d/- 0/x 0/d 0/0 0/- -/x -/d -/0 -/- */ /* S_N */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, /* S_I */ CMP, -1, -1, CMP, 1, LEN, LEN, CMP, 1, LEN, LEN, CMP, CMP, CMP, CMP, CMP, /* S_F */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, /* S_Z */ CMP, 1, 1, CMP, -1, CMP, CMP, CMP, -1, CMP, CMP, CMP }; if (p1 == p2) return 0; c1 = *p1++; c2 = *p2++; /* Hint: '0' is a digit too. */ state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0)); while ((diff = c1 - c2) == 0 && c1 != '\0') { state = next_state[state]; c1 = *p1++; c2 = *p2++; state |= (c1 == '0') + (ISDIGIT (c1) != 0); } state = result_type[state << 2 | ((c2 == '0') + (ISDIGIT (c2) != 0))]; switch (state) { case CMP: return diff; case LEN: while (ISDIGIT (*p1++)) if (!ISDIGIT (*p2++)) return 1; return ISDIGIT (*p2) ? -1 : diff; default: return state; } } #ifdef weak_alias weak_alias (__strverscmp, strverscmp) #endif gss-1.0.2/lib/gl/string.in.h0000644000000000000000000011522411662447025012445 00000000000000/* A GNU-like . Copyright (C) 1995-1996, 2001-2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _@GUARD_PREFIX@_STRING_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* NetBSD 5.0 mis-defines NULL. */ #include /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* NetBSD 5.0 declares strsignal in , not in . */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif /* Return the first instance of C within N bytes of S, or NULL. */ #if @GNULIB_MEMCHR@ # if @REPLACE_MEMCHR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memchr rpl_memchr # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else # if ! @HAVE_MEMCHR@ _GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const void * std::memchr (const void *, int, size_t); } extern "C++" { void * std::memchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memchr, void *, (void const *__s, int __c, size_t __n), void const *, (void const *__s, int __c, size_t __n)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n)); # else _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK # undef memchr /* Assume memchr is always declared. */ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " "use gnulib module memchr for portability" ); #endif /* Return the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_MEMMEM@ # if @REPLACE_MEMMEM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memmem rpl_memmem # endif _GL_FUNCDECL_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # else # if ! @HAVE_DECL_MEMMEM@ _GL_FUNCDECL_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # endif _GL_CXXALIASWARN (memmem); #elif defined GNULIB_POSIXCHECK # undef memmem # if HAVE_RAW_DECL_MEMMEM _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " "use gnulib module memmem-simple for portability, " "and module memmem for speed" ); # endif #endif /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ #if @GNULIB_MEMPCPY@ # if ! @HAVE_MEMPCPY@ _GL_FUNCDECL_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); _GL_CXXALIASWARN (mempcpy); #elif defined GNULIB_POSIXCHECK # undef mempcpy # if HAVE_RAW_DECL_MEMPCPY _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " "use gnulib module mempcpy for portability"); # endif #endif /* Search backwards through a block for a byte (specified as an int). */ #if @GNULIB_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } extern "C++" { void * std::memrchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memrchr, void *, (void const *, int, size_t), void const *, (void const *, int, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); # else _GL_CXXALIASWARN (memrchr); # endif #elif defined GNULIB_POSIXCHECK # undef memrchr # if HAVE_RAW_DECL_MEMRCHR _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " "use gnulib module memrchr for portability"); # endif #endif /* Find the first occurrence of C in S. More efficient than memchr(S,C,N), at the expense of undefined behavior if C does not occur within N bytes. */ #if @GNULIB_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::rawmemchr (const void *, int); } extern "C++" { void * std::rawmemchr (void *, int); } */ _GL_CXXALIAS_SYS_CAST2 (rawmemchr, void *, (void const *__s, int __c_in), void const *, (void const *__s, int __c_in)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); # else _GL_CXXALIASWARN (rawmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef rawmemchr # if HAVE_RAW_DECL_RAWMEMCHR _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " "use gnulib module rawmemchr for portability"); # endif #endif /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ #if @GNULIB_STPCPY@ # if ! @HAVE_STPCPY@ _GL_FUNCDECL_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); _GL_CXXALIASWARN (stpcpy); #elif defined GNULIB_POSIXCHECK # undef stpcpy # if HAVE_RAW_DECL_STPCPY _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " "use gnulib module stpcpy for portability"); # endif #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ #if @GNULIB_STPNCPY@ # if @REPLACE_STPNCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpncpy # define stpncpy rpl_stpncpy # endif _GL_FUNCDECL_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # else # if ! @HAVE_STPNCPY@ _GL_FUNCDECL_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # endif _GL_CXXALIASWARN (stpncpy); #elif defined GNULIB_POSIXCHECK # undef stpncpy # if HAVE_RAW_DECL_STPNCPY _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " "use gnulib module stpncpy for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ _GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " "in some multibyte locales - " "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ #if @GNULIB_STRCHRNUL@ # if @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * std::strchrnul (const char *, int); } extern "C++" { char * std::strchrnul (char *, int); } */ _GL_CXXALIAS_SYS_CAST2 (strchrnul, char *, (char const *__s, int __c_in), char const *, (char const *__s, int __c_in)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); # else _GL_CXXALIASWARN (strchrnul); # endif #elif defined GNULIB_POSIXCHECK # undef strchrnul # if HAVE_RAW_DECL_STRCHRNUL _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " "use gnulib module strchrnul for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_STRDUP@ # if @REPLACE_STRDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup rpl_strdup # endif _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # if !(@HAVE_DECL_STRDUP@ || defined strdup) _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #elif defined GNULIB_POSIXCHECK # undef strdup # if HAVE_RAW_DECL_STRDUP _GL_WARN_ON_USE (strdup, "strdup is unportable - " "use gnulib module strdup for portability"); # endif #endif /* Append no more than N characters from SRC onto DEST. */ #if @GNULIB_STRNCAT@ # if @REPLACE_STRNCAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strncat # define strncat rpl_strncat # endif _GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); # endif _GL_CXXALIASWARN (strncat); #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT _GL_WARN_ON_USE (strncat, "strncat is unportable - " "use gnulib module strncat for portability"); # endif #endif /* Return a newly allocated copy of at most N bytes of STRING. */ #if @GNULIB_STRNDUP@ # if @REPLACE_STRNDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strndup # define strndup rpl_strndup # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n)); # else # if ! @HAVE_DECL_STRNDUP@ _GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n)); # endif _GL_CXXALIASWARN (strndup); #elif defined GNULIB_POSIXCHECK # undef strndup # if HAVE_RAW_DECL_STRNDUP _GL_WARN_ON_USE (strndup, "strndup is unportable - " "use gnulib module strndup for portability"); # endif #endif /* Find the length (number of bytes) of STRING, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many bytes, return MAXLEN. */ #if @GNULIB_STRNLEN@ # if @REPLACE_STRNLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strnlen # define strnlen rpl_strnlen # endif _GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)); # endif _GL_CXXALIASWARN (strnlen); #elif defined GNULIB_POSIXCHECK # undef strnlen # if HAVE_RAW_DECL_STRNLEN _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " "use gnulib module strnlen for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strcspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strcspn /* Assume strcspn is always declared. */ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " "in multibyte locales - " "use mbscspn if you care about internationalization"); #endif /* Find the first occurrence in S of any character in ACCEPT. */ #if @GNULIB_STRPBRK@ # if ! @HAVE_STRPBRK@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const char * strpbrk (const char *, const char *); } extern "C++" { char * strpbrk (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strpbrk, char *, (char const *__s, char const *__accept), const char *, (char const *__s, char const *__accept)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept)); # else _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK /* strpbrk() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk _GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " "in multibyte locales - " "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK _GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " "use gnulib module strpbrk for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it cannot work with multibyte strings. */ # undef strspn /* Assume strspn is always declared. */ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " "in multibyte locales - " "use mbsspn if you care about internationalization"); #endif #if defined GNULIB_POSIXCHECK /* strrchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ _GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " "in some multibyte locales - " "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next char after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of strtok() that is multithread-safe and supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strtok_r(). */ #if @GNULIB_STRSEP@ # if ! @HAVE_STRSEP@ _GL_FUNCDECL_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim)); _GL_CXXALIASWARN (strsep); # if defined GNULIB_POSIXCHECK # undef strsep _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " "in multibyte locales - " "use mbssep if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strsep # if HAVE_RAW_DECL_STRSEP _GL_WARN_ON_USE (strsep, "strsep is unportable - " "use gnulib module strsep for portability"); # endif #endif #if @GNULIB_STRSTR@ # if @REPLACE_STRSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strstr rpl_strstr # endif _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); # else /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strstr (const char *, const char *); } extern "C++" { char * strstr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strstr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK /* strstr() does not work with multibyte strings if the locale encoding is different from UTF-8: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strstr /* Assume strstr is always declared. */ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " "work correctly on character strings in most " "multibyte locales - " "use mbsstr if you care about internationalization, " "or use strstr if you care about speed"); #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ #if @GNULIB_STRCASESTR@ # if @REPLACE_STRCASESTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strcasestr rpl_strcasestr # endif _GL_FUNCDECL_RPL (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strcasestr, char *, (const char *haystack, const char *needle)); # else # if ! @HAVE_STRCASESTR@ _GL_FUNCDECL_SYS (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strcasestr (const char *, const char *); } extern "C++" { char * strcasestr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strcasestr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strcasestr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strcasestr); # endif #elif defined GNULIB_POSIXCHECK /* strcasestr() does not work with multibyte strings: It is a glibc extension, and glibc implements it only for unibyte locales. */ # undef strcasestr # if HAVE_RAW_DECL_STRCASESTR _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " "strings in multibyte locales - " "use mbscasestr if you care about " "internationalization, or use c-strcasestr if you want " "a locale independent function"); # endif #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: http://www.opengroup.org/susv3xsh/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strsep(). */ #if @GNULIB_STRTOK_R@ # if @REPLACE_STRTOK_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtok_r # define strtok_r rpl_strtok_r # endif _GL_FUNCDECL_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # else # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # undef strtok_r # endif # if ! @HAVE_DECL_STRTOK_R@ _GL_FUNCDECL_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # endif _GL_CXXALIASWARN (strtok_r); # if defined GNULIB_POSIXCHECK _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " "strings in multibyte locales - " "use mbstok_r if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strtok_r # if HAVE_RAW_DECL_STRTOK_R _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " "use gnulib module strtok_r for portability"); # endif #endif /* The following functions are not specified by POSIX. They are gnulib extensions. */ #if @GNULIB_MBSLEN@ /* Return the number of multibyte characters in the character string STRING. This considers multibyte characters, unlike strlen, which counts bytes. */ # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ # undef mbslen # endif # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbslen rpl_mbslen # endif _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); # endif _GL_CXXALIASWARN (mbslen); #endif #if @GNULIB_MBSNLEN@ /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) _GL_ARG_NONNULL ((1)); #endif #if @GNULIB_MBSCHR@ /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbschr); #endif #if @GNULIB_MBSRCHR@ /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strrchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbsrchr); #endif #if @GNULIB_MBSSTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. Unlike strstr(), this function works correctly in multibyte locales with encodings different from UTF-8. */ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASECMP@ /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! Unlike strcasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSNCASECMP@ /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! Unlike strncasecmp(), this function works correctly in multibyte locales. But beware that N is not a byte count but a character count! */ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPCASECMP@ /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! Unlike strncasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASESTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! Unlike strcasestr(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCSPN@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strcspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPBRK@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. Unlike strpbrk(), this function works correctly in multibyte locales. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); # else _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); # endif _GL_CXXALIASWARN (mbspbrk); #endif #if @GNULIB_MBSSPN@ /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSSEP@ /* Search the next delimiter (multibyte character listed in the character string DELIM) starting at the character string *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next multibyte character after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of mbstok_r() that supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbstok_r(). */ _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. If STRING is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = mbstok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbssep(). */ _GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif /* Map any int, typically from errno, into an error message. */ #if @GNULIB_STRERROR@ # if @REPLACE_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror # define strerror rpl_strerror # endif _GL_FUNCDECL_RPL (strerror, char *, (int)); _GL_CXXALIAS_RPL (strerror, char *, (int)); # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif _GL_CXXALIASWARN (strerror); #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ _GL_WARN_ON_USE (strerror, "strerror is unportable - " "use gnulib module strerror to guarantee non-NULL result"); #endif /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #endif #if @GNULIB_STRSIGNAL@ # if @REPLACE_STRSIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strsignal rpl_strsignal # endif _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); # else # if ! @HAVE_DECL_STRSIGNAL@ _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is 'const char *'. */ _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); # endif _GL_CXXALIASWARN (strsignal); #elif defined GNULIB_POSIXCHECK # undef strsignal # if HAVE_RAW_DECL_STRSIGNAL _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " "use gnulib module strsignal for portability"); # endif #endif #if @GNULIB_STRVERSCMP@ # if !@HAVE_STRVERSCMP@ _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); _GL_CXXALIASWARN (strverscmp); #elif defined GNULIB_POSIXCHECK # undef strverscmp # if HAVE_RAW_DECL_STRVERSCMP _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " "use gnulib module strverscmp for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ gss-1.0.2/lib/headers/0000755000000000000000000000000011663555055011451 500000000000000gss-1.0.2/lib/headers/gss/0000755000000000000000000000000011663555055012245 500000000000000gss-1.0.2/lib/headers/gss/krb5-ext.h0000644000000000000000000000304211546676457014010 00000000000000/* gss/krb5-ext.h --- Header file for Kerberos 5 GSS-API mechanism. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* * This file contains GNU GSS specific Kerberos V5 related GSS-API * mechanism prototypes. See gss/krb5.h for official prototypes. * */ #ifndef GSS_KRB5_EXT_H # define GSS_KRB5_EXT_H extern gss_OID GSS_KRB5; /* Static symbols for other gss_OID types. These are useful in static declarations. */ extern gss_OID_desc GSS_KRB5_static; extern gss_OID_desc GSS_KRB5_NT_USER_NAME_static; extern gss_OID_desc GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static; extern gss_OID_desc GSS_KRB5_NT_PRINCIPAL_NAME_static; extern gss_OID_desc GSS_KRB5_NT_MACHINE_UID_NAME_static; extern gss_OID_desc GSS_KRB5_NT_STRING_UID_NAME_static; #endif /* GSS_KRB5_EXT_H */ gss-1.0.2/lib/headers/gss/api.h0000644000000000000000000005257111662451560013114 00000000000000/* api.h --- Header file for GSS-API. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* * This file was extracted by Simon Josefsson, for the GSS project, * from RFC 2744, written by John Wray. RFC 2744 contains the * copyright statement below. * * Copyright (C) The Internet Society (2000). All Rights Reserved. * * This document and translations of it may be copied and furnished to * others, and derivative works that comment on or otherwise explain it * or assist in its implementation may be prepared, copied, published * and distributed, in whole or in part, without restriction of any * kind, provided that the above copyright notice and this paragraph are * included on all such copies and derivative works. However, this * document itself may not be modified in any way, such as by removing * the copyright notice or references to the Internet Society or other * Internet organizations, except as needed for the purpose of * developing Internet standards in which case the procedures for * copyrights defined in the Internet Standards process must be * followed, or as required to translate it into languages other than * English. * * The limited permissions granted above are perpetual and will not be * revoked by the Internet Society or its successors or assigns. * * This document and the information contained herein is provided on an * "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING * TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef GSSAPI_H_ #define GSSAPI_H_ /* * First, include stddef.h to get size_t defined. */ #include /* * Now define the three implementation-dependent types. */ typedef struct gss_ctx_id_struct *gss_ctx_id_t; typedef struct gss_cred_id_struct *gss_cred_id_t; typedef struct gss_name_struct *gss_name_t; /* * The following type must be defined as the smallest natural * unsigned integer supported by the platform that has at least * 32 bits of precision. */ #include #if USHRT_MAX >= 4294967295 typedef unsigned short gss_uint32; #elif UINT_MAX >= 4294967295 typedef unsigned int gss_uint32; #else /* unsigned long's must be at least 32 bits according to K&R */ typedef unsigned long gss_uint32; #endif /* * We don't use X/Open definitions, so roll our own. */ typedef gss_uint32 OM_uint32; typedef struct gss_OID_desc_struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID; typedef struct gss_OID_set_desc_struct { size_t count; gss_OID elements; } gss_OID_set_desc, *gss_OID_set; typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t; typedef struct gss_channel_bindings_struct { OM_uint32 initiator_addrtype; gss_buffer_desc initiator_address; OM_uint32 acceptor_addrtype; gss_buffer_desc acceptor_address; gss_buffer_desc application_data; } *gss_channel_bindings_t; /* * For now, define a QOP-type as an OM_uint32 */ typedef OM_uint32 gss_qop_t; typedef int gss_cred_usage_t; /* * Flag bits for context-level services. */ #define GSS_C_DELEG_FLAG 1 #define GSS_C_MUTUAL_FLAG 2 #define GSS_C_REPLAY_FLAG 4 #define GSS_C_SEQUENCE_FLAG 8 #define GSS_C_CONF_FLAG 16 #define GSS_C_INTEG_FLAG 32 #define GSS_C_ANON_FLAG 64 #define GSS_C_PROT_READY_FLAG 128 #define GSS_C_TRANS_FLAG 256 /* * Credential usage options */ #define GSS_C_BOTH 0 #define GSS_C_INITIATE 1 #define GSS_C_ACCEPT 2 /* * Status code types for gss_display_status */ #define GSS_C_GSS_CODE 1 #define GSS_C_MECH_CODE 2 /* * The constant definitions for channel-bindings address families */ #define GSS_C_AF_UNSPEC 0 #define GSS_C_AF_LOCAL 1 #define GSS_C_AF_INET 2 #define GSS_C_AF_IMPLINK 3 #define GSS_C_AF_PUP 4 #define GSS_C_AF_CHAOS 5 #define GSS_C_AF_NS 6 #define GSS_C_AF_NBS 7 #define GSS_C_AF_ECMA 8 #define GSS_C_AF_DATAKIT 9 #define GSS_C_AF_CCITT 10 #define GSS_C_AF_SNA 11 #define GSS_C_AF_DECnet 12 #define GSS_C_AF_DLI 13 #define GSS_C_AF_LAT 14 #define GSS_C_AF_HYLINK 15 #define GSS_C_AF_APPLETALK 16 #define GSS_C_AF_BSC 17 #define GSS_C_AF_DSS 18 #define GSS_C_AF_OSI 19 #define GSS_C_AF_X25 21 #define GSS_C_AF_NULLADDR 255 /* * Various Null values */ #define GSS_C_NO_NAME ((gss_name_t) 0) #define GSS_C_NO_BUFFER ((gss_buffer_t) 0) #define GSS_C_NO_OID ((gss_OID) 0) #define GSS_C_NO_OID_SET ((gss_OID_set) 0) #define GSS_C_NO_CONTEXT ((gss_ctx_id_t) 0) #define GSS_C_NO_CREDENTIAL ((gss_cred_id_t) 0) #define GSS_C_NO_CHANNEL_BINDINGS ((gss_channel_bindings_t) 0) #define GSS_C_EMPTY_BUFFER {0, NULL} /* * Some alternate names for a couple of the above * values. These are defined for V1 compatibility. */ #define GSS_C_NULL_OID GSS_C_NO_OID #define GSS_C_NULL_OID_SET GSS_C_NO_OID_SET /* * Define the default Quality of Protection for per-message * services. Note that an implementation that offers multiple * levels of QOP may define GSS_C_QOP_DEFAULT to be either zero * (as done here) to mean "default protection", or to a specific * explicit QOP value. However, a value of 0 should always be * interpreted by a GSS-API implementation as a request for the * default protection level. */ #define GSS_C_QOP_DEFAULT 0 /* * Expiration time of 2^32-1 seconds means infinite lifetime for a * credential or security context */ #define GSS_C_INDEFINITE 0xfffffffful /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x01"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) user_name(1)}. The constant * GSS_C_NT_USER_NAME should be initialized to point * to that gss_OID_desc. */ extern gss_OID GSS_C_NT_USER_NAME; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x02"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) machine_uid_name(2)}. * The constant GSS_C_NT_MACHINE_UID_NAME should be * initialized to point to that gss_OID_desc. */ extern gss_OID GSS_C_NT_MACHINE_UID_NAME; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x03"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) string_uid_name(3)}. * The constant GSS_C_NT_STRING_UID_NAME should be * initialized to point to that gss_OID_desc. */ extern gss_OID GSS_C_NT_STRING_UID_NAME; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\x01\x05\x06\x02"}, * corresponding to an object-identifier value of * {iso(1) org(3) dod(6) internet(1) security(5) * nametypes(6) gss-host-based-services(2)). The constant * GSS_C_NT_HOSTBASED_SERVICE_X should be initialized to point * to that gss_OID_desc. This is a deprecated OID value, and * implementations wishing to support hostbased-service names * should instead use the GSS_C_NT_HOSTBASED_SERVICE OID, * defined below, to identify such names; * GSS_C_NT_HOSTBASED_SERVICE_X should be accepted a synonym * for GSS_C_NT_HOSTBASED_SERVICE when presented as an input * parameter, but should not be emitted by GSS-API * implementations */ extern gss_OID GSS_C_NT_HOSTBASED_SERVICE_X; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x04"}, corresponding to an * object-identifier value of {iso(1) member-body(2) * Unites States(840) mit(113554) infosys(1) gssapi(2) * generic(1) service_name(4)}. The constant * GSS_C_NT_HOSTBASED_SERVICE should be initialized * to point to that gss_OID_desc. */ extern gss_OID GSS_C_NT_HOSTBASED_SERVICE; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\01\x05\x06\x03"}, * corresponding to an object identifier value of * {1(iso), 3(org), 6(dod), 1(internet), 5(security), * 6(nametypes), 3(gss-anonymous-name)}. The constant * and GSS_C_NT_ANONYMOUS should be initialized to point * to that gss_OID_desc. */ extern gss_OID GSS_C_NT_ANONYMOUS; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\x01\x05\x06\x04"}, * corresponding to an object-identifier value of * {1(iso), 3(org), 6(dod), 1(internet), 5(security), * 6(nametypes), 4(gss-api-exported-name)}. The constant * GSS_C_NT_EXPORT_NAME should be initialized to point * to that gss_OID_desc. */ extern gss_OID GSS_C_NT_EXPORT_NAME; /* Major status codes */ #define GSS_S_COMPLETE 0 /* * Some "helper" definitions to make the status code macros obvious. */ #define GSS_C_CALLING_ERROR_OFFSET 24 #define GSS_C_ROUTINE_ERROR_OFFSET 16 #define GSS_C_SUPPLEMENTARY_OFFSET 0 #define GSS_C_CALLING_ERROR_MASK 0377ul #define GSS_C_ROUTINE_ERROR_MASK 0377ul #define GSS_C_SUPPLEMENTARY_MASK 0177777ul /* * The macros that test status codes for error conditions. * Note that the GSS_ERROR() macro has changed slightly from * the V1 GSS-API so that it now evaluates its argument * only once. */ #define GSS_CALLING_ERROR(x) \ (x & (GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET)) #define GSS_ROUTINE_ERROR(x) \ (x & (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET)) #define GSS_SUPPLEMENTARY_INFO(x) \ (x & (GSS_C_SUPPLEMENTARY_MASK << GSS_C_SUPPLEMENTARY_OFFSET)) #define GSS_ERROR(x) \ (x & ((GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET) | \ (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET))) /* * Now the actual status code definitions */ /* * Calling errors: */ #define GSS_S_CALL_INACCESSIBLE_READ (1ul << GSS_C_CALLING_ERROR_OFFSET) #define GSS_S_CALL_INACCESSIBLE_WRITE (2ul << GSS_C_CALLING_ERROR_OFFSET) #define GSS_S_CALL_BAD_STRUCTURE (3ul << GSS_C_CALLING_ERROR_OFFSET) /* * Routine errors: */ #define GSS_S_BAD_MECH (1ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_NAME (2ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_NAMETYPE (3ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_BINDINGS (4ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_STATUS (5ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_SIG (6ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_MIC GSS_S_BAD_SIG #define GSS_S_NO_CRED (7ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_NO_CONTEXT (8ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_DEFECTIVE_TOKEN (9ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_DEFECTIVE_CREDENTIAL (10ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_CREDENTIALS_EXPIRED (11ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_CONTEXT_EXPIRED (12ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_FAILURE (13ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_QOP (14ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_UNAUTHORIZED (15ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_UNAVAILABLE (16ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_DUPLICATE_ELEMENT (17ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_NAME_NOT_MN (18ul << GSS_C_ROUTINE_ERROR_OFFSET) /* * Supplementary info bits: */ #define GSS_S_CONTINUE_NEEDED (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 0)) #define GSS_S_DUPLICATE_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 1)) #define GSS_S_OLD_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 2)) #define GSS_S_UNSEQ_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 3)) #define GSS_S_GAP_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 4)) /* * Finally, function prototypes for the GSS-API routines. */ OM_uint32 gss_acquire_cred (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec); OM_uint32 gss_release_cred (OM_uint32 * minor_status, gss_cred_id_t * cred_handle); OM_uint32 gss_init_sec_context (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec); OM_uint32 gss_accept_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle); OM_uint32 gss_process_context_token (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t token_buffer); OM_uint32 gss_delete_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token); OM_uint32 gss_context_time (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec); OM_uint32 gss_get_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token); OM_uint32 gss_verify_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state); OM_uint32 gss_wrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer); OM_uint32 gss_unwrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, gss_qop_t * qop_state); OM_uint32 gss_display_status (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string); OM_uint32 gss_indicate_mechs (OM_uint32 * minor_status, gss_OID_set * mech_set); OM_uint32 gss_compare_name (OM_uint32 * minor_status, const gss_name_t name1, const gss_name_t name2, int *name_equal); OM_uint32 gss_display_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t output_name_buffer, gss_OID * output_name_type); OM_uint32 gss_import_name (OM_uint32 * minor_status, const gss_buffer_t input_name_buffer, const gss_OID input_name_type, gss_name_t * output_name); OM_uint32 gss_export_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name); OM_uint32 gss_release_name (OM_uint32 * minor_status, gss_name_t * name); OM_uint32 gss_release_buffer (OM_uint32 * minor_status, gss_buffer_t buffer); OM_uint32 gss_release_oid_set (OM_uint32 * minor_status, gss_OID_set * set); OM_uint32 gss_inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms); OM_uint32 gss_inquire_context (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_name_t * src_name, gss_name_t * targ_name, OM_uint32 * lifetime_rec, gss_OID * mech_type, OM_uint32 * ctx_flags, int *locally_initiated, int *open); OM_uint32 gss_wrap_size_limit (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, OM_uint32 req_output_size, OM_uint32 * max_input_size); OM_uint32 gss_add_cred (OM_uint32 * minor_status, const gss_cred_id_t input_cred_handle, const gss_name_t desired_name, const gss_OID desired_mech, gss_cred_usage_t cred_usage, OM_uint32 initiator_time_req, OM_uint32 acceptor_time_req, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * initiator_time_rec, OM_uint32 * acceptor_time_rec); OM_uint32 gss_inquire_cred_by_mech (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage); OM_uint32 gss_export_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t interprocess_token); OM_uint32 gss_import_sec_context (OM_uint32 * minor_status, const gss_buffer_t interprocess_token, gss_ctx_id_t * context_handle); OM_uint32 gss_create_empty_oid_set (OM_uint32 * minor_status, gss_OID_set * oid_set); OM_uint32 gss_add_oid_set_member (OM_uint32 * minor_status, const gss_OID member_oid, gss_OID_set * oid_set); OM_uint32 gss_test_oid_set_member (OM_uint32 * minor_status, const gss_OID member, const gss_OID_set set, int *present); OM_uint32 gss_inquire_names_for_mech (OM_uint32 * minor_status, const gss_OID mechanism, gss_OID_set * name_types); OM_uint32 gss_inquire_mechs_for_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_OID_set * mech_types); OM_uint32 gss_canonicalize_name (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name); OM_uint32 gss_duplicate_name (OM_uint32 * minor_status, const gss_name_t src_name, gss_name_t * dest_name); /* * The following routines are obsolete variants of gss_get_mic, * gss_verify_mic, gss_wrap and gss_unwrap. They should be * provided by GSS-API V2 implementations for backwards * compatibility with V1 applications. Distinct entrypoints * (as opposed to #defines) should be provided, both to allow * GSS-API V1 applications to link against GSS-API V2 implementations, * and to retain the slight parameter type differences between the * obsolete versions of these routines and their current forms. */ OM_uint32 gss_sign (OM_uint32 * minor_status, gss_ctx_id_t context_handle, int qop_req, gss_buffer_t message_buffer, gss_buffer_t message_token); OM_uint32 gss_verify (OM_uint32 * minor_status, gss_ctx_id_t context_handle, gss_buffer_t message_buffer, gss_buffer_t token_buffer, int *qop_state); OM_uint32 gss_seal (OM_uint32 * minor_status, gss_ctx_id_t context_handle, int conf_req_flag, int qop_req, gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer); OM_uint32 gss_unseal (OM_uint32 * minor_status, gss_ctx_id_t context_handle, gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, int *qop_state); /* RFC 5801 SASL GS2 interfaces. */ OM_uint32 gss_inquire_saslname_for_mech (OM_uint32 * minor_status, const gss_OID desired_mech, gss_buffer_t sasl_mech_name, gss_buffer_t mech_name, gss_buffer_t mech_description); OM_uint32 gss_inquire_mech_for_saslname (OM_uint32 * minor_status, const gss_buffer_t sasl_mech_name, gss_OID * mech_type); /* RFC 5587 const typedefs. */ typedef const gss_buffer_desc *gss_const_buffer_t; typedef const struct gss_channel_bindings_struct *gss_const_channel_bindings_t; typedef const struct gss_ctx_id_struct *gss_const_ctx_id_t; typedef const struct gss_cred_id_struct *gss_const_cred_id_t; typedef const struct gss_name_struct *gss_const_name_t; typedef const gss_OID_desc *gss_const_OID; typedef const gss_OID_set_desc *gss_const_OID_set; /* RFC 6339 interfaces. */ extern int gss_oid_equal (gss_const_OID first_oid, gss_const_OID second_oid); OM_uint32 gss_encapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token); OM_uint32 gss_decapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token); #endif /* GSSAPI_H_ */ gss-1.0.2/lib/headers/gss/ext.h0000644000000000000000000000320711662451433013132 00000000000000/* ext.h --- Header file for non-standard GSS-API functions. * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #ifndef GSS_EXT_H_ #define GSS_EXT_H_ /* Get size_t. */ #include /* See version.c. */ extern const char *gss_check_version (const char *req_version); /* See ext.c. */ extern int gss_userok (const gss_name_t name, const char *username); /* Static versions of the public OIDs for use, e.g., in static variable initalization. See oid.c. */ extern gss_OID_desc GSS_C_NT_USER_NAME_static; extern gss_OID_desc GSS_C_NT_MACHINE_UID_NAME_static; extern gss_OID_desc GSS_C_NT_STRING_UID_NAME_static; extern gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_X_static; extern gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_static; extern gss_OID_desc GSS_C_NT_ANONYMOUS_static; extern gss_OID_desc GSS_C_NT_EXPORT_NAME_static; #endif gss-1.0.2/lib/headers/gss/krb5.h0000644000000000000000000001020711546676457013213 00000000000000/* gss/krb5.h --- Header file for Kerberos 5 GSS-API mechanism. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* * This file contains official Kerberos V5 GSS-API mechanism related * prototypes defined as in RFC 1964 and RFC 4121. For GNU GSS * specific extensions, see gss/krb5-ext.h. * */ #ifndef GSS_KRB5_H # define GSS_KRB5_H /* 4.1.1. Non-Kerberos-specific codes */ #define GSS_KRB5_S_G_BAD_SERVICE_NAME 1 /* "No @ in SERVICE-NAME name string" */ #define GSS_KRB5_S_G_BAD_STRING_UID 2 /* "STRING-UID-NAME contains nondigits" */ #define GSS_KRB5_S_G_NOUSER 3 /* "UID does not resolve to username" */ #define GSS_KRB5_S_G_VALIDATE_FAILED 4 /* "Validation error" */ #define GSS_KRB5_S_G_BUFFER_ALLOC 5 /* "Couldn't allocate gss_buffer_t data" */ #define GSS_KRB5_S_G_BAD_MSG_CTX 6 /* "Message context invalid" */ #define GSS_KRB5_S_G_WRONG_SIZE 7 /* "Buffer is the wrong size" */ #define GSS_KRB5_S_G_BAD_USAGE 8 /* "Credential usage type is unknown" */ #define GSS_KRB5_S_G_UNKNOWN_QOP 9 /* "Unknown quality of protection specified" */ /* 4.1.2. Kerberos-specific-codes */ #define GSS_KRB5_S_KG_CCACHE_NOMATCH 10 /* "Principal in credential cache does not match desired name" */ #define GSS_KRB5_S_KG_KEYTAB_NOMATCH 11 /* "No principal in keytab matches desired name" */ #define GSS_KRB5_S_KG_TGT_MISSING 12 /* "Credential cache has no TGT" */ #define GSS_KRB5_S_KG_NO_SUBKEY 13 /* "Authenticator has no subkey" */ #define GSS_KRB5_S_KG_CONTEXT_ESTABLISHED 14 /* "Context is already fully established" */ #define GSS_KRB5_S_KG_BAD_SIGN_TYPE 15 /* "Unknown signature type in token" */ #define GSS_KRB5_S_KG_BAD_LENGTH 16 /* "Invalid field length in token" */ #define GSS_KRB5_S_KG_CTX_INCOMPLETE 17 /* "Attempt to use incomplete security context" */ /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) user_name(1)}. The recommended symbolic name * for this type is "GSS_KRB5_NT_USER_NAME". */ extern gss_OID GSS_KRB5_NT_USER_NAME; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) service_name(4)}. The previously recommended * symbolic name for this type is * "GSS_KRB5_NT_HOSTBASED_SERVICE_NAME". The currently preferred * symbolic name for this type is "GSS_C_NT_HOSTBASED_SERVICE". */ extern gss_OID GSS_KRB5_NT_HOSTBASED_SERVICE_NAME; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) krb5(2) krb5_name(1)}. The recommended symbolic name for * this type is "GSS_KRB5_NT_PRINCIPAL_NAME". */ extern gss_OID GSS_KRB5_NT_PRINCIPAL_NAME; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) machine_uid_name(2)}. The recommended * symbolic name for this type is "GSS_KRB5_NT_MACHINE_UID_NAME". */ extern gss_OID GSS_KRB5_NT_MACHINE_UID_NAME; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) string_uid_name(3)}. The recommended symbolic * name for this type is "GSS_KRB5_NT_STRING_UID_NAME". */ extern gss_OID GSS_KRB5_NT_STRING_UID_NAME; #endif /* GSS_KRB5_H */ gss-1.0.2/lib/headers/gss.h0000644000000000000000000000470711663554717012352 00000000000000/* gss.h --- Header file for GSSLib. -*- c -*- * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #ifndef _GSS_H #define _GSS_H # ifdef __cplusplus extern "C" { # endif /** * GSS_VERSION * * Pre-processor symbol with a string that describe the header file * version number. Used together with gss_check_version() to verify * header file and run-time library consistency. */ # define GSS_VERSION "1.0.2" /** * GSS_VERSION_MAJOR * * Pre-processor symbol with a decimal value that describe the major * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 1. */ # define GSS_VERSION_MAJOR 1 /** * GSS_VERSION_MINOR * * Pre-processor symbol with a decimal value that describe the minor * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 2. */ # define GSS_VERSION_MINOR 0 /** * GSS_VERSION_PATCH * * Pre-processor symbol with a decimal value that describe the patch * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 3. */ # define GSS_VERSION_PATCH 2 /** * GSS_VERSION_NUMBER * * Pre-processor symbol with a hexadecimal value describing the * header file version number. For example, when the header version * is 1.2.3 this symbol will have the value 0x010203. */ # define GSS_VERSION_NUMBER 0x010002 # include # include /* *INDENT-OFF* */ # include # include /* *INDENT-ON* */ # ifdef __cplusplus } # endif #endif /* _GSS_H */ gss-1.0.2/lib/headers/gss.h.in0000644000000000000000000000476511546676457012771 00000000000000/* gss.h --- Header file for GSSLib. -*- c -*- * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #ifndef _GSS_H #define _GSS_H # ifdef __cplusplus extern "C" { # endif /** * GSS_VERSION * * Pre-processor symbol with a string that describe the header file * version number. Used together with gss_check_version() to verify * header file and run-time library consistency. */ # define GSS_VERSION "@VERSION@" /** * GSS_VERSION_MAJOR * * Pre-processor symbol with a decimal value that describe the major * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 1. */ # define GSS_VERSION_MAJOR @VERSION_MAJOR@ /** * GSS_VERSION_MINOR * * Pre-processor symbol with a decimal value that describe the minor * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 2. */ # define GSS_VERSION_MINOR @VERSION_MINOR@ /** * GSS_VERSION_PATCH * * Pre-processor symbol with a decimal value that describe the patch * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 3. */ # define GSS_VERSION_PATCH @VERSION_PATCH@ /** * GSS_VERSION_NUMBER * * Pre-processor symbol with a hexadecimal value describing the * header file version number. For example, when the header version * is 1.2.3 this symbol will have the value 0x010203. */ # define GSS_VERSION_NUMBER @VERSION_NUMBER@ # include # include /* *INDENT-OFF* */ @INCLUDE_GSS_KRB5@ @INCLUDE_GSS_KRB5_EXT@ /* *INDENT-ON* */ # ifdef __cplusplus } # endif #endif /* _GSS_H */ gss-1.0.2/lib/Makefile.am0000644000000000000000000000400011546676326012011 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. SUBDIRS = gl AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/lib/gl \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers lib_LTLIBRARIES = libgss.la include_HEADERS = headers/gss.h gssincludedir=$(includedir)/gss gssinclude_HEADERS = headers/gss/api.h headers/gss/ext.h libgss_la_SOURCES = libgss.map \ internal.h \ meta.h meta.c \ context.c cred.c error.c misc.c msg.c name.c obsolete.c oid.c \ asn1.c ext.c version.c \ saslname.c libgss_la_LIBADD = @LTLIBINTL@ gl/libgnu.la libgss_la_LDFLAGS = -no-undefined \ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) if HAVE_LD_VERSION_SCRIPT libgss_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libgss.map else libgss_la_LDFLAGS += -export-symbols-regex '^(gss|GSS).*' endif if HAVE_LD_OUTPUT_DEF libgss_la_LDFLAGS += -Wl,--output-def,libgss-$(DLL_VERSION).def defexecdir = $(bindir) defexec_DATA = libgss-$(DLL_VERSION).def DISTCLEANFILES = $(defexec_DATA) endif if KRB5 SUBDIRS += krb5 gssinclude_HEADERS += headers/gss/krb5.h headers/gss/krb5-ext.h libgss_la_LIBADD += krb5/libgss-shishi.la endif localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ gss-1.0.2/lib/internal.h0000644000000000000000000000361111546676340011745 00000000000000/* internal.h --- Internal header file for GSS. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #ifndef _INTERNAL_H #define _INTERNAL_H #include "config.h" #include #include #include #include #include #include #include /* Get i18n. */ #include #define _(String) dgettext (PACKAGE PO_SUFFIX, String) #define gettext_noop(String) String #define N_(String) gettext_noop (String) /* Get specification. */ #include typedef struct gss_name_struct { size_t length; char *value; gss_OID type; } gss_name_desc; typedef struct gss_cred_id_struct { gss_OID mech; #ifdef USE_KERBEROS5 struct _gss_krb5_cred_struct *krb5; #endif } gss_cred_id_desc; typedef struct gss_ctx_id_struct { gss_OID mech; #ifdef USE_KERBEROS5 struct _gss_krb5_ctx_struct *krb5; #endif } gss_ctx_id_desc; /* asn1.c */ extern OM_uint32 _gss_encapsulate_token_prefix (const char *prefix, size_t prefixlen, const char *in, size_t inlen, const char *oid, OM_uint32 oidlen, void **out, size_t * outlen); #endif /* _INTERNAL_H */ gss-1.0.2/lib/libgss.map0000644000000000000000000000552311546676326011752 00000000000000# Copyright (C) 2009-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. GSS_1.0.0 { global: # Standard interfaces RFC 2744: GSS_C_NT_ANONYMOUS; GSS_C_NT_EXPORT_NAME; GSS_C_NT_HOSTBASED_SERVICE; GSS_C_NT_HOSTBASED_SERVICE_X; GSS_C_NT_MACHINE_UID_NAME; GSS_C_NT_STRING_UID_NAME; GSS_C_NT_USER_NAME; gss_accept_sec_context; gss_acquire_cred; gss_add_cred; gss_add_oid_set_member; gss_canonicalize_name; gss_compare_name; gss_context_time; gss_create_empty_oid_set; gss_delete_sec_context; gss_display_name; gss_display_status; gss_duplicate_name; gss_export_name; gss_export_sec_context; gss_get_mic; gss_import_name; gss_import_sec_context; gss_indicate_mechs; gss_init_sec_context; gss_inquire_context; gss_inquire_cred; gss_inquire_cred_by_mech; gss_inquire_mechs_for_name; gss_inquire_names_for_mech; gss_process_context_token; gss_release_buffer; gss_release_cred; gss_release_name; gss_release_oid_set; gss_seal; gss_sign; gss_test_oid_set_member; gss_unseal; gss_unwrap; gss_verify; gss_verify_mic; gss_wrap; gss_wrap_size_limit; # SASL GS2 interfaces RFC 5801: gss_inquire_mech_for_saslname; gss_inquire_saslname_for_mech; # GNU GSS extensions: GSS_C_NT_ANONYMOUS_static; GSS_C_NT_EXPORT_NAME_static; GSS_C_NT_HOSTBASED_SERVICE_X_static; GSS_C_NT_HOSTBASED_SERVICE_static; GSS_C_NT_MACHINE_UID_NAME_static; GSS_C_NT_STRING_UID_NAME_static; GSS_C_NT_USER_NAME_static; gss_check_version; gss_decapsulate_token; gss_encapsulate_token; gss_oid_equal; gss_userok; # Kerberos V5 standard interface: GSS_KRB5_NT_HOSTBASED_SERVICE_NAME; GSS_KRB5_NT_MACHINE_UID_NAME; GSS_KRB5_NT_PRINCIPAL_NAME; GSS_KRB5_NT_STRING_UID_NAME; GSS_KRB5_NT_USER_NAME; # GNU GSS Kerberos V5 extensions: GSS_KRB5; GSS_KRB5_NT_MACHINE_UID_NAME_static; GSS_KRB5_NT_PRINCIPAL_NAME_static; GSS_KRB5_NT_STRING_UID_NAME_static; GSS_KRB5_NT_USER_NAME_static; GSS_KRB5_static; local: *; }; gss-1.0.2/lib/name.c0000644000000000000000000004461611546676340011056 00000000000000/* name.c --- Implementation of GSS-API Name Manipulation functions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech */ #include "meta.h" /** * gss_import_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @input_name_buffer: (buffer, octet-string, read) Buffer containing * contiguous string name to convert. * @input_name_type: (Object ID, read, optional) Object ID specifying * type of printable name. Applications may specify either * GSS_C_NO_OID to use a mechanism-specific default printable * syntax, or an OID recognized by the GSS-API implementation to * name a specific namespace. * @output_name: (gss_name_t, modify) Returned name in internal form. * Storage associated with this name must be freed by the * application after use with a call to gss_release_name(). * * Convert a contiguous string name to internal form. In general, the * internal name returned (via the @output_name parameter) will not * be an MN; the exception to this is if the @input_name_type * indicates that the contiguous string provided via the * @input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in * which case the returned internal name will be an MN for the * mechanism that exported the name. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAMETYPE`: The input_name_type was unrecognized. * * `GSS_S_BAD_NAME`: The input_name parameter could not be interpreted * as a name of the specified type. * * `GSS_S_BAD_MECH`: The input name-type was GSS_C_NT_EXPORT_NAME, but * the mechanism contained within the input-name is not supported. **/ OM_uint32 gss_import_name (OM_uint32 * minor_status, const gss_buffer_t input_name_buffer, const gss_OID input_name_type, gss_name_t * output_name) { if (!output_name) { if (minor_status) *minor_status = 0; return GSS_S_BAD_NAME | GSS_S_CALL_INACCESSIBLE_WRITE; } *output_name = malloc (sizeof (**output_name)); if (!*output_name) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*output_name)->length = input_name_buffer->length; (*output_name)->value = malloc (input_name_buffer->length); if (!(*output_name)->value) { free (*output_name); if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy ((*output_name)->value, input_name_buffer->value, input_name_buffer->length); (*output_name)->type = input_name_type; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /** * gss_display_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @input_name: (gss_name_t, read) Name to be displayed. * @output_name_buffer: (buffer, character-string, modify) Buffer to * receive textual name string. The application must free storage * associated with this name after use with a call to * gss_release_buffer(). * @output_name_type: (Object ID, modify, optional) The type of the * returned name. The returned gss_OID will be a pointer into * static storage, and should be treated as read-only by the caller * (in particular, the application should not attempt to free * it). Specify NULL if not required. * * Allows an application to obtain a textual representation of an * opaque internal-form name for display purposes. The syntax of a * printable name is defined by the GSS-API implementation. * * If input_name denotes an anonymous principal, the implementation * should return the gss_OID value GSS_C_NT_ANONYMOUS as the * output_name_type, and a textual name that is syntactically distinct * from all valid supported printable names in output_name_buffer. * * If input_name was created by a call to gss_import_name, specifying * GSS_C_NO_OID as the name-type, implementations that employ lazy * conversion between name types may return GSS_C_NO_OID via the * output_name_type parameter. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAME`: @input_name was ill-formed. **/ OM_uint32 gss_display_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t output_name_buffer, gss_OID * output_name_type) { if (!input_name) { if (minor_status) *minor_status = 0; return GSS_S_BAD_NAME; } output_name_buffer->length = input_name->length; output_name_buffer->value = malloc (input_name->length + 1); if (!output_name_buffer->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } if (input_name->value) memcpy (output_name_buffer->value, input_name->value, input_name->length); if (output_name_type) *output_name_type = input_name->type; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /** * gss_compare_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @name1: (gss_name_t, read) Internal-form name. * @name2: (gss_name_t, read) Internal-form name. * @name_equal: (boolean, modify) Non-zero - names refer to same * entity. Zero - names refer to different entities (strictly, the * names are not known to refer to the same identity). * * Allows an application to compare two internal-form names to * determine whether they refer to the same entity. * * If either name presented to gss_compare_name denotes an anonymous * principal, the routines should indicate that the two names do not * refer to the same identity. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAMETYPE`: The two names were of incomparable types. * * `GSS_S_BAD_NAME`: One or both of name1 or name2 was ill-formed. **/ OM_uint32 gss_compare_name (OM_uint32 * minor_status, const gss_name_t name1, const gss_name_t name2, int *name_equal) { if (minor_status) *minor_status = 0; if (!name1 || !name2) return GSS_S_BAD_NAME | GSS_S_CALL_INACCESSIBLE_READ; if (!gss_oid_equal (name1->type, name2->type)) return GSS_S_BAD_NAMETYPE; if (name_equal) *name_equal = (name1->length == name2->length) && memcmp (name1->value, name2->value, name1->length) == 0; return GSS_S_COMPLETE; } /** * gss_release_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @name: (gss_name_t, modify) The name to be deleted. * * Free GSSAPI-allocated storage associated with an internal-form * name. The name is set to GSS_C_NO_NAME on successful completion of * this call. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAME`: The name parameter did not contain a valid name. **/ OM_uint32 gss_release_name (OM_uint32 * minor_status, gss_name_t * name) { if (minor_status) *minor_status = 0; if (!name) return GSS_S_BAD_NAME | GSS_S_CALL_INACCESSIBLE_READ; if (*name != GSS_C_NO_NAME) { if ((*name)->value) free ((*name)->value); free (*name); *name = GSS_C_NO_NAME; } return GSS_S_COMPLETE; } /** * gss_inquire_names_for_mech: * @minor_status: (Integer, modify) Mechanism specific status code. * @mechanism: (gss_OID, read) The mechanism to be interrogated. * @name_types: (gss_OID_set, modify) Set of name-types supported by * the specified mechanism. The returned OID set must be freed by * the application after use with a call to gss_release_oid_set(). * * Returns the set of nametypes supported by the specified mechanism. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_inquire_names_for_mech (OM_uint32 * minor_status, const gss_OID mechanism, gss_OID_set * name_types) { OM_uint32 maj_stat; _gss_mech_api_t mech; int i; mech = _gss_find_mech (mechanism); maj_stat = gss_create_empty_oid_set (minor_status, name_types); if (maj_stat != GSS_S_COMPLETE) return maj_stat; for (i = 0; mech->name_types[i]; i++) { maj_stat = gss_add_oid_set_member (minor_status, mech->name_types[i], name_types); if (maj_stat != GSS_S_COMPLETE) { gss_release_oid_set (minor_status, name_types); return maj_stat; } } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /* Add mechanism MECH to OID set MECH_TYPES if mechanism MECH support the NAME_TYPE name type. */ static OM_uint32 _gss_inquire_mechs_for_name3 (OM_uint32 * minor_status, gss_OID mech, gss_OID name_type, gss_OID_set * mech_types) { gss_OID_set oids; int supported; OM_uint32 maj_stat; maj_stat = gss_inquire_names_for_mech (minor_status, mech, &oids); if (GSS_ERROR (maj_stat)) return maj_stat; maj_stat = gss_test_oid_set_member (minor_status, name_type, oids, &supported); gss_release_oid_set (minor_status, &oids); if (GSS_ERROR (maj_stat)) return maj_stat; if (supported) { maj_stat = gss_add_oid_set_member (minor_status, mech, mech_types); if (GSS_ERROR (maj_stat)) return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /* Iterate over SUPPORTED_MECH_TYPES and invoke gss_inquire_mechs_for_name3 on each type, thus adding all mechanism OIDs, that support the NAME_TYPE name type, to OUT_MECH_TYPES. */ static OM_uint32 _gss_inquire_mechs_for_name2 (OM_uint32 * minor_status, gss_OID name_type, gss_OID_set * out_mech_types, gss_OID_set supported_mech_types) { OM_uint32 maj_stat; size_t i; for (i = 0; i < supported_mech_types->count; i++) { maj_stat = _gss_inquire_mechs_for_name3 (minor_status, &(supported_mech_types->elements)[i], name_type, out_mech_types); if (GSS_ERROR (maj_stat)) return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /* List all supported mechanisms, and invoke gss_inquire_mechs_for_name2, thus adding all mechanism OIDs, that support the NAME_TYPE name type, to OUT_MECH_TYPES. */ static OM_uint32 _gss_inquire_mechs_for_name1 (OM_uint32 * minor_status, gss_OID name_type, gss_OID_set * out_mech_types) { OM_uint32 maj_stat; gss_OID_set supported_mech_types; maj_stat = gss_indicate_mechs (minor_status, &supported_mech_types); if (GSS_ERROR (maj_stat)) return maj_stat; maj_stat = _gss_inquire_mechs_for_name2 (minor_status, name_type, out_mech_types, supported_mech_types); gss_release_oid_set (minor_status, &supported_mech_types); if (GSS_ERROR (maj_stat)) return maj_stat; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /** * gss_inquire_mechs_for_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @input_name: (gss_name_t, read) The name to which the inquiry * relates. * @mech_types: (gss_OID_set, modify) Set of mechanisms that may * support the specified name. The returned OID set must be freed * by the caller after use with a call to gss_release_oid_set(). * * Returns the set of mechanisms supported by the GSS-API * implementation that may be able to process the specified name. * * Each mechanism returned will recognize at least one element within * the name. It is permissible for this routine to be implemented * within a mechanism-independent GSS-API layer, using the type * information contained within the presented name, and based on * registration information provided by individual mechanism * implementations. This means that the returned mech_types set may * indicate that a particular mechanism will understand the name when * in fact it would refuse to accept the name as input to * gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or * gss_add_cred (due to some property of the specific name, as opposed * to the name type). Thus this routine should be used only as a * prefilter for a call to a subsequent mechanism-specific routine. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAME`: The input_name parameter was ill-formed. * * `GSS_S_BAD_NAMETYPE`: The input_name parameter contained an invalid * or unsupported type of name. **/ OM_uint32 gss_inquire_mechs_for_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_OID_set * mech_types) { OM_uint32 maj_stat; if (input_name == GSS_C_NO_NAME) { if (minor_status) *minor_status = 0; return GSS_S_BAD_NAME | GSS_S_CALL_INACCESSIBLE_READ; } maj_stat = gss_create_empty_oid_set (minor_status, mech_types); if (GSS_ERROR (maj_stat)) return maj_stat; maj_stat = _gss_inquire_mechs_for_name1 (minor_status, input_name->type, mech_types); if (GSS_ERROR (maj_stat)) { gss_release_oid_set (minor_status, mech_types); return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /** * gss_export_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @input_name: (gss_name_t, read) The MN to be exported. * @exported_name: (gss_buffer_t, octet-string, modify) The canonical * contiguous string form of @input_name. Storage associated with * this string must freed by the application after use with * gss_release_buffer(). * * To produce a canonical contiguous string representation of a * mechanism name (MN), suitable for direct comparison (e.g. with * memcmp) for use in authorization functions (e.g. matching entries * in an access-control list). The @input_name parameter must specify * a valid MN (i.e. an internal name generated by * gss_accept_sec_context() or by gss_canonicalize_name()). * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NAME_NOT_MN`: The provided internal name was not a mechanism * name. * * `GSS_S_BAD_NAME`: The provided internal name was ill-formed. * * `GSS_S_BAD_NAMETYPE`: The internal name was of a type not supported * by the GSS-API implementation. **/ OM_uint32 gss_export_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name) { OM_uint32 maj_stat; gss_OID_set mechs; _gss_mech_api_t mech; maj_stat = gss_inquire_mechs_for_name (minor_status, input_name, &mechs); if (GSS_ERROR (maj_stat)) return maj_stat; if (mechs->count == 0) { if (minor_status) *minor_status = 0; return GSS_S_BAD_NAMETYPE; } /* We just select a random mechanism that support this name-type. I'm not sure how we can be more predicatable, given the definition of this function. */ mech = _gss_find_mech (mechs->elements); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->export_name (minor_status, input_name, exported_name); } /** * gss_canonicalize_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @input_name: (gss_name_t, read) The name for which a canonical form * is desired. * @mech_type: (Object ID, read) The authentication mechanism for * which the canonical form of the name is desired. The desired * mechanism must be specified explicitly; no default is provided. * @output_name: (gss_name_t, modify) The resultant canonical name. * Storage associated with this name must be freed by the * application after use with a call to gss_release_name(). * * Generate a canonical mechanism name (MN) from an arbitrary internal * name. The mechanism name is the name that would be returned to a * context acceptor on successful authentication of a context where * the initiator used the input_name in a successful call to * gss_acquire_cred, specifying an OID set containing @mech_type as * its only member, followed by a call to gss_init_sec_context(), * specifying @mech_type as the authentication mechanism. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_canonicalize_name (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name) { _gss_mech_api_t mech; mech = _gss_find_mech (mech_type); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->canonicalize_name (minor_status, input_name, mech_type, output_name); } /** * gss_duplicate_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @src_name: (gss_name_t, read) Internal name to be duplicated. * @dest_name: (gss_name_t, modify) The resultant copy of @src_name. * Storage associated with this name must be freed by the application * after use with a call to gss_release_name(). * * Create an exact duplicate of the existing internal name @src_name. * The new @dest_name will be independent of src_name (i.e. @src_name * and @dest_name must both be released, and the release of one shall * not affect the validity of the other). * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAME`: The src_name parameter was ill-formed. **/ OM_uint32 gss_duplicate_name (OM_uint32 * minor_status, const gss_name_t src_name, gss_name_t * dest_name) { if (src_name == GSS_C_NO_NAME) { if (minor_status) *minor_status = 0; return GSS_S_BAD_NAME; } if (!dest_name) { if (minor_status) *minor_status = 0; return GSS_S_FAILURE | GSS_S_CALL_INACCESSIBLE_WRITE; } *dest_name = malloc (sizeof (**dest_name)); if (!*dest_name) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*dest_name)->type = src_name->type; (*dest_name)->length = src_name->length; (*dest_name)->value = malloc (src_name->length + 1); if (!(*dest_name)->value) { free (*dest_name); if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy ((*dest_name)->value, src_name->value, src_name->length); (*dest_name)->value[src_name->length] = '\0'; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } gss-1.0.2/lib/asn1.c0000644000000000000000000001652011662454434010766 00000000000000/* asn1.c --- Wrapper around pseudo-ASN.1 token format. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* * The following two functions borrowed from libtasn.1, under LGPL. * Copyright (C) 2002 Fabio Fiorina. */ static void _gss_asn1_length_der (size_t len, unsigned char *ans, size_t * ans_len) { size_t k; unsigned char temp[sizeof (len)]; if (len < 128) { if (ans != NULL) ans[0] = (unsigned char) len; *ans_len = 1; } else { k = 0; while (len) { temp[k++] = len & 0xFF; len = len >> 8; } *ans_len = k + 1; if (ans != NULL) { ans[0] = ((unsigned char) k & 0x7F) + 128; while (k--) ans[*ans_len - 1 - k] = temp[k]; } } } static size_t _gss_asn1_get_length_der (const char *der, size_t der_len, size_t * len) { size_t ans; size_t k, punt; *len = 0; if (der_len <= 0) return 0; if (!(der[0] & 128)) { /* short form */ *len = 1; return (unsigned char) der[0]; } else { /* Long form */ k = (unsigned char) der[0] & 0x7F; punt = 1; if (k) { /* definite length method */ ans = 0; while (punt <= k && punt < der_len) { size_t last = ans; ans = ans * 256 + (unsigned char) der[punt++]; if (ans < last) /* we wrapped around, no bignum support... */ return -2; } } else { /* indefinite length method */ ans = -1; } *len = punt; return ans; } } OM_uint32 _gss_encapsulate_token_prefix (const char *prefix, size_t prefixlen, const char *in, size_t inlen, const char *oid, OM_uint32 oidlen, void **out, size_t * outlen) { size_t oidlenlen; size_t asn1len, asn1lenlen; unsigned char *p; if (prefix == NULL) prefixlen = 0; _gss_asn1_length_der (oidlen, NULL, &oidlenlen); asn1len = 1 + oidlenlen + oidlen + prefixlen + inlen; _gss_asn1_length_der (asn1len, NULL, &asn1lenlen); *outlen = 1 + asn1lenlen + asn1len; p = *out = malloc (*outlen); if (!p) return -1; *p++ = '\x60'; _gss_asn1_length_der (asn1len, p, &asn1lenlen); p += asn1lenlen; *p++ = '\x06'; _gss_asn1_length_der (oidlen, p, &oidlenlen); p += oidlenlen; memcpy (p, oid, oidlen); p += oidlen; if (prefixlen > 0) { memcpy (p, prefix, prefixlen); p += prefixlen; } memcpy (p, in, inlen); return 0; } /** * gss_encapsulate_token: * @input_token: (buffer, opaque, read) Buffer with GSS-API context token data. * @token_oid: (Object ID, read) Object identifier of token. * @output_token: (buffer, opaque, modify) Encapsulated token data; * caller must release with gss_release_buffer(). * * Add the mechanism-independent token header to GSS-API context token * data. This is used for the initial token of a GSS-API context * establishment sequence. It incorporates an identifier of the * mechanism type to be used on that context, and enables tokens to be * interpreted unambiguously at GSS-API peers. See further section * 3.1 of RFC 2743. This function is standardized in RFC 6339. * * Returns: * * `GSS_S_COMPLETE`: Indicates successful completion, and that output * parameters holds correct information. * * `GSS_S_FAILURE`: Indicates that encapsulation failed for reasons * unspecified at the GSS-API level. **/ extern OM_uint32 gss_encapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token) { int rc; if (!input_token) return GSS_S_CALL_INACCESSIBLE_READ; if (!token_oid) return GSS_S_CALL_INACCESSIBLE_READ; if (!output_token) return GSS_S_CALL_INACCESSIBLE_WRITE; rc = _gss_encapsulate_token_prefix (NULL, 0, input_token->value, input_token->length, token_oid->elements, token_oid->length, &output_token->value, &output_token->length); if (rc != 0) return GSS_S_FAILURE; return GSS_S_COMPLETE; } static int _gss_decapsulate_token (const char *in, size_t inlen, char **oid, size_t * oidlen, char **out, size_t * outlen) { size_t i; size_t asn1lenlen; if (inlen-- == 0) return -1; if (*in++ != '\x60') return -1; i = inlen; asn1lenlen = _gss_asn1_get_length_der (in, inlen, &i); if (inlen < i) return -1; inlen -= i; in += i; if (inlen != asn1lenlen) return -1; if (inlen-- == 0) return -1; if (*in++ != '\x06') return -1; i = inlen; asn1lenlen = _gss_asn1_get_length_der (in, inlen, &i); if (inlen < i) return -1; inlen -= i; in += i; if (inlen < asn1lenlen) return -1; *oidlen = asn1lenlen; *oid = (char *) in; inlen -= asn1lenlen; in += asn1lenlen; *outlen = inlen; *out = (char *) in; return 0; } /** * gss_decapsulate_token: * @input_token: (buffer, opaque, read) Buffer with GSS-API context token. * @token_oid: (Object ID, read) Expected object identifier of token. * @output_token: (buffer, opaque, modify) Decapsulated token data; * caller must release with gss_release_buffer(). * * Remove the mechanism-independent token header from an initial * GSS-API context token. Unwrap a buffer in the * mechanism-independent token format. This is the reverse of * gss_encapsulate_token(). The translation is loss-less, all data is * preserved as is. This function is standardized in RFC 6339. * * Return value: * * `GSS_S_COMPLETE`: Indicates successful completion, and that output * parameters holds correct information. * * `GSS_S_DEFECTIVE_TOKEN`: Means that the token failed consistency * checks (e.g., OID mismatch or ASN.1 DER length errors). * * `GSS_S_FAILURE`: Indicates that decapsulation failed for reasons * unspecified at the GSS-API level. **/ OM_uint32 gss_decapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token) { gss_OID_desc tmpoid; char *oid = NULL, *out = NULL; size_t oidlen = 0, outlen = 0; if (!input_token) return GSS_S_CALL_INACCESSIBLE_READ; if (!token_oid) return GSS_S_CALL_INACCESSIBLE_READ; if (!output_token) return GSS_S_CALL_INACCESSIBLE_WRITE; if (_gss_decapsulate_token ((char *) input_token->value, input_token->length, &oid, &oidlen, &out, &outlen) != 0) return GSS_S_DEFECTIVE_TOKEN; tmpoid.length = oidlen; tmpoid.elements = oid; if (!gss_oid_equal (token_oid, &tmpoid)) return GSS_S_DEFECTIVE_TOKEN; output_token->length = outlen; output_token->value = malloc (outlen); if (!output_token->value) return GSS_S_FAILURE; memcpy (output_token->value, out, outlen); return GSS_S_COMPLETE; } gss-1.0.2/lib/saslname.c0000644000000000000000000001137311546676340011733 00000000000000/* saslname.c --- Implementation of the SASL GS2 interfaces. * Copyright (C) 2010-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech* */ #include "meta.h" static OM_uint32 dup_data (OM_uint32 * minor_status, gss_buffer_t out, const char *str, int translate) { if (!out) return GSS_S_COMPLETE; if (translate) out->value = strdup (_(str)); else out->value = strdup (str); if (!out->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } out->length = strlen (str); return GSS_S_COMPLETE; } /** * gss_inquire_saslname_for_mech: * @minor_status: (Integer, modify) Mechanism specific status code. * @desired_mech: (OID, read) Identifies the GSS-API mechanism to query. * @sasl_mech_name: (buffer, character-string, modify, optional) * Buffer to receive SASL mechanism name. The application must free * storage associated with this name after use with a call to * gss_release_buffer(). * @mech_name: (buffer, character-string, modify, optional) Buffer to * receive human readable mechanism name. The application must free * storage associated with this name after use with a call to * gss_release_buffer(). * @mech_description: (buffer, character-string, modify, optional) * Buffer to receive description of mechanism. The application must * free storage associated with this name after use with a call to * gss_release_buffer(). * * Output the SASL mechanism name of a GSS-API mechanism. It also * returns a name and description of the mechanism in a user friendly * form. * * Returns: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_MECH`: The @desired_mech OID is unsupported. **/ OM_uint32 gss_inquire_saslname_for_mech (OM_uint32 * minor_status, const gss_OID desired_mech, gss_buffer_t sasl_mech_name, gss_buffer_t mech_name, gss_buffer_t mech_description) { _gss_mech_api_t m; if (!desired_mech) { if (minor_status) *minor_status = 0; return GSS_S_CALL_INACCESSIBLE_READ; } m = _gss_find_mech_no_default (desired_mech); if (!m) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } bindtextdomain (PACKAGE PO_SUFFIX, LOCALEDIR); if (dup_data (minor_status, sasl_mech_name, m->sasl_name, 0) != GSS_S_COMPLETE) return GSS_S_FAILURE; if (dup_data (minor_status, mech_name, m->mech_name, 0) != GSS_S_COMPLETE) { if (sasl_mech_name) free (sasl_mech_name->value); return GSS_S_FAILURE; } if (dup_data (minor_status, mech_description, m->mech_description, 1) != GSS_S_COMPLETE) { if (sasl_mech_name) free (sasl_mech_name->value); if (mech_name) free (mech_name->value); return GSS_S_FAILURE; } return GSS_S_COMPLETE; } /** * gss_inquire_mech_for_saslname: * @minor_status: (Integer, modify) Mechanism specific status code. * @sasl_mech_name: (buffer, character-string, read) Buffer with SASL * mechanism name. * @mech_type: (OID, modify, optional) Actual mechanism used. The OID * returned via this parameter will be a pointer to static storage * that should be treated as read-only; In particular the * application should not attempt to free it. Specify NULL if not * required. * * Output GSS-API mechanism OID of mechanism associated with given * @sasl_mech_name. * * Returns: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_MECH`: There is no GSS-API mechanism known as @sasl_mech_name. **/ OM_uint32 gss_inquire_mech_for_saslname (OM_uint32 * minor_status, const gss_buffer_t sasl_mech_name, gss_OID * mech_type) { _gss_mech_api_t m; if (!sasl_mech_name) { if (minor_status) *minor_status = 0; return GSS_S_CALL_INACCESSIBLE_READ; } m = _gss_find_mech_by_saslname (sasl_mech_name); if (!m) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } if (mech_type) *mech_type = m->mech; return GSS_S_COMPLETE; } gss-1.0.2/lib/misc.c0000644000000000000000000002364511546676340011070 00000000000000/* misc.c --- Implementation of GSS-API Miscellaneous functions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_indicate_mechs1 */ #include "meta.h" /** * gss_create_empty_oid_set: * @minor_status: (integer, modify) Mechanism specific status code. * @oid_set: (Set of Object IDs, modify) The empty object identifier * set. The routine will allocate the gss_OID_set_desc object, * which the application must free after use with a call to * gss_release_oid_set(). * * Create an object-identifier set containing no object identifiers, * to which members may be subsequently added using the * gss_add_oid_set_member() routine. These routines are intended to * be used to construct sets of mechanism object identifiers, for * input to gss_acquire_cred. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_create_empty_oid_set (OM_uint32 * minor_status, gss_OID_set * oid_set) { if (minor_status) *minor_status = 0; *oid_set = malloc (sizeof (**oid_set)); if (!*oid_set) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*oid_set)->count = 0; (*oid_set)->elements = NULL; return GSS_S_COMPLETE; } /* * gss_copy_oid: * @minor_status: (integer, modify) Mechanism specific status code. * @src_oid: (Object ID, read) The object identifier to copy. * @dest_oid: (Object ID, modify) The resultant copy of @src_oid. * Storage associated with this name must be freed by the * application, but gss_release_oid() cannot be used generally as it * deallocate the oid structure itself too. * * Make an exact copy of the given OID, that shares no memory areas * with the original. * * WARNING: This function is a GNU GSS specific extension, and is not * part of the official GSS API. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ static OM_uint32 _gss_copy_oid (OM_uint32 * minor_status, const gss_OID src_oid, gss_OID dest_oid) { if (minor_status) *minor_status = 0; if (!src_oid) return GSS_S_FAILURE | GSS_S_CALL_INACCESSIBLE_READ; if (src_oid->length == 0 || src_oid->elements == NULL) return GSS_S_FAILURE | GSS_S_CALL_BAD_STRUCTURE; dest_oid->length = src_oid->length; dest_oid->elements = malloc (src_oid->length); if (!dest_oid->elements) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy (dest_oid->elements, src_oid->elements, src_oid->length); return GSS_S_COMPLETE; } /** * gss_add_oid_set_member: * @minor_status: (integer, modify) Mechanism specific status code. * @member_oid: (Object ID, read) The object identifier to copied into * the set. * @oid_set: (Set of Object ID, modify) The set in which the object * identifier should be inserted. * * Add an Object Identifier to an Object Identifier set. This routine * is intended for use in conjunction with gss_create_empty_oid_set * when constructing a set of mechanism OIDs for input to * gss_acquire_cred. The oid_set parameter must refer to an OID-set * that was created by GSS-API (e.g. a set returned by * gss_create_empty_oid_set()). GSS-API creates a copy of the * member_oid and inserts this copy into the set, expanding the * storage allocated to the OID-set's elements array if necessary. * The routine may add the new member OID anywhere within the elements * array, and implementations should verify that the new member_oid is * not already contained within the elements array; if the member_oid * is already present, the oid_set should remain unchanged. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_add_oid_set_member (OM_uint32 * minor_status, const gss_OID member_oid, gss_OID_set * oid_set) { OM_uint32 major_stat; int present; if (!member_oid || member_oid->length == 0 || member_oid->elements == NULL) { if (minor_status) *minor_status = 0; return GSS_S_FAILURE; } major_stat = gss_test_oid_set_member (minor_status, member_oid, *oid_set, &present); if (GSS_ERROR (major_stat)) return major_stat; if (present) { if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } if ((*oid_set)->count + 1 == 0) /* integer overflow */ { if (minor_status) *minor_status = 0; return GSS_S_FAILURE; } (*oid_set)->count++; { gss_OID tmp; tmp = realloc ((*oid_set)->elements, (*oid_set)->count * sizeof (*(*oid_set)->elements)); if (!tmp) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*oid_set)->elements = tmp; } major_stat = _gss_copy_oid (minor_status, member_oid, (*oid_set)->elements + ((*oid_set)->count - 1)); if (GSS_ERROR (major_stat)) return major_stat; return GSS_S_COMPLETE; } /** * gss_test_oid_set_member: * @minor_status: (integer, modify) Mechanism specific status code. * @member: (Object ID, read) The object identifier whose presence is * to be tested. * @set: (Set of Object ID, read) The Object Identifier set. * @present: (Boolean, modify) Non-zero if the specified OID is a * member of the set, zero if not. * * Interrogate an Object Identifier set to determine whether a * specified Object Identifier is a member. This routine is intended * to be used with OID sets returned by gss_indicate_mechs(), * gss_acquire_cred(), and gss_inquire_cred(), but will also work with * user-generated sets. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_test_oid_set_member (OM_uint32 * minor_status, const gss_OID member, const gss_OID_set set, int *present) { gss_OID cur; size_t i; if (minor_status) *minor_status = 0; *present = 0; if (member == GSS_C_NO_OID) return GSS_S_COMPLETE; for (i = 0, cur = set->elements; i < set->count; i++, cur++) { if (cur->length == member->length && memcmp (cur->elements, member->elements, member->length) == 0) { *present = 1; return GSS_S_COMPLETE; } } return GSS_S_COMPLETE; } /** * gss_release_oid_set: * @minor_status: (integer, modify) Mechanism specific status code. * @set: (Set of Object IDs, modify) The storage associated with the * gss_OID_set will be deleted. * * Free storage associated with a GSSAPI-generated gss_OID_set object. * The set parameter must refer to an OID-set that was returned from a * GSS-API routine. gss_release_oid_set() will free the storage * associated with each individual member OID, the OID set's elements * array, and the gss_OID_set_desc. * * The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful * completion of this routine. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_release_oid_set (OM_uint32 * minor_status, gss_OID_set * set) { gss_OID cur; size_t i; if (minor_status) *minor_status = 0; if (!set || *set == GSS_C_NO_OID_SET) return GSS_S_COMPLETE; for (i = 0, cur = (*set)->elements; i < (*set)->count; i++, cur++) free (cur->elements); free ((*set)->elements); free (*set); *set = GSS_C_NO_OID_SET; return GSS_S_COMPLETE; } /** * gss_indicate_mechs: * @minor_status: (integer, modify) Mechanism specific status code. * @mech_set: (set of Object IDs, modify) Set of * implementation-supported mechanisms. The returned gss_OID_set * value will be a dynamically-allocated OID set, that should be * released by the caller after use with a call to * gss_release_oid_set(). * * Allows an application to determine which underlying security * mechanisms are available. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_indicate_mechs (OM_uint32 * minor_status, gss_OID_set * mech_set) { OM_uint32 maj_stat; maj_stat = gss_create_empty_oid_set (minor_status, mech_set); if (GSS_ERROR (maj_stat)) return maj_stat; maj_stat = _gss_indicate_mechs1 (minor_status, mech_set); if (GSS_ERROR (maj_stat)) { gss_release_oid_set (NULL, mech_set); return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /** * gss_release_buffer: * @minor_status: (integer, modify) Mechanism specific status code. * @buffer: (buffer, modify) The storage associated with the buffer * will be deleted. The gss_buffer_desc object will not be freed, * but its length field will be zeroed. * * Free storage associated with a buffer. The storage must have been * allocated by a GSS-API routine. In addition to freeing the * associated storage, the routine will zero the length field in the * descriptor to which the buffer parameter refers, and * implementations are encouraged to additionally set the pointer * field in the descriptor to NULL. Any buffer object returned by a * GSS-API routine may be passed to gss_release_buffer (even if there * is no storage associated with the buffer). * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_release_buffer (OM_uint32 * minor_status, gss_buffer_t buffer) { if (minor_status) *minor_status = 0; if (buffer != GSS_C_NO_BUFFER) { free (buffer->value); buffer->value = NULL; buffer->length = 0; } return GSS_S_COMPLETE; } gss-1.0.2/lib/Makefile.in0000644000000000000000000011637011663554705012034 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_LD_VERSION_SCRIPT_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/libgss.map @HAVE_LD_VERSION_SCRIPT_FALSE@am__append_2 = -export-symbols-regex '^(gss|GSS).*' @HAVE_LD_OUTPUT_DEF_TRUE@am__append_3 = -Wl,--output-def,libgss-$(DLL_VERSION).def @KRB5_TRUE@am__append_4 = krb5 @KRB5_TRUE@am__append_5 = headers/gss/krb5.h headers/gss/krb5-ext.h @KRB5_TRUE@am__append_6 = krb5/libgss-shishi.la subdir = lib DIST_COMMON = $(am__gssinclude_HEADERS_DIST) $(include_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(defexecdir)" \ "$(DESTDIR)$(gssincludedir)" "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libgss_la_DEPENDENCIES = gl/libgnu.la $(am__append_6) am_libgss_la_OBJECTS = meta.lo context.lo cred.lo error.lo misc.lo \ msg.lo name.lo obsolete.lo oid.lo asn1.lo ext.lo version.lo \ saslname.lo libgss_la_OBJECTS = $(am_libgss_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libgss_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgss_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgss_la_SOURCES) DIST_SOURCES = $(libgss_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive DATA = $(defexec_DATA) am__gssinclude_HEADERS_DIST = headers/gss/api.h headers/gss/ext.h \ headers/gss/krb5.h headers/gss/krb5-ext.h HEADERS = $(gssinclude_HEADERS) $(include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = gl krb5 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = gl $(am__append_4) AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/lib/gl \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers lib_LTLIBRARIES = libgss.la include_HEADERS = headers/gss.h gssincludedir = $(includedir)/gss gssinclude_HEADERS = headers/gss/api.h headers/gss/ext.h \ $(am__append_5) libgss_la_SOURCES = libgss.map \ internal.h \ meta.h meta.c \ context.c cred.c error.c misc.c msg.c name.c obsolete.c oid.c \ asn1.c ext.c version.c \ saslname.c libgss_la_LIBADD = @LTLIBINTL@ gl/libgnu.la $(am__append_6) libgss_la_LDFLAGS = -no-undefined -version-info \ $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) $(am__append_1) \ $(am__append_2) $(am__append_3) @HAVE_LD_OUTPUT_DEF_TRUE@defexecdir = $(bindir) @HAVE_LD_OUTPUT_DEF_TRUE@defexec_DATA = libgss-$(DLL_VERSION).def @HAVE_LD_OUTPUT_DEF_TRUE@DISTCLEANFILES = $(defexec_DATA) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu lib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgss.la: $(libgss_la_OBJECTS) $(libgss_la_DEPENDENCIES) $(AM_V_CCLD)$(libgss_la_LINK) -rpath $(libdir) $(libgss_la_OBJECTS) $(libgss_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cred.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ext.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/meta.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/name.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obsolete.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saslname.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-defexecDATA: $(defexec_DATA) @$(NORMAL_INSTALL) test -z "$(defexecdir)" || $(MKDIR_P) "$(DESTDIR)$(defexecdir)" @list='$(defexec_DATA)'; test -n "$(defexecdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(defexecdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(defexecdir)" || exit $$?; \ done uninstall-defexecDATA: @$(NORMAL_UNINSTALL) @list='$(defexec_DATA)'; test -n "$(defexecdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(defexecdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(defexecdir)" && rm -f $$files install-gssincludeHEADERS: $(gssinclude_HEADERS) @$(NORMAL_INSTALL) test -z "$(gssincludedir)" || $(MKDIR_P) "$(DESTDIR)$(gssincludedir)" @list='$(gssinclude_HEADERS)'; test -n "$(gssincludedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(gssincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(gssincludedir)" || exit $$?; \ done uninstall-gssincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(gssinclude_HEADERS)'; test -n "$(gssincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(gssincludedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(gssincludedir)" && rm -f $$files install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(includedir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(defexecdir)" "$(DESTDIR)$(gssincludedir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-gssincludeHEADERS install-includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-defexecDATA install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-defexecDATA uninstall-gssincludeHEADERS \ uninstall-includeHEADERS uninstall-libLTLIBRARIES .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-defexecDATA install-dvi install-dvi-am \ install-exec install-exec-am install-gssincludeHEADERS \ install-html install-html-am install-includeHEADERS \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-defexecDATA uninstall-gssincludeHEADERS \ uninstall-includeHEADERS uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/lib/meta.c0000644000000000000000000000646211546676457011072 00000000000000/* meta.c --- Implementation of function selection depending on mechanism. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" #include "meta.h" #ifdef USE_KERBEROS5 # include # include "krb5/protos.h" #endif static _gss_mech_api_desc _gss_mech_apis[] = { #ifdef USE_KERBEROS5 { &GSS_KRB5_static, "GS2-KRB5", "Kerberos V5", N_("Kerberos V5 GSS-API mechanism"), { /* Mandatory name-types. */ &GSS_KRB5_NT_PRINCIPAL_NAME_static, &GSS_C_NT_HOSTBASED_SERVICE_static, &GSS_C_NT_EXPORT_NAME_static}, gss_krb5_init_sec_context, gss_krb5_canonicalize_name, gss_krb5_export_name, gss_krb5_wrap, gss_krb5_unwrap, gss_krb5_get_mic, gss_krb5_verify_mic, gss_krb5_display_status, gss_krb5_acquire_cred, gss_krb5_release_cred, gss_krb5_accept_sec_context, gss_krb5_delete_sec_context, gss_krb5_context_time, gss_krb5_inquire_cred, gss_krb5_inquire_cred_by_mech}, #endif { NULL, NULL, NULL, NULL, { NULL, NULL, NULL}, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL} }; _gss_mech_api_t _gss_find_mech_no_default (const gss_OID oid) { size_t i; for (i = 0; _gss_mech_apis[i].mech; i++) if (gss_oid_equal (oid, _gss_mech_apis[i].mech)) return &_gss_mech_apis[i]; return NULL; } _gss_mech_api_t _gss_find_mech (const gss_OID oid) { _gss_mech_api_t p = _gss_find_mech_no_default (oid); if (!p && _gss_mech_apis[0].mech) /* FIXME. When we support more than one mechanism, make it possible to configure the default mechanism. */ return &_gss_mech_apis[0]; return p; } _gss_mech_api_t _gss_find_mech_by_saslname (const gss_buffer_t sasl_mech_name) { size_t i; if (sasl_mech_name == NULL || sasl_mech_name->value == NULL || sasl_mech_name->length == 0) return NULL; for (i = 0; _gss_mech_apis[i].mech; i++) if (strlen (_gss_mech_apis[i].sasl_name) == sasl_mech_name->length && memcmp (_gss_mech_apis[i].sasl_name, sasl_mech_name->value, sasl_mech_name->length) == 0) return &_gss_mech_apis[i]; return NULL; } OM_uint32 _gss_indicate_mechs1 (OM_uint32 * minor_status, gss_OID_set * mech_set) { OM_uint32 maj_stat; int i; for (i = 0; _gss_mech_apis[i].mech; i++) { maj_stat = gss_add_oid_set_member (minor_status, _gss_mech_apis[i].mech, mech_set); if (GSS_ERROR (maj_stat)) return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } gss-1.0.2/lib/context.c0000644000000000000000000013704411546676340011620 00000000000000/* context.c --- Implementation of GSS-API Context functions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech */ #include "meta.h" /** * gss_init_sec_context: * @minor_status: (integer, modify) Mechanism specific status code. * @initiator_cred_handle: (gss_cred_id_t, read, optional) Handle for * credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a * default initiator principal. If no default initiator is defined, * the function will return GSS_S_NO_CRED. * @context_handle: (gss_ctx_id_t, read/modify) Context handle for new * context. Supply GSS_C_NO_CONTEXT for first call; use value * returned by first call in continuation calls. Resources * associated with this context-handle must be released by the * application after use with a call to gss_delete_sec_context(). * @target_name: (gss_name_t, read) Name of target. * @mech_type: (OID, read, optional) Object ID of desired * mechanism. Supply GSS_C_NO_OID to obtain an implementation * specific default. * @req_flags: (bit-mask, read) Contains various independent flags, * each of which requests that the context support a specific * service option. Symbolic names are provided for each flag, and * the symbolic names corresponding to the required flags should be * logically-ORed together to form the bit-mask value. See below * for the flags. * @time_req: (Integer, read, optional) Desired number of seconds for * which context should remain valid. Supply 0 to request a default * validity period. * @input_chan_bindings: (channel bindings, read, optional) * Application-specified bindings. Allows application to securely * bind channel identification information to the security context. * Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not * used. * @input_token: (buffer, opaque, read, optional) Token received from * peer application. Supply GSS_C_NO_BUFFER, or a pointer to a * buffer containing the value GSS_C_EMPTY_BUFFER on initial call. * @actual_mech_type: (OID, modify, optional) Actual mechanism used. * The OID returned via this parameter will be a pointer to static * storage that should be treated as read-only; In particular the * application should not attempt to free it. Specify NULL if not * required. * @output_token: (buffer, opaque, modify) Token to be sent to peer * application. If the length field of the returned buffer is zero, * no token need be sent to the peer application. Storage * associated with this buffer must be freed by the application * after use with a call to gss_release_buffer(). * @ret_flags: (bit-mask, modify, optional) Contains various * independent flags, each of which indicates that the context * supports a specific service option. Specify NULL if not * required. Symbolic names are provided for each flag, and the * symbolic names corresponding to the required flags should be * logically-ANDed with the ret_flags value to test whether a given * option is supported by the context. See below for the flags. * @time_rec: (Integer, modify, optional) Number of seconds for which * the context will remain valid. If the implementation does not * support context expiration, the value GSS_C_INDEFINITE will be * returned. Specify NULL if not required. * * Initiates the establishment of a security context between the * application and a remote peer. Initially, the input_token * parameter should be specified either as GSS_C_NO_BUFFER, or as a * pointer to a gss_buffer_desc object whose length field contains the * value zero. The routine may return a output_token which should be * transferred to the peer application, where the peer application * will present it to gss_accept_sec_context. If no token need be * sent, gss_init_sec_context will indicate this by setting the length * field of the output_token argument to zero. To complete the context * establishment, one or more reply tokens may be required from the * peer application; if so, gss_init_sec_context will return a status * containing the supplementary information bit GSS_S_CONTINUE_NEEDED. * In this case, gss_init_sec_context should be called again when the * reply token is received from the peer application, passing the * reply token to gss_init_sec_context via the input_token parameters. * * Portable applications should be constructed to use the token length * and return status to determine whether a token needs to be sent or * waited for. Thus a typical portable caller should always invoke * gss_init_sec_context within a loop: * * --------------------------------------------------- * int context_established = 0; * gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; * ... * input_token->length = 0; * * while (!context_established) { * maj_stat = gss_init_sec_context(&min_stat, * cred_hdl, * &context_hdl, * target_name, * desired_mech, * desired_services, * desired_time, * input_bindings, * input_token, * &actual_mech, * output_token, * &actual_services, * &actual_time); * if (GSS_ERROR(maj_stat)) { * report_error(maj_stat, min_stat); * }; * * if (output_token->length != 0) { * send_token_to_peer(output_token); * gss_release_buffer(&min_stat, output_token) * }; * if (GSS_ERROR(maj_stat)) { * * if (context_hdl != GSS_C_NO_CONTEXT) * gss_delete_sec_context(&min_stat, * &context_hdl, * GSS_C_NO_BUFFER); * break; * }; * * if (maj_stat & GSS_S_CONTINUE_NEEDED) { * receive_token_from_peer(input_token); * } else { * context_established = 1; * }; * }; * --------------------------------------------------- * * Whenever the routine returns a major status that includes the value * GSS_S_CONTINUE_NEEDED, the context is not fully established and the * following restrictions apply to the output parameters: * * - The value returned via the time_rec parameter is undefined unless * the accompanying ret_flags parameter contains the bit * GSS_C_PROT_READY_FLAG, indicating that per-message services may be * applied in advance of a successful completion status, the value * returned via the actual_mech_type parameter is undefined until the * routine returns a major status value of GSS_S_COMPLETE. * * - The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, * GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, * GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the * ret_flags parameter should contain the values that the * implementation expects would be valid if context establishment were * to succeed. In particular, if the application has requested a * service such as delegation or anonymous authentication via the * req_flags argument, and such a service is unavailable from the * underlying mechanism, gss_init_sec_context should generate a token * that will not provide the service, and indicate via the ret_flags * argument that the service will not be supported. The application * may choose to abort the context establishment by calling * gss_delete_sec_context (if it cannot continue in the absence of the * service), or it may choose to transmit the token and continue * context establishment (if the service was merely desired but not * mandatory). * * - The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits * within ret_flags should indicate the actual state at the time * gss_init_sec_context returns, whether or not the context is fully * established. * * - GSS-API implementations that support per-message protection are * encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags * returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE * status code). However, applications should not rely on this * behavior as the flag was not defined in Version 1 of the GSS-API. * Instead, applications should determine what per-message services * are available after a successful context establishment according to * the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. * * - All other bits within the ret_flags argument should be set to * zero. * * If the initial call of gss_init_sec_context() fails, the * implementation should not create a context object, and should leave * the value of the context_handle parameter set to GSS_C_NO_CONTEXT * to indicate this. In the event of a failure on a subsequent call, * the implementation is permitted to delete the "half-built" security * context (in which case it should set the context_handle parameter * to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the * security context untouched for the application to delete (using * gss_delete_sec_context). * * During context establishment, the informational status bits * GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, * and GSS-API mechanisms should always return them in association * with a routine error of GSS_S_FAILURE. This requirement for * pairing did not exist in version 1 of the GSS-API specification, so * applications that wish to run over version 1 implementations must * special-case these codes. * * The `req_flags` values: * * `GSS_C_DELEG_FLAG`:: * - True - Delegate credentials to remote peer. * - False - Don't delegate. * * `GSS_C_MUTUAL_FLAG`:: * - True - Request that remote peer authenticate itself. * - False - Authenticate self to remote peer only. * * `GSS_C_REPLAY_FLAG`:: * - True - Enable replay detection for messages protected with * gss_wrap or gss_get_mic. * - False - Don't attempt to detect replayed messages. * * `GSS_C_SEQUENCE_FLAG`:: * - True - Enable detection of out-of-sequence protected messages. * - False - Don't attempt to detect out-of-sequence messages. * * `GSS_C_CONF_FLAG`:: * - True - Request that confidentiality service be made available * (via gss_wrap). * - False - No per-message confidentiality service is required. * * `GSS_C_INTEG_FLAG`:: * - True - Request that integrity service be made available (via * gss_wrap or gss_get_mic). * - False - No per-message integrity service is required. * * `GSS_C_ANON_FLAG`:: * - True - Do not reveal the initiator's identity to the acceptor. * - False - Authenticate normally. * * The `ret_flags` values: * * `GSS_C_DELEG_FLAG`:: * - True - Credentials were delegated to the remote peer. * - False - No credentials were delegated. * * `GSS_C_MUTUAL_FLAG`:: * - True - The remote peer has authenticated itself. * - False - Remote peer has not authenticated itself. * * `GSS_C_REPLAY_FLAG`:: * - True - replay of protected messages will be detected. * - False - replayed messages will not be detected. * * `GSS_C_SEQUENCE_FLAG`:: * - True - out-of-sequence protected messages will be detected. * - False - out-of-sequence messages will not be detected. * * `GSS_C_CONF_FLAG`:: * - True - Confidentiality service may be invoked by calling gss_wrap * routine. * - False - No confidentiality service (via gss_wrap) * available. gss_wrap will provide message encapsulation, data-origin * authentication and integrity services only. * * `GSS_C_INTEG_FLAG`:: * - True - Integrity service may be invoked by calling either * gss_get_mic or gss_wrap routines. * - False - Per-message integrity service unavailable. * * `GSS_C_ANON_FLAG`:: * - True - The initiator's identity has not been revealed, and will * not be revealed if any emitted token is passed to the acceptor. * - False - The initiator's identity has been or will be * authenticated normally. * * `GSS_C_PROT_READY_FLAG`:: * - True - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the * accompanying major status return value is either GSS_S_COMPLETE or * GSS_S_CONTINUE_NEEDED. * - False - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the * accompanying major status return value is GSS_S_COMPLETE. * * `GSS_C_TRANS_FLAG`:: * - True - The resultant security context may be transferred to other * processes via a call to gss_export_sec_context(). * - False - The security context is not transferable. * * All other bits should be set to zero. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_CONTINUE_NEEDED`: Indicates that a token from the peer * application is required to complete the context, and that * gss_init_sec_context must be called again with that token. * * `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks * performed on the input_token failed. * * `GSS_S_DEFECTIVE_CREDENTIAL`: Indicates that consistency checks * performed on the credential failed. * * `GSS_S_NO_CRED`: The supplied credentials were not valid for * context initiation, or the credential handle did not reference any * credentials. * * `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have * expired. * * `GSS_S_BAD_BINDINGS`: The input_token contains different channel * bindings to those specified via the input_chan_bindings parameter. * * `GSS_S_BAD_SIG`: The input_token contains an invalid MIC, or a MIC * that could not be verified. * * `GSS_S_OLD_TOKEN`: The input_token was too old. This is a fatal * error during context establishment. * * `GSS_S_DUPLICATE_TOKEN`: The input_token is valid, but is a * duplicate of a token already processed. This is a fatal error * during context establishment. * * `GSS_S_NO_CONTEXT`: Indicates that the supplied context handle did * not refer to a valid context. * * `GSS_S_BAD_NAMETYPE`: The provided target_name parameter contained * an invalid or unsupported type of name. * * `GSS_S_BAD_NAME`: The provided target_name parameter was * ill-formed. * * `GSS_S_BAD_MECH`: The specified mechanism is not supported by the * provided credential, or is unrecognized by the implementation. **/ OM_uint32 gss_init_sec_context (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec) { OM_uint32 maj_stat; _gss_mech_api_t mech; int freecontext = 0; if (output_token) { output_token->length = 0; output_token->value = NULL; } if (ret_flags) *ret_flags = 0; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT | GSS_S_CALL_INACCESSIBLE_READ; } if (output_token == GSS_C_NO_BUFFER) { if (minor_status) *minor_status = 0; return GSS_S_FAILURE | GSS_S_CALL_BAD_STRUCTURE; } if (*context_handle == GSS_C_NO_CONTEXT) mech = _gss_find_mech (mech_type); else mech = _gss_find_mech ((*context_handle)->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } if (actual_mech_type) *actual_mech_type = mech->mech; if (*context_handle == GSS_C_NO_CONTEXT) { *context_handle = calloc (sizeof (**context_handle), 1); if (!*context_handle) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*context_handle)->mech = mech->mech; freecontext = 1; } maj_stat = mech->init_sec_context (minor_status, initiator_cred_handle, context_handle, target_name, mech_type, req_flags, time_req, input_chan_bindings, input_token, actual_mech_type, output_token, ret_flags, time_rec); if (GSS_ERROR (maj_stat) && freecontext) { free (*context_handle); *context_handle = GSS_C_NO_CONTEXT; } return maj_stat; } /** * gss_accept_sec_context: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read/modify) Context handle for new * context. Supply GSS_C_NO_CONTEXT for first call; use value * returned in subsequent calls. Once gss_accept_sec_context() has * returned a value via this parameter, resources have been assigned * to the corresponding context, and must be freed by the * application after use with a call to gss_delete_sec_context(). * @acceptor_cred_handle: (gss_cred_id_t, read) Credential handle * claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to * accept the context as a default principal. If * GSS_C_NO_CREDENTIAL is specified, but no default acceptor * principal is defined, GSS_S_NO_CRED will be returned. * @input_token_buffer: (buffer, opaque, read) Token obtained from * remote application. * @input_chan_bindings: (channel bindings, read, optional) * Application- specified bindings. Allows application to securely * bind channel identification information to the security context. * If channel bindings are not used, specify * GSS_C_NO_CHANNEL_BINDINGS. * @src_name: (gss_name_t, modify, optional) Authenticated name of * context initiator. After use, this name should be deallocated by * passing it to gss_release_name(). If not required, specify NULL. * @mech_type: (Object ID, modify, optional) Security mechanism used. * The returned OID value will be a pointer into static storage, and * should be treated as read-only by the caller (in particular, it * does not need to be freed). If not required, specify NULL. * @output_token: (buffer, opaque, modify) Token to be passed to peer * application. If the length field of the returned token buffer is * 0, then no token need be passed to the peer application. If a * non- zero length field is returned, the associated storage must * be freed after use by the application with a call to * gss_release_buffer(). * @ret_flags: (bit-mask, modify, optional) Contains various * independent flags, each of which indicates that the context * supports a specific service option. If not needed, specify NULL. * Symbolic names are provided for each flag, and the symbolic names * corresponding to the required flags should be logically-ANDed * with the ret_flags value to test whether a given option is * supported by the context. See below for the flags. * @time_rec: (Integer, modify, optional) Number of seconds for which * the context will remain valid. Specify NULL if not required. * @delegated_cred_handle: (gss_cred_id_t, modify, optional * credential) Handle for credentials received from context * initiator. Only valid if deleg_flag in ret_flags is true, in * which case an explicit credential handle (i.e. not * GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, * gss_accept_sec_context() will set this parameter to * GSS_C_NO_CREDENTIAL. If a credential handle is returned, the * associated resources must be released by the application after * use with a call to gss_release_cred(). Specify NULL if not * required. * * Allows a remotely initiated security context between the * application and a remote peer to be established. The routine may * return a output_token which should be transferred to the peer * application, where the peer application will present it to * gss_init_sec_context. If no token need be sent, * gss_accept_sec_context will indicate this by setting the length * field of the output_token argument to zero. To complete the * context establishment, one or more reply tokens may be required * from the peer application; if so, gss_accept_sec_context will * return a status flag of GSS_S_CONTINUE_NEEDED, in which case it * should be called again when the reply token is received from the * peer application, passing the token to gss_accept_sec_context via * the input_token parameters. * * Portable applications should be constructed to use the token length * and return status to determine whether a token needs to be sent or * waited for. Thus a typical portable caller should always invoke * gss_accept_sec_context within a loop: * * --------------------------------------------------- * gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; * * do { * receive_token_from_peer(input_token); * maj_stat = gss_accept_sec_context(&min_stat, * &context_hdl, * cred_hdl, * input_token, * input_bindings, * &client_name, * &mech_type, * output_token, * &ret_flags, * &time_rec, * &deleg_cred); * if (GSS_ERROR(maj_stat)) { * report_error(maj_stat, min_stat); * }; * if (output_token->length != 0) { * send_token_to_peer(output_token); * * gss_release_buffer(&min_stat, output_token); * }; * if (GSS_ERROR(maj_stat)) { * if (context_hdl != GSS_C_NO_CONTEXT) * gss_delete_sec_context(&min_stat, * &context_hdl, * GSS_C_NO_BUFFER); * break; * }; * } while (maj_stat & GSS_S_CONTINUE_NEEDED); * --------------------------------------------------- * * * Whenever the routine returns a major status that includes the value * GSS_S_CONTINUE_NEEDED, the context is not fully established and the * following restrictions apply to the output parameters: * * The value returned via the time_rec parameter is undefined Unless the * accompanying ret_flags parameter contains the bit * GSS_C_PROT_READY_FLAG, indicating that per-message services may be * applied in advance of a successful completion status, the value * returned via the mech_type parameter may be undefined until the * routine returns a major status value of GSS_S_COMPLETE. * * The values of the GSS_C_DELEG_FLAG, * GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, * GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned * via the ret_flags parameter should contain the values that the * implementation expects would be valid if context establishment were * to succeed. * * The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits * within ret_flags should indicate the actual state at the time * gss_accept_sec_context returns, whether or not the context is fully * established. * * Although this requires that GSS-API implementations set the * GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller * (i.e. when accompanied by a GSS_S_COMPLETE status code), applications * should not rely on this behavior as the flag was not defined in * Version 1 of the GSS-API. Instead, applications should be prepared to * use per-message services after a successful context establishment, * according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. * * All other bits within the ret_flags argument should be set to zero. * While the routine returns GSS_S_CONTINUE_NEEDED, the values returned * via the ret_flags argument indicate the services that the * implementation expects to be available from the established context. * * If the initial call of gss_accept_sec_context() fails, the * implementation should not create a context object, and should leave * the value of the context_handle parameter set to GSS_C_NO_CONTEXT to * indicate this. In the event of a failure on a subsequent call, the * implementation is permitted to delete the "half-built" security * context (in which case it should set the context_handle parameter to * GSS_C_NO_CONTEXT), but the preferred behavior is to leave the * security context (and the context_handle parameter) untouched for the * application to delete (using gss_delete_sec_context). * * During context establishment, the informational status bits * GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and * GSS-API mechanisms should always return them in association with a * routine error of GSS_S_FAILURE. This requirement for pairing did not * exist in version 1 of the GSS-API specification, so applications that * wish to run over version 1 implementations must special-case these * codes. * * The `ret_flags` values: * * `GSS_C_DELEG_FLAG`:: * - True - Delegated credentials are available via the * delegated_cred_handle parameter. * - False - No credentials were delegated. * * `GSS_C_MUTUAL_FLAG`:: * - True - Remote peer asked for mutual authentication. * - False - Remote peer did not ask for mutual authentication. * * `GSS_C_REPLAY_FLAG`:: * - True - replay of protected messages will be detected. * - False - replayed messages will not be detected. * * `GSS_C_SEQUENCE_FLAG`:: * - True - out-of-sequence protected messages will be detected. * - False - out-of-sequence messages will not be detected. * * `GSS_C_CONF_FLAG`:: * - True - Confidentiality service may be invoked by calling the * gss_wrap routine. * - False - No confidentiality service (via gss_wrap) * available. gss_wrap will provide message encapsulation, data-origin * authentication and integrity services only. * * `GSS_C_INTEG_FLAG`:: * - True - Integrity service may be invoked by calling either * gss_get_mic or gss_wrap routines. * - False - Per-message integrity service unavailable. * * `GSS_C_ANON_FLAG`:: * - True - The initiator does not wish to be authenticated; the * src_name parameter (if requested) contains an anonymous internal * name. * - False - The initiator has been authenticated normally. * * `GSS_C_PROT_READY_FLAG`:: * - True - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the * accompanying major status return value is either GSS_S_COMPLETE or * GSS_S_CONTINUE_NEEDED. * - False - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the * accompanying major status return value is GSS_S_COMPLETE. * * `GSS_C_TRANS_FLAG`:: * - True - The resultant security context may be transferred to other * processes via a call to gss_export_sec_context(). * - False - The security context is not transferable. * * All other bits should be set to zero. * * Return value: * * `GSS_S_CONTINUE_NEEDED`: Indicates that a token from the peer * application is required to complete the context, and that * gss_accept_sec_context must be called again with that token. * * `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks * performed on the input_token failed. * * `GSS_S_DEFECTIVE_CREDENTIAL`: Indicates that consistency checks * performed on the credential failed. * * `GSS_S_NO_CRED`: The supplied credentials were not valid for * context acceptance, or the credential handle did not reference any * credentials. * * `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have * expired. * * `GSS_S_BAD_BINDINGS`: The input_token contains different channel * bindings to those specified via the input_chan_bindings parameter. * * `GSS_S_NO_CONTEXT`: Indicates that the supplied context handle did * not refer to a valid context. * * `GSS_S_BAD_SIG`: The input_token contains an invalid MIC. * * `GSS_S_OLD_TOKEN`: The input_token was too old. This is a fatal * error during context establishment. * * `GSS_S_DUPLICATE_TOKEN`: The input_token is valid, but is a * duplicate of a token already processed. This is a fatal error * during context establishment. * * `GSS_S_BAD_MECH`: The received token specified a mechanism that is * not supported by the implementation or the provided credential. **/ OM_uint32 gss_accept_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle) { _gss_mech_api_t mech; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT | GSS_S_CALL_INACCESSIBLE_READ; } if (*context_handle == GSS_C_NO_CONTEXT) { /* FIXME: We should extract GSS-API mechanism OID from token here, and use it to find the proper mechanism. */ mech = _gss_find_mech (GSS_C_NO_OID); } else mech = _gss_find_mech ((*context_handle)->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } if (mech_type) *mech_type = mech->mech; return mech->accept_sec_context (minor_status, context_handle, acceptor_cred_handle, input_token_buffer, input_chan_bindings, src_name, mech_type, output_token, ret_flags, time_rec, delegated_cred_handle); } /** * gss_delete_sec_context: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, modify) Context handle identifying * context to delete. After deleting the context, the GSS-API will * set this context handle to GSS_C_NO_CONTEXT. * @output_token: (buffer, opaque, modify, optional) Token to be sent * to remote application to instruct it to also delete the context. * It is recommended that applications specify GSS_C_NO_BUFFER for * this parameter, requesting local deletion only. If a buffer * parameter is provided by the application, the mechanism may * return a token in it; mechanisms that implement only local * deletion should set the length field of this token to zero to * indicate to the application that no token is to be sent to the * peer. * * Delete a security context. gss_delete_sec_context will delete the * local data structures associated with the specified security * context, and may generate an output_token, which when passed to the * peer gss_process_context_token will instruct it to do likewise. If * no token is required by the mechanism, the GSS-API should set the * length field of the output_token (if provided) to zero. No further * security services may be obtained using the context specified by * context_handle. * * In addition to deleting established security contexts, * gss_delete_sec_context must also be able to delete "half-built" * security contexts resulting from an incomplete sequence of * gss_init_sec_context()/gss_accept_sec_context() calls. * * The output_token parameter is retained for compatibility with * version 1 of the GSS-API. It is recommended that both peer * applications invoke gss_delete_sec_context passing the value * GSS_C_NO_BUFFER for the output_token parameter, indicating that no * token is required, and that gss_delete_sec_context should simply * delete local context data structures. If the application does pass * a valid buffer to gss_delete_sec_context, mechanisms are encouraged * to return a zero-length token, indicating that no peer action is * necessary, and that no token should be transferred by the * application. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CONTEXT`: No valid context was supplied. **/ OM_uint32 gss_delete_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token) { _gss_mech_api_t mech; OM_uint32 ret; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT | GSS_S_CALL_INACCESSIBLE_READ; } if (*context_handle == GSS_C_NO_CONTEXT) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT | GSS_S_CALL_BAD_STRUCTURE; } if (output_token != GSS_C_NO_BUFFER) { output_token->length = 0; output_token->value = NULL; } mech = _gss_find_mech ((*context_handle)->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } ret = mech->delete_sec_context (NULL, context_handle, output_token); free (*context_handle); *context_handle = GSS_C_NO_CONTEXT; return ret; } /** * gss_process_context_token: * @minor_status: (Integer, modify) Implementation specific status code. * @context_handle: (gss_ctx_id_t, read) Context handle of context on * which token is to be processed * @token_buffer: (buffer, opaque, read) Token to process. * * Provides a way to pass an asynchronous token to the security * service. Most context-level tokens are emitted and processed * synchronously by gss_init_sec_context and gss_accept_sec_context, * and the application is informed as to whether further tokens are * expected by the GSS_C_CONTINUE_NEEDED major status bit. * Occasionally, a mechanism may need to emit a context-level token at * a point when the peer entity is not expecting a token. For * example, the initiator's final call to gss_init_sec_context may * emit a token and return a status of GSS_S_COMPLETE, but the * acceptor's call to gss_accept_sec_context may fail. The acceptor's * mechanism may wish to send a token containing an error indication * to the initiator, but the initiator is not expecting a token at * this point, believing that the context is fully established. * Gss_process_context_token provides a way to pass such a token to * the mechanism at any time. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks * performed on the token failed. * * `GSS_S_NO_CONTEXT`: The context_handle did not refer to a valid * context. **/ OM_uint32 gss_process_context_token (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t token_buffer) { return GSS_S_FAILURE; } /** * gss_context_time: * @minor_status: (Integer, modify) Implementation specific status * code. * @context_handle: (gss_ctx_id_t, read) Identifies the context to be * interrogated. * @time_rec: (Integer, modify) Number of seconds that the context * will remain valid. If the context has already expired, zero will * be returned. * * Determines the number of seconds for which the specified context * will remain valid. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_CONTEXT_EXPIRED`: The context has already expired. * * `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a * valid context **/ OM_uint32 gss_context_time (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec) { _gss_mech_api_t mech; if (context_handle == GSS_C_NO_CONTEXT) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT | GSS_S_CALL_BAD_STRUCTURE; } mech = _gss_find_mech (context_handle->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->context_time (minor_status, context_handle, time_rec); } /** * gss_inquire_context: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) A handle that refers to the * security context. * @src_name: (gss_name_t, modify, optional) The name of the context * initiator. If the context was established using anonymous * authentication, and if the application invoking * gss_inquire_context is the context acceptor, an anonymous name * will be returned. Storage associated with this name must be * freed by the application after use with a call to * gss_release_name(). Specify NULL if not required. * @targ_name: (gss_name_t, modify, optional) The name of the context * acceptor. Storage associated with this name must be freed by the * application after use with a call to gss_release_name(). If the * context acceptor did not authenticate itself, and if the * initiator did not specify a target name in its call to * gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. * Specify NULL if not required. * @lifetime_rec: (Integer, modify, optional) The number of seconds * for which the context will remain valid. If the context has * expired, this parameter will be set to zero. If the * implementation does not support context expiration, the value * GSS_C_INDEFINITE will be returned. Specify NULL if not required. * @mech_type: (gss_OID, modify, optional) The security mechanism * providing the context. The returned OID will be a pointer to * static storage that should be treated as read-only by the * application; in particular the application should not attempt to * free it. Specify NULL if not required. * @ctx_flags: (bit-mask, modify, optional) Contains various * independent flags, each of which indicates that the context * supports (or is expected to support, if ctx_open is false) a * specific service option. If not needed, specify NULL. Symbolic * names are provided for each flag, and the symbolic names * corresponding to the required flags should be logically-ANDed * with the ret_flags value to test whether a given option is * supported by the context. See below for the flags. * @locally_initiated: (Boolean, modify) Non-zero if the invoking * application is the context initiator. Specify NULL if not * required. * @open: (Boolean, modify) Non-zero if the context is fully * established; Zero if a context-establishment token is expected * from the peer application. Specify NULL if not required. * * Obtains information about a security context. The caller must * already have obtained a handle that refers to the context, although * the context need not be fully established. * * The `ctx_flags` values: * * `GSS_C_DELEG_FLAG`:: * - True - Credentials were delegated from the initiator to the * acceptor. * - False - No credentials were delegated. * * `GSS_C_MUTUAL_FLAG`:: * - True - The acceptor was authenticated to the initiator. * - False - The acceptor did not authenticate itself. * * `GSS_C_REPLAY_FLAG`:: * - True - replay of protected messages will be detected. * - False - replayed messages will not be detected. * * `GSS_C_SEQUENCE_FLAG`:: * - True - out-of-sequence protected messages will be detected. * - False - out-of-sequence messages will not be detected. * * `GSS_C_CONF_FLAG`:: * - True - Confidentiality service may be invoked by calling gss_wrap * routine. * - False - No confidentiality service (via gss_wrap) * available. gss_wrap will provide message encapsulation, data-origin * authentication and integrity services only. * * `GSS_C_INTEG_FLAG`:: * - True - Integrity service may be invoked by calling either * gss_get_mic or gss_wrap routines. * - False - Per-message integrity service unavailable. * * `GSS_C_ANON_FLAG`:: * - True - The initiator's identity will not be revealed to the * acceptor. The src_name parameter (if requested) contains an * anonymous internal name. * - False - The initiator has been authenticated normally. * * `GSS_C_PROT_READY_FLAG`:: * - True - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. * - False - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the * context is fully established (i.e. if the open parameter is * non-zero). * * `GSS_C_TRANS_FLAG`:: * - True - The resultant security context may be transferred to other * processes via a call to gss_export_sec_context(). * - False - The security context is not transferable. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CONTEXT`: The referenced context could not be accessed. **/ OM_uint32 gss_inquire_context (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_name_t * src_name, gss_name_t * targ_name, OM_uint32 * lifetime_rec, gss_OID * mech_type, OM_uint32 * ctx_flags, int *locally_initiated, int *open) { return GSS_S_FAILURE; } /** * gss_wrap_size_limit: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) A handle that refers to the * security over which the messages will be sent. * @conf_req_flag: (Boolean, read) Indicates whether gss_wrap will be * asked to apply confidentiality protection in addition to * integrity protection. See the routine description for gss_wrap * for more details. * @qop_req: (gss_qop_t, read) Indicates the level of protection that * gss_wrap will be asked to provide. See the routine description * for gss_wrap for more details. * @req_output_size: (Integer, read) The desired maximum size for * tokens emitted by gss_wrap. * @max_input_size: (Integer, modify) The maximum input message size * that may be presented to gss_wrap in order to guarantee that the * emitted token shall be no larger than req_output_size bytes. * * Allows an application to determine the maximum message size that, * if presented to gss_wrap with the same conf_req_flag and qop_req * parameters, will result in an output token containing no more than * req_output_size bytes. * * This call is intended for use by applications that communicate over * protocols that impose a maximum message size. It enables the * application to fragment messages prior to applying protection. * * GSS-API implementations are recommended but not required to detect * invalid QOP values when gss_wrap_size_limit() is called. This * routine guarantees only a maximum message size, not the * availability of specific QOP values for message protection. * * Successful completion of this call does not guarantee that gss_wrap * will be able to protect a message of length max_input_size bytes, * since this ability may depend on the availability of system * resources at the time that gss_wrap is called. However, if the * implementation itself imposes an upper limit on the length of * messages that may be processed by gss_wrap, the implementation * should not return a value via max_input_bytes that is greater than * this length. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CONTEXT`: The referenced context could not be accessed. * * `GSS_S_CONTEXT_EXPIRED`: The context has expired. * * `GSS_S_BAD_QOP`: The specified QOP is not supported by the * mechanism. **/ OM_uint32 gss_wrap_size_limit (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, OM_uint32 req_output_size, OM_uint32 * max_input_size) { return GSS_S_FAILURE; } /** * gss_export_sec_context: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, modify) Context handle identifying * the context to transfer. * @interprocess_token: (buffer, opaque, modify) Token to be * transferred to target process. Storage associated with this * token must be freed by the application after use with a call to * gss_release_buffer(). * * Provided to support the sharing of work between multiple processes. * This routine will typically be used by the context-acceptor, in an * application where a single process receives incoming connection * requests and accepts security contexts over them, then passes the * established context to one or more other processes for message * exchange. gss_export_sec_context() deactivates the security context * for the calling process and creates an interprocess token which, * when passed to gss_import_sec_context in another process, will * re-activate the context in the second process. Only a single * instantiation of a given context may be active at any one time; a * subsequent attempt by a context exporter to access the exported * security context will fail. * * The implementation may constrain the set of processes by which the * interprocess token may be imported, either as a function of local * security policy, or as a result of implementation decisions. For * example, some implementations may constrain contexts to be passed * only between processes that run under the same account, or which * are part of the same process group. * * The interprocess token may contain security-sensitive information * (for example cryptographic keys). While mechanisms are encouraged * to either avoid placing such sensitive information within * interprocess tokens, or to encrypt the token before returning it to * the application, in a typical object-library GSS-API implementation * this may not be possible. Thus the application must take care to * protect the interprocess token, and ensure that any process to * which the token is transferred is trustworthy. * * If creation of the interprocess token is successful, the * implementation shall deallocate all process-wide resources * associated with the security context, and set the context_handle to * GSS_C_NO_CONTEXT. In the event of an error that makes it * impossible to complete the export of the security context, the * implementation must not return an interprocess token, and should * strive to leave the security context referenced by the * context_handle parameter untouched. If this is impossible, it is * permissible for the implementation to delete the security context, * providing it also sets the context_handle parameter to * GSS_C_NO_CONTEXT. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_CONTEXT_EXPIRED`: The context has expired. * * `GSS_S_NO_CONTEXT`: The context was invalid. * * `GSS_S_UNAVAILABLE`: The operation is not supported. **/ OM_uint32 gss_export_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t interprocess_token) { return GSS_S_UNAVAILABLE; } /** * gss_import_sec_context: * @minor_status: (Integer, modify) Mechanism specific status code. * @interprocess_token: (buffer, opaque, modify) Token received from * exporting process * @context_handle: (gss_ctx_id_t, modify) Context handle of newly * reactivated context. Resources associated with this context * handle must be released by the application after use with a call * to gss_delete_sec_context(). * * Allows a process to import a security context established by * another process. A given interprocess token may be imported only * once. See gss_export_sec_context. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CONTEXT`: The token did not contain a valid context * reference. * * `GSS_S_DEFECTIVE_TOKEN`: The token was invalid. * * `GSS_S_UNAVAILABLE`: The operation is unavailable. * * `GSS_S_UNAUTHORIZED`: Local policy prevents the import of this * context by the current process. **/ OM_uint32 gss_import_sec_context (OM_uint32 * minor_status, const gss_buffer_t interprocess_token, gss_ctx_id_t * context_handle) { return GSS_S_UNAVAILABLE; } gss-1.0.2/lib/error.c0000644000000000000000000002526511546676340011266 00000000000000/* error.c --- Error handling functionality. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech */ #include "meta.h" struct gss_status_codes { gss_uint32 err; const char *name; const char *text; }; static struct gss_status_codes gss_calling_errors[] = { {GSS_S_CALL_INACCESSIBLE_READ, "GSS_S_CALL_INACCESSIBLE_READ", N_("A required input parameter could not be read")}, {GSS_S_CALL_INACCESSIBLE_WRITE, "GSS_S_CALL_INACCESSIBLE_WRITE", N_("A required output parameter could not be written")}, {GSS_S_CALL_BAD_STRUCTURE, "GSS_S_CALL_BAD_STRUCTURE", N_("A parameter was malformed")} }; static struct gss_status_codes gss_routine_errors[] = { {GSS_S_BAD_MECH, "GSS_S_BAD_MECH", N_("An unsupported mechanism was requested")}, {GSS_S_BAD_NAME, "GSS_S_BAD_NAME", N_("An invalid name was supplied")}, {GSS_S_BAD_NAMETYPE, "GSS_S_BAD_NAMETYPE", N_("A supplied name was of an unsupported type")}, {GSS_S_BAD_BINDINGS, "GSS_S_BAD_BINDINGS", N_("Incorrect channel bindings were supplied")}, {GSS_S_BAD_STATUS, "GSS_S_BAD_STATUS", N_("An invalid status code was supplied")}, {GSS_S_BAD_SIG, "GSS_S_BAD_SIG", N_("A token had an invalid MIC")}, {GSS_S_NO_CRED, "GSS_S_NO_CRED", N_("No credentials were supplied, or the credentials were unavailable " "or inaccessible")}, {GSS_S_NO_CONTEXT, "GSS_S_NO_CONTEXT", N_("No context has been established")}, {GSS_S_DEFECTIVE_TOKEN, "GSS_S_DEFECTIVE_TOKEN", N_("A token was invalid")}, {GSS_S_DEFECTIVE_CREDENTIAL, "GSS_S_DEFECTIVE_CREDENTIAL", N_("A credential was invalid")}, {GSS_S_CREDENTIALS_EXPIRED, "GSS_S_CREDENTIALS_EXPIRED", N_("The referenced credentials have expired")}, {GSS_S_CONTEXT_EXPIRED, "GSS_S_CONTEXT_EXPIRED", N_("The context has expired")}, {GSS_S_FAILURE, "GSS_S_FAILURE", N_("Unspecified error in underlying mechanism")}, {GSS_S_BAD_QOP, "GSS_S_BAD_QOP", N_("The quality-of-protection requested could not be provided")}, {GSS_S_UNAUTHORIZED, "GSS_S_UNAUTHORIZED", N_("The operation is forbidden by local security policy")}, {GSS_S_UNAVAILABLE, "GSS_S_UNAVAILABLE", N_("The operation or option is unavailable")}, {GSS_S_DUPLICATE_ELEMENT, "GSS_S_DUPLICATE_ELEMENT", N_("The requested credential element already exists")}, {GSS_S_NAME_NOT_MN, "GSS_S_NAME_NOT_MN", N_("The provided name was not a mechanism name")} }; static struct gss_status_codes gss_supplementary_errors[] = { {GSS_S_CONTINUE_NEEDED, "GSS_S_CONTINUE_NEEDED", N_("The gss_init_sec_context() or gss_accept_sec_context() function " "must be called again to complete its function")}, {GSS_S_DUPLICATE_TOKEN, "GSS_S_DUPLICATE_TOKEN", N_("The token was a duplicate of an earlier token")}, {GSS_S_OLD_TOKEN, "GSS_S_OLD_TOKEN", N_("The token's validity period has expired")}, {GSS_S_UNSEQ_TOKEN, "GSS_S_UNSEQ_TOKEN", N_("A later token has already been processed")}, {GSS_S_GAP_TOKEN, "GSS_S_GAP_TOKEN", N_("An expected per-message token was not received")} }; /** * gss_display_status: * @minor_status: (integer, modify) Mechanism specific status code. * @status_value: (Integer, read) Status value to be converted. * @status_type: (Integer, read) GSS_C_GSS_CODE - status_value is a * GSS status code. GSS_C_MECH_CODE - status_value is a mechanism * status code. * @mech_type: (Object ID, read, optional) Underlying mechanism (used * to interpret a minor status value). Supply GSS_C_NO_OID to obtain * the system default. * @message_context: (Integer, read/modify) Should be initialized to * zero by the application prior to the first call. On return from * gss_display_status(), a non-zero status_value parameter indicates * that additional messages may be extracted from the status code * via subsequent calls to gss_display_status(), passing the same * status_value, status_type, mech_type, and message_context * parameters. * @status_string: (buffer, character string, modify) Textual * interpretation of the status_value. Storage associated with this * parameter must be freed by the application after use with a call * to gss_release_buffer(). * * Allows an application to obtain a textual representation of a * GSS-API status code, for display to the user or for logging * purposes. Since some status values may indicate multiple * conditions, applications may need to call gss_display_status * multiple times, each call generating a single text string. The * message_context parameter is used by gss_display_status to store * state information about which error messages have already been * extracted from a given status_value; message_context must be * initialized to 0 by the application prior to the first call, and * gss_display_status will return a non-zero value in this parameter * if there are further messages to extract. * * The message_context parameter contains all state information * required by gss_display_status in order to extract further messages * from the status_value; even when a non-zero value is returned in * this parameter, the application is not required to call * gss_display_status again unless subsequent messages are desired. * The following code extracts all messages from a given status code * and prints them to stderr: * * * --------------------------------------------------- * OM_uint32 message_context; * OM_uint32 status_code; * OM_uint32 maj_status; * OM_uint32 min_status; * gss_buffer_desc status_string; * * ... * * message_context = 0; * * do { * maj_status = gss_display_status ( * &min_status, * status_code, * GSS_C_GSS_CODE, * GSS_C_NO_OID, * &message_context, * &status_string) * * fprintf(stderr, * "%.*s\n", * (int)status_string.length, * * (char *)status_string.value); * * gss_release_buffer(&min_status, &status_string); * * } while (message_context != 0); * --------------------------------------------------- * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_MECH`: Indicates that translation in accordance with an * unsupported mechanism type was requested. * * `GSS_S_BAD_STATUS`: The status value was not recognized, or the * status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE. **/ OM_uint32 gss_display_status (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string) { size_t i; bindtextdomain (PACKAGE PO_SUFFIX, LOCALEDIR); if (minor_status) *minor_status = 0; if (message_context) status_value &= ~*message_context; switch (status_type) { case GSS_C_GSS_CODE: if (message_context) { *message_context |= GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET; if ((status_value & ~*message_context) == 0) *message_context = 0; } switch (GSS_ROUTINE_ERROR (status_value)) { case 0: break; case GSS_S_BAD_MECH: case GSS_S_BAD_NAME: case GSS_S_BAD_NAMETYPE: case GSS_S_BAD_BINDINGS: case GSS_S_BAD_STATUS: case GSS_S_BAD_SIG: case GSS_S_NO_CRED: case GSS_S_NO_CONTEXT: case GSS_S_DEFECTIVE_TOKEN: case GSS_S_DEFECTIVE_CREDENTIAL: case GSS_S_CREDENTIALS_EXPIRED: case GSS_S_CONTEXT_EXPIRED: case GSS_S_FAILURE: case GSS_S_BAD_QOP: case GSS_S_UNAUTHORIZED: case GSS_S_UNAVAILABLE: case GSS_S_DUPLICATE_ELEMENT: case GSS_S_NAME_NOT_MN: status_string->value = strdup (_(gss_routine_errors [(GSS_ROUTINE_ERROR (status_value) >> GSS_C_ROUTINE_ERROR_OFFSET) - 1].text)); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); return GSS_S_COMPLETE; break; default: return GSS_S_BAD_STATUS; break; } if (message_context) { *message_context |= GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET; if ((status_value & ~*message_context) == 0) *message_context = 0; } switch (GSS_CALLING_ERROR (status_value)) { case 0: break; case GSS_S_CALL_INACCESSIBLE_READ: case GSS_S_CALL_INACCESSIBLE_WRITE: case GSS_S_CALL_BAD_STRUCTURE: status_string->value = strdup (_(gss_calling_errors [(GSS_CALLING_ERROR (status_value) >> GSS_C_CALLING_ERROR_OFFSET) - 1].text)); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); return GSS_S_COMPLETE; break; default: return GSS_S_BAD_STATUS; break; } for (i = 0; i < sizeof (gss_supplementary_errors) / sizeof (gss_supplementary_errors[0]); i++) if (gss_supplementary_errors[i].err & GSS_SUPPLEMENTARY_INFO (status_value)) { status_string->value = strdup (_(gss_supplementary_errors[i].text)); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); *message_context |= gss_supplementary_errors[i].err; if ((status_value & ~*message_context) == 0) *message_context = 0; return GSS_S_COMPLETE; } if (GSS_SUPPLEMENTARY_INFO (status_value)) return GSS_S_BAD_STATUS; if (message_context) *message_context = 0; status_string->value = strdup (_("No error")); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); break; case GSS_C_MECH_CODE: { _gss_mech_api_t mech; mech = _gss_find_mech (mech_type); return mech->display_status (minor_status, status_value, status_type, mech_type, message_context, status_string); } break; default: return GSS_S_BAD_STATUS; } return GSS_S_COMPLETE; } gss-1.0.2/lib/cred.c0000644000000000000000000005455711662446664011063 00000000000000/* cred.c --- Implementation of GSS-API Credential Management functions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech */ #include "meta.h" /** * gss_acquire_cred: * @minor_status: (integer, modify) Mechanism specific status code. * @desired_name: (gss_name_t, read) Name of principal whose * credential should be acquired. * @time_req: (Integer, read, optional) Number of seconds that * credentials should remain valid. Specify GSS_C_INDEFINITE to * request that the credentials have the maximum permitted lifetime. * @desired_mechs: (Set of Object IDs, read, optional) Set of * underlying security mechanisms that may be used. * GSS_C_NO_OID_SET may be used to obtain an implementation-specific * default. * @cred_usage: (gss_cred_usage_t, read) GSS_C_BOTH - Credentials may * be used either to initiate or accept security contexts. * GSS_C_INITIATE - Credentials will only be used to initiate * security contexts. GSS_C_ACCEPT - Credentials will only be used * to accept security contexts. * @output_cred_handle: (gss_cred_id_t, modify) The returned * credential handle. Resources associated with this credential * handle must be released by the application after use with a call * to gss_release_cred(). * @actual_mechs: (Set of Object IDs, modify, optional) The set of * mechanisms for which the credential is valid. Storage associated * with the returned OID-set must be released by the application * after use with a call to gss_release_oid_set(). Specify NULL if * not required. * @time_rec: (Integer, modify, optional) Actual number of seconds for * which the returned credentials will remain valid. If the * implementation does not support expiration of credentials, the * value GSS_C_INDEFINITE will be returned. Specify NULL if not * required. * * Allows an application to acquire a handle for a pre-existing * credential by name. GSS-API implementations must impose a local * access-control policy on callers of this routine to prevent * unauthorized callers from acquiring credentials to which they are * not entitled. This routine is not intended to provide a "login to * the network" function, as such a function would involve the * creation of new credentials rather than merely acquiring a handle * to existing credentials. Such functions, if required, should be * defined in implementation-specific extensions to the API. * * If desired_name is GSS_C_NO_NAME, the call is interpreted as a * request for a credential handle that will invoke default behavior * when passed to gss_init_sec_context() (if cred_usage is * GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if * cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). * * Mechanisms should honor the desired_mechs parameter, and return a * credential that is suitable to use only with the requested * mechanisms. An exception to this is the case where one underlying * credential element can be shared by multiple mechanisms; in this * case it is permissible for an implementation to indicate all * mechanisms with which the credential element may be used. If * desired_mechs is an empty set, behavior is undefined. * * This routine is expected to be used primarily by context acceptors, * since implementations are likely to provide mechanism-specific ways * of obtaining GSS-API initiator credentials from the system login * process. Some implementations may therefore not support the * acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via * gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name * produced by applying either gss_inquire_cred to a valid credential, * or gss_inquire_context to an active context. * * If credential acquisition is time-consuming for a mechanism, the * mechanism may choose to delay the actual acquisition until the * credential is required (e.g. by gss_init_sec_context or * gss_accept_sec_context). Such mechanism-specific implementation * decisions should be invisible to the calling application; thus a * call of gss_inquire_cred immediately following the call of * gss_acquire_cred must return valid credential data, and may * therefore incur the overhead of a deferred credential acquisition. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_MECH`: Unavailable mechanism requested. * * `GSS_S_BAD_NAMETYPE`: Type contained within desired_name parameter * is not supported. * * `GSS_S_BAD_NAME`: Value supplied for desired_name parameter is ill * formed. * * `GSS_S_CREDENTIALS_EXPIRED`: The credentials could not be acquired * Because they have expired. * * `GSS_S_NO_CRED`: No credentials were found for the specified name. **/ OM_uint32 gss_acquire_cred (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec) { _gss_mech_api_t mech = NULL; OM_uint32 maj_stat; if (!output_cred_handle) return GSS_S_NO_CRED | GSS_S_CALL_INACCESSIBLE_WRITE; if (desired_mechs != GSS_C_NO_OID_SET) { size_t i; /* Is the desired_mechs an "OR" or "AND" list? I.e., if the OID set contain several OIDs, MUST the credential work with all of them? Or just any of them? The specification isn't entirely clear on this, to me. This implement an OR list, chosing the first mechanism in the OID set we support. We need more information in meta.c to implement AND lists. */ for (i = 0; mech == NULL && i < desired_mechs->count; i++) mech = _gss_find_mech ((&desired_mechs->elements)[i]); } else mech = _gss_find_mech (GSS_C_NO_OID); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } *output_cred_handle = calloc (sizeof (**output_cred_handle), 1); if (!*output_cred_handle) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*output_cred_handle)->mech = mech->mech; maj_stat = mech->acquire_cred (minor_status, desired_name, time_req, desired_mechs, cred_usage, output_cred_handle, actual_mechs, time_rec); if (GSS_ERROR (maj_stat)) { free (*output_cred_handle); *output_cred_handle = GSS_C_NO_CREDENTIAL; return maj_stat; } return GSS_S_COMPLETE; } /** * gss_add_cred: * @minor_status: (integer, modify) Mechanism specific status code. * @input_cred_handle: (gss_cred_id_t, read, optional) The credential * to which a credential-element will be added. If * GSS_C_NO_CREDENTIAL is specified, the routine will compose the * new credential based on default behavior (see text). * Note that, while the credential-handle is not modified by * gss_add_cred(), the underlying credential will be modified if * output_credential_handle is NULL. * @desired_name: (gss_name_t, read.) Name of principal whose * credential should be acquired. * @desired_mech: (Object ID, read) Underlying security mechanism with * which the credential may be used. * @cred_usage: (gss_cred_usage_t, read) GSS_C_BOTH - Credential may * be used either to initiate or accept security contexts. * GSS_C_INITIATE - Credential will only be used to initiate * security contexts. GSS_C_ACCEPT - Credential will only be used * to accept security contexts. * @initiator_time_req: (Integer, read, optional) number of seconds * that the credential should remain valid for initiating security * contexts. This argument is ignored if the composed credentials * are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request * that the credentials have the maximum permitted initiator * lifetime. * @acceptor_time_req: (Integer, read, optional) number of seconds * that the credential should remain valid for accepting security * contexts. This argument is ignored if the composed credentials * are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request * that the credentials have the maximum permitted initiator * lifetime. * @output_cred_handle: (gss_cred_id_t, modify, optional) The returned * credential handle, containing the new credential-element and all * the credential-elements from input_cred_handle. If a valid * pointer to a gss_cred_id_t is supplied for this parameter, * gss_add_cred creates a new credential handle containing all * credential-elements from the input_cred_handle and the newly * acquired credential-element; if NULL is specified for this * parameter, the newly acquired credential-element will be added to * the credential identified by input_cred_handle. The resources * associated with any credential handle returned via this parameter * must be released by the application after use with a call to * gss_release_cred(). * @actual_mechs: (Set of Object IDs, modify, optional) The complete * set of mechanisms for which the new credential is valid. Storage * for the returned OID-set must be freed by the application after * use with a call to gss_release_oid_set(). Specify NULL if not * required. * @initiator_time_rec: (Integer, modify, optional) Actual number of * seconds for which the returned credentials will remain valid for * initiating contexts using the specified mechanism. If the * implementation or mechanism does not support expiration of * credentials, the value GSS_C_INDEFINITE will be returned. Specify * NULL if not required * @acceptor_time_rec: (Integer, modify, optional) Actual number of * seconds for which the returned credentials will remain valid for * accepting security contexts using the specified mechanism. If * the implementation or mechanism does not support expiration of * credentials, the value GSS_C_INDEFINITE will be returned. Specify * NULL if not required * * Adds a credential-element to a credential. The credential-element is * identified by the name of the principal to which it refers. GSS-API * implementations must impose a local access-control policy on callers * of this routine to prevent unauthorized callers from acquiring * credential-elements to which they are not entitled. This routine is * not intended to provide a "login to the network" function, as such a * function would involve the creation of new mechanism-specific * authentication data, rather than merely acquiring a GSS-API handle to * existing data. Such functions, if required, should be defined in * implementation-specific extensions to the API. * * If desired_name is GSS_C_NO_NAME, the call is interpreted as a * request to add a credential element that will invoke default behavior * when passed to gss_init_sec_context() (if cred_usage is * GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if * cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). * * This routine is expected to be used primarily by context acceptors, * since implementations are likely to provide mechanism-specific ways * of obtaining GSS-API initiator credentials from the system login * process. Some implementations may therefore not support the * acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via * gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name * produced by applying either gss_inquire_cred to a valid credential, * or gss_inquire_context to an active context. * * If credential acquisition is time-consuming for a mechanism, the * mechanism may choose to delay the actual acquisition until the * credential is required (e.g. by gss_init_sec_context or * gss_accept_sec_context). Such mechanism-specific implementation * decisions should be invisible to the calling application; thus a call * of gss_inquire_cred immediately following the call of gss_add_cred * must return valid credential data, and may therefore incur the * overhead of a deferred credential acquisition. * * This routine can be used to either compose a new credential * containing all credential-elements of the original in addition to the * newly-acquire credential-element, or to add the new credential- * element to an existing credential. If NULL is specified for the * output_cred_handle parameter argument, the new credential-element * will be added to the credential identified by input_cred_handle; if a * valid pointer is specified for the output_cred_handle parameter, a * new credential handle will be created. * * If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, * gss_add_cred will compose a credential (and set the * output_cred_handle parameter accordingly) based on default behavior. * That is, the call will have the same effect as if the application had * first made a call to gss_acquire_cred(), specifying the same usage * and passing GSS_C_NO_NAME as the desired_name parameter to obtain an * explicit credential handle embodying default behavior, passed this * credential handle to gss_add_cred(), and finally called * gss_release_cred() on the first credential handle. * * If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle * parameter, a non-NULL output_cred_handle must be supplied. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_MECH`: Unavailable mechanism requested. * * `GSS_S_BAD_NAMETYPE`: Type contained within desired_name parameter * is not supported. * * `GSS_S_BAD_NAME`: Value supplied for desired_name parameter is * ill-formed. * * `GSS_S_DUPLICATE_ELEMENT`: The credential already contains an * element for the requested mechanism with overlapping usage and * validity period. * * `GSS_S_CREDENTIALS_EXPIRED`: The required credentials could not be * added because they have expired. * * `GSS_S_NO_CRED`: No credentials were found for the specified name. **/ OM_uint32 gss_add_cred (OM_uint32 * minor_status, const gss_cred_id_t input_cred_handle, const gss_name_t desired_name, const gss_OID desired_mech, gss_cred_usage_t cred_usage, OM_uint32 initiator_time_req, OM_uint32 acceptor_time_req, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * initiator_time_rec, OM_uint32 * acceptor_time_rec) { return GSS_S_UNAVAILABLE; } /** * gss_inquire_cred: * @minor_status: (integer, modify) Mechanism specific status code. * @cred_handle: (gss_cred_id_t, read) A handle that refers to the * target credential. Specify GSS_C_NO_CREDENTIAL to inquire about * the default initiator principal. * @name: (gss_name_t, modify, optional) The name whose identity the * credential asserts. Storage associated with this name should be * freed by the application after use with a call to * gss_release_name(). Specify NULL if not required. * @lifetime: (Integer, modify, optional) The number of seconds for * which the credential will remain valid. If the credential has * expired, this parameter will be set to zero. If the * implementation does not support credential expiration, the value * GSS_C_INDEFINITE will be returned. Specify NULL if not required. * @cred_usage: (gss_cred_usage_t, modify, optional) How the * credential may be used. One of the following: GSS_C_INITIATE, * GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. * @mechanisms: (gss_OID_set, modify, optional) Set of mechanisms * supported by the credential. Storage associated with this OID * set must be freed by the application after use with a call to * gss_release_oid_set(). Specify NULL if not required. * * Obtains information about a credential. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CRED`: The referenced credentials could not be accessed. * * `GSS_S_DEFECTIVE_CREDENTIAL`: The referenced credentials were invalid. * * `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have * expired. If the lifetime parameter was not passed as NULL, it will * be set to 0. **/ OM_uint32 gss_inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms) { gss_cred_id_t credh = cred_handle; _gss_mech_api_t mech; OM_uint32 maj_stat; if (cred_handle == GSS_C_NO_CREDENTIAL) { maj_stat = gss_acquire_cred (minor_status, GSS_C_NO_NAME, GSS_C_INDEFINITE, GSS_C_NO_OID_SET, GSS_C_INITIATE, &credh, NULL, NULL); if (GSS_ERROR (maj_stat)) return maj_stat; } mech = _gss_find_mech (credh->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } maj_stat = mech->inquire_cred (minor_status, credh, name, lifetime, cred_usage, mechanisms); if (cred_handle == GSS_C_NO_CREDENTIAL) gss_release_cred (NULL, &credh); return maj_stat; } /** * gss_inquire_cred_by_mech: * @minor_status: (Integer, modify) Mechanism specific status code. * @cred_handle: (gss_cred_id_t, read) A handle that refers to the * target credential. Specify GSS_C_NO_CREDENTIAL to inquire about * the default initiator principal. * @mech_type: (gss_OID, read) The mechanism for which information * should be returned. * @name: (gss_name_t, modify, optional) The name whose identity the * credential asserts. Storage associated with this name must be * freed by the application after use with a call to * gss_release_name(). Specify NULL if not required. * @initiator_lifetime: (Integer, modify, optional) The number of * seconds for which the credential will remain capable of * initiating security contexts under the specified mechanism. If * the credential can no longer be used to initiate contexts, or if * the credential usage for this mechanism is GSS_C_ACCEPT, this * parameter will be set to zero. If the implementation does not * support expiration of initiator credentials, the value * GSS_C_INDEFINITE will be returned. Specify NULL if not required. * @acceptor_lifetime: (Integer, modify, optional) The number of * seconds for which the credential will remain capable of accepting * security contexts under the specified mechanism. If the * credential can no longer be used to accept contexts, or if the * credential usage for this mechanism is GSS_C_INITIATE, this * parameter will be set to zero. If the implementation does not * support expiration of acceptor credentials, the value * GSS_C_INDEFINITE will be returned. Specify NULL if not required. * @cred_usage: (gss_cred_usage_t, modify, optional) How the * credential may be used with the specified mechanism. One of the * following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL * if not required. * * Obtains per-mechanism information about a credential. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CRED`: The referenced credentials could not be accessed. * * `GSS_S_DEFECTIVE_CREDENTIAL`: The referenced credentials were invalid. * * `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have * expired. If the lifetime parameter was not passed as NULL, it will * be set to 0. **/ OM_uint32 gss_inquire_cred_by_mech (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage) { _gss_mech_api_t mech; gss_cred_id_t credh = cred_handle; OM_uint32 maj_stat; if (mech_type == GSS_C_NO_OID) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } mech = _gss_find_mech (mech_type); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } if (cred_handle == GSS_C_NO_CREDENTIAL) { maj_stat = gss_acquire_cred (minor_status, GSS_C_NO_NAME, GSS_C_INDEFINITE, /* FIXME: We should create an OID set with mech_type and pass it as desired_mechs. Maybe even check actual_mechs too. */ GSS_C_NO_OID_SET, GSS_C_INITIATE, &credh, NULL, NULL); if (GSS_ERROR (maj_stat)) return maj_stat; } maj_stat = mech->inquire_cred_by_mech (minor_status, credh, mech_type, name, initiator_lifetime, acceptor_lifetime, cred_usage); if (cred_handle == GSS_C_NO_CREDENTIAL) gss_release_cred (NULL, &credh); return maj_stat; } /** * gss_release_cred: * @minor_status: (Integer, modify) Mechanism specific status code. * @cred_handle: (gss_cred_id_t, modify, optional) Opaque handle * identifying credential to be released. If GSS_C_NO_CREDENTIAL is * supplied, the routine will complete successfully, but will do * nothing. * * Informs GSS-API that the specified credential handle is no longer * required by the application, and frees associated resources. The * cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion * of this call. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CRED`: Credentials could not be accessed. **/ OM_uint32 gss_release_cred (OM_uint32 * minor_status, gss_cred_id_t * cred_handle) { _gss_mech_api_t mech; OM_uint32 maj_stat; if (!cred_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CRED | GSS_S_CALL_INACCESSIBLE_READ; } if (*cred_handle == GSS_C_NO_CREDENTIAL) { if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } mech = _gss_find_mech ((*cred_handle)->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_DEFECTIVE_CREDENTIAL; } maj_stat = mech->release_cred (minor_status, cred_handle); free (*cred_handle); *cred_handle = GSS_C_NO_CREDENTIAL; if (GSS_ERROR (maj_stat)) return maj_stat; return GSS_S_COMPLETE; } gss-1.0.2/lib/ext.c0000644000000000000000000000321711662452036010717 00000000000000/* ext.c --- Implementation of GSS specific extensions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /** * gss_userok: * @name: (gss_name_t, read) Name to be compared. * @username: Zero terminated string with username. * * Compare the username against the output from gss_export_name() * invoked on @name, after removing the leading OID. This answers the * question whether the particular mechanism would authenticate them * as the same principal * * WARNING: This function is a GNU GSS specific extension, and is not * part of the official GSS API. * * Return value: Returns 0 if the names match, non-0 otherwise. **/ int gss_userok (const gss_name_t name, const char *username) { /* FIXME: Call gss_export_name, then remove OID. */ return name->length == strlen (username) && memcmp (name->value, username, name->length) == 0; } gss-1.0.2/lib/krb5/0000755000000000000000000000000011663555055010701 500000000000000gss-1.0.2/lib/krb5/oid.c0000644000000000000000000000700611546676340011544 00000000000000/* krb5/oid.c --- Definition of static Kerberos 5 GSS-API OIDs. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" /* * Upon advancement to the level of Proposed Standard RFC, the * Kerberos V5 GSS-API mechanism will be identified by an Object * Identifier having the value: * * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) krb5(2)} */ gss_OID_desc GSS_KRB5_static = { 9, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02" }; gss_OID GSS_KRB5 = &GSS_KRB5_static; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) user_name(1)}. The recommended symbolic name * for this type is "GSS_KRB5_NT_USER_NAME". */ gss_OID_desc GSS_KRB5_NT_USER_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x01" }; gss_OID GSS_KRB5_NT_USER_NAME = &GSS_KRB5_NT_USER_NAME_static; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) service_name(4)}. The previously recommended * symbolic name for this type is * "GSS_KRB5_NT_HOSTBASED_SERVICE_NAME". The currently preferred * symbolic name for this type is "GSS_C_NT_HOSTBASED_SERVICE". */ gss_OID GSS_KRB5_NT_HOSTBASED_SERVICE_NAME = &GSS_C_NT_HOSTBASED_SERVICE_static; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) krb5(2) krb5_name(1)}. The recommended symbolic name for * this type is "GSS_KRB5_NT_PRINCIPAL_NAME". */ gss_OID_desc GSS_KRB5_NT_PRINCIPAL_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x01" }; gss_OID GSS_KRB5_NT_PRINCIPAL_NAME = &GSS_KRB5_NT_PRINCIPAL_NAME_static; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) machine_uid_name(2)}. The recommended * symbolic name for this type is "GSS_KRB5_NT_MACHINE_UID_NAME". */ gss_OID_desc GSS_KRB5_NT_MACHINE_UID_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x02" }; gss_OID GSS_KRB5_NT_MACHINE_UID_NAME = &GSS_KRB5_NT_MACHINE_UID_NAME_static; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) string_uid_name(3)}. The recommended symbolic * name for this type is "GSS_KRB5_NT_STRING_UID_NAME". */ gss_OID_desc GSS_KRB5_NT_STRING_UID_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x03" }; gss_OID GSS_KRB5_NT_STRING_UID_NAME = &GSS_KRB5_NT_STRING_UID_NAME_static; gss-1.0.2/lib/krb5/utils.c0000644000000000000000000000245411546676340012133 00000000000000/* krb5/utils.c --- Kerberos 5 GSS-API helper functions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" /* Return number of seconds left of ticket lifetime, or 0 if ticket has expired, or GSS_C_INDEFINITE if ticket is NULL. */ OM_uint32 gss_krb5_tktlifetime (Shishi_tkt * tkt) { time_t now, end; if (!tkt) return GSS_C_INDEFINITE; if (!shishi_tkt_valid_now_p (tkt)) return 0; now = time (NULL); end = shishi_tkt_endctime (tkt); return end - now; } gss-1.0.2/lib/krb5/Makefile.am0000644000000000000000000000247311546676326012670 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/lib/gl \ -I$(top_srcdir)/lib \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers noinst_LTLIBRARIES = libgss-shishi.la libgss_shishi_la_SOURCES = k5internal.h protos.h \ context.c checksum.c checksum.h error.c name.c cred.c msg.c oid.c \ utils.c libgss_shishi_la_LIBADD = @LTLIBINTL@ @LTLIBSHISHI@ localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ gss-1.0.2/lib/krb5/name.c0000644000000000000000000001012711546676340011707 00000000000000/* krb5/name.c --- Implementation of Kerberos 5 GSS-API Name functions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" OM_uint32 gss_krb5_canonicalize_name (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name) { OM_uint32 maj_stat; if (minor_status) *minor_status = 0; /* We consider (a zero terminated) GSS_KRB5_NT_PRINCIPAL_NAME the canonical mechanism name type. Convert everything into it. */ if (gss_oid_equal (input_name->type, GSS_C_NT_EXPORT_NAME)) { if (input_name->length > 15) { *output_name = malloc (sizeof (**output_name)); if (!*output_name) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*output_name)->type = GSS_KRB5_NT_PRINCIPAL_NAME; (*output_name)->length = input_name->length - 15; (*output_name)->value = malloc ((*output_name)->length + 1); if (!(*output_name)->value) { free (*output_name); if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy ((*output_name)->value, input_name->value + 15, (*output_name)->length); (*output_name)->value[(*output_name)->length] = '\0'; } else { return GSS_S_BAD_NAME; } } else if (gss_oid_equal (input_name->type, GSS_C_NT_HOSTBASED_SERVICE)) { char *p; /* We don't support service-names without hostname part because we can't compute a canonicalized name of the local host. Calling gethostname does not give a canonicalized name. */ if (!memchr (input_name->value, '@', input_name->length)) { *minor_status = GSS_KRB5_S_G_BAD_SERVICE_NAME; return GSS_S_COMPLETE; } /* We don't do DNS name canoncalization since that is insecure. */ maj_stat = gss_duplicate_name (minor_status, input_name, output_name); if (GSS_ERROR (maj_stat)) return maj_stat; (*output_name)->type = GSS_KRB5_NT_PRINCIPAL_NAME; p = memchr ((*output_name)->value, '@', (*output_name)->length); if (p) *p = '/'; } else if (gss_oid_equal (input_name->type, GSS_KRB5_NT_PRINCIPAL_NAME)) { maj_stat = gss_duplicate_name (minor_status, input_name, output_name); if (GSS_ERROR (maj_stat)) return maj_stat; } else { *output_name = GSS_C_NO_NAME; return GSS_S_BAD_NAMETYPE; } return GSS_S_COMPLETE; } #define TOK_LEN 2 #define MECH_OID_LEN_LEN 2 #define MECH_OID_ASN1_LEN_LEN 2 #define NAME_LEN_LEN 4 OM_uint32 gss_krb5_export_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name) { size_t msglen = input_name->length & 0xFFFFFFFF; size_t len = TOK_LEN + MECH_OID_LEN_LEN + MECH_OID_ASN1_LEN_LEN + GSS_KRB5->length + NAME_LEN_LEN + msglen; char *p; exported_name->length = len; p = exported_name->value = malloc (len); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } sprintf (p, "\x04\x01\x01\x0B\x06\x09%s", (char *) GSS_KRB5->elements); p[2] = '\0'; p += 15; *p++ = (msglen >> 24) & 0xFF; *p++ = (msglen >> 16) & 0xFF; *p++ = (msglen >> 8) & 0xFF; *p++ = msglen & 0xFF; memcpy (p, input_name->value, msglen); if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } gss-1.0.2/lib/krb5/checksum.h0000644000000000000000000000245511546676340012603 00000000000000/* krb5/checksum.h --- (Un)pack checksum fields in Krb5 GSS contexts. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ OM_uint32 _gss_krb5_checksum_pack (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_channel_bindings_t input_chan_bindings, OM_uint32 req_flags, char **data, size_t * datalen); OM_uint32 _gss_krb5_checksum_parse (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_channel_bindings_t input_chan_bindings); gss-1.0.2/lib/krb5/Makefile.in0000644000000000000000000006644111663554705012702 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib/krb5 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgss_shishi_la_DEPENDENCIES = am_libgss_shishi_la_OBJECTS = context.lo checksum.lo error.lo name.lo \ cred.lo msg.lo oid.lo utils.lo libgss_shishi_la_OBJECTS = $(am_libgss_shishi_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgss_shishi_la_SOURCES) DIST_SOURCES = $(libgss_shishi_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/lib/gl \ -I$(top_srcdir)/lib \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers noinst_LTLIBRARIES = libgss-shishi.la libgss_shishi_la_SOURCES = k5internal.h protos.h \ context.c checksum.c checksum.h error.c name.c cred.c msg.c oid.c \ utils.c libgss_shishi_la_LIBADD = @LTLIBINTL@ @LTLIBSHISHI@ all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/krb5/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu lib/krb5/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgss-shishi.la: $(libgss_shishi_la_OBJECTS) $(libgss_shishi_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgss_shishi_la_OBJECTS) $(libgss_shishi_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checksum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cred.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/name.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/lib/krb5/context.c0000644000000000000000000003345011546676340012457 00000000000000/* krb5/context.c --- Implementation of Kerberos 5 GSS Context functions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" /* Get checksum (un)packers. */ #include "checksum.h" #define TOK_LEN 2 #define TOK_AP_REQ "\x01\x00" #define TOK_AP_REP "\x02\x00" /* Request part of gss_krb5_init_sec_context. Assumes that context_handle is valid, and has krb5 specific structure, and that output_token is valid and cleared. */ static OM_uint32 init_request (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec) { gss_ctx_id_t ctx = *context_handle; _gss_krb5_ctx_t k5 = ctx->krb5; char *cksum, *der; size_t cksumlen, derlen; int rc; OM_uint32 maj_stat; Shishi_tkts_hint hint; /* Get service ticket. */ maj_stat = gss_krb5_canonicalize_name (minor_status, target_name, GSS_C_NO_OID, &k5->peerptr); if (GSS_ERROR (maj_stat)) return maj_stat; memset (&hint, 0, sizeof (hint)); hint.server = k5->peerptr->value; hint.endtime = time_req; k5->tkt = shishi_tkts_get (shishi_tkts_default (k5->sh), &hint); if (!k5->tkt) { if (minor_status) *minor_status = GSS_KRB5_S_KG_CCACHE_NOMATCH; return GSS_S_NO_CRED; } /* Create Authenticator checksum field. */ maj_stat = _gss_krb5_checksum_pack (minor_status, initiator_cred_handle, context_handle, input_chan_bindings, req_flags, &cksum, &cksumlen); if (GSS_ERROR (maj_stat)) return maj_stat; /* Create AP-REQ in output_token. */ rc = shishi_ap_tktoptionsraw (k5->sh, &k5->ap, k5->tkt, SHISHI_APOPTIONS_MUTUAL_REQUIRED, 0x8003, cksum, cksumlen); free (cksum); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = shishi_authenticator_seqnumber_get (k5->sh, shishi_ap_authenticator (k5->ap), &k5->initseqnr); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = shishi_ap_req_der (k5->ap, &der, &derlen); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = _gss_encapsulate_token_prefix (TOK_AP_REQ, TOK_LEN, der, derlen, GSS_KRB5->elements, GSS_KRB5->length, &output_token->value, &output_token->length); free (der); if (rc != 0) return GSS_S_FAILURE; if (req_flags & GSS_C_MUTUAL_FLAG) return GSS_S_CONTINUE_NEEDED; return GSS_S_COMPLETE; } /* Reply part of gss_krb5_init_sec_context. Assumes that context_handle is valid, and has krb5 specific structure, and that output_token is valid and cleared. */ static OM_uint32 init_reply (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec) { gss_ctx_id_t ctx = *context_handle; _gss_krb5_ctx_t k5 = ctx->krb5; OM_uint32 tmp_min_stat; gss_buffer_desc data; int rc; if (gss_decapsulate_token (input_token, GSS_KRB5, &data) != GSS_S_COMPLETE) return GSS_S_DEFECTIVE_TOKEN; if (data.length < TOK_LEN) { gss_release_buffer (&tmp_min_stat, &data); return GSS_S_DEFECTIVE_TOKEN; } if (memcmp (data.value, TOK_AP_REP, TOK_LEN) != 0) { gss_release_buffer (&tmp_min_stat, &data); return GSS_S_DEFECTIVE_TOKEN; } rc = shishi_ap_rep_der_set (k5->ap, (char *) data.value + TOK_LEN, data.length - TOK_LEN); gss_release_buffer (&tmp_min_stat, &data); if (rc != SHISHI_OK) return GSS_S_DEFECTIVE_TOKEN; rc = shishi_ap_rep_verify (k5->ap); if (rc != SHISHI_OK) return GSS_S_DEFECTIVE_TOKEN; rc = shishi_encapreppart_seqnumber_get (k5->sh, shishi_ap_encapreppart (k5->ap), &k5->acceptseqnr); if (rc != SHISHI_OK) { /* A strict 1964 implementation would return GSS_S_DEFECTIVE_TOKEN here. gssapi-cfx permit absent sequence number, though. */ k5->acceptseqnr = 0; } return GSS_S_COMPLETE; } /* Initiates the establishment of a krb5 security context between the application and a remote peer. Assumes that context_handle and output_token are valid and cleared. */ OM_uint32 gss_krb5_init_sec_context (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec) { gss_ctx_id_t ctx = *context_handle; _gss_krb5_ctx_t k5 = ctx->krb5; OM_uint32 maj_stat; int rc; if (minor_status) *minor_status = 0; if (initiator_cred_handle) { /* We only support the default initiator. See k5internal.h for adding a Shishi_tkt to the credential structure. I'm not sure what the use would be -- user-to-user authentication perhaps? Later: if you have tickets for foo@BAR and bar@FOO, it may be useful to call gss_acquire_cred first to chose which one to initiate the context with. Not many applications need this. */ return GSS_S_NO_CRED; } if (k5 == NULL) { k5 = ctx->krb5 = calloc (sizeof (*k5), 1); if (!k5) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } rc = shishi_init (&k5->sh); if (rc != SHISHI_OK) return GSS_S_FAILURE; } if (!k5->reqdone) { maj_stat = init_request (minor_status, initiator_cred_handle, context_handle, target_name, mech_type, req_flags, time_req, input_chan_bindings, input_token, actual_mech_type, output_token, ret_flags, time_rec); if (GSS_ERROR (maj_stat)) return maj_stat; k5->flags = req_flags & ( /* GSS_C_DELEG_FLAG | */ GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG | GSS_C_CONF_FLAG | GSS_C_INTEG_FLAG); /* PROT_READY is not mentioned in 1964/gssapi-cfx but we support it anyway. */ k5->flags |= GSS_C_PROT_READY_FLAG; if (ret_flags) *ret_flags = k5->flags; k5->key = shishi_ap_key (k5->ap); k5->reqdone = 1; } else if (k5->reqdone && k5->flags & GSS_C_MUTUAL_FLAG && !k5->repdone) { maj_stat = init_reply (minor_status, initiator_cred_handle, context_handle, target_name, mech_type, req_flags, time_req, input_chan_bindings, input_token, actual_mech_type, output_token, ret_flags, time_rec); if (GSS_ERROR (maj_stat)) return maj_stat; if (ret_flags) *ret_flags = k5->flags; k5->repdone = 1; } else maj_stat = GSS_S_FAILURE; if (time_rec) *time_rec = gss_krb5_tktlifetime (k5->tkt); return maj_stat; } /* Allows a remotely initiated security context between the application and a remote peer to be established, using krb5. Assumes context_handle is valid. */ OM_uint32 gss_krb5_accept_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle) { gss_buffer_desc in; gss_ctx_id_t cx; _gss_krb5_ctx_t cxk5; _gss_krb5_cred_t crk5; OM_uint32 tmp_min_stat; int rc; if (minor_status) *minor_status = 0; if (ret_flags) *ret_flags = 0; if (!acceptor_cred_handle) /* XXX support GSS_C_NO_CREDENTIAL: acquire_cred() default server */ return GSS_S_NO_CRED; if (*context_handle) return GSS_S_FAILURE; crk5 = acceptor_cred_handle->krb5; cx = calloc (sizeof (*cx), 1); if (!cx) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } cxk5 = calloc (sizeof (*cxk5), 1); if (!cxk5) { free (cx); if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } cx->mech = GSS_KRB5; cx->krb5 = cxk5; /* XXX cx->peer?? */ *context_handle = cx; cxk5->sh = crk5->sh; cxk5->key = crk5->key; cxk5->acceptor = 1; rc = shishi_ap (cxk5->sh, &cxk5->ap); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = gss_decapsulate_token (input_token_buffer, GSS_KRB5, &in); if (rc != GSS_S_COMPLETE) return GSS_S_BAD_MIC; if (in.length < TOK_LEN) { gss_release_buffer (&tmp_min_stat, &in); return GSS_S_BAD_MIC; } if (memcmp (in.value, TOK_AP_REQ, TOK_LEN) != 0) { gss_release_buffer (&tmp_min_stat, &in); return GSS_S_BAD_MIC; } rc = shishi_ap_req_der_set (cxk5->ap, (char *) in.value + TOK_LEN, in.length - TOK_LEN); gss_release_buffer (&tmp_min_stat, &in); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = shishi_ap_req_process (cxk5->ap, crk5->key); if (rc != SHISHI_OK) { if (minor_status) *minor_status = GSS_KRB5_S_G_VALIDATE_FAILED; return GSS_S_FAILURE; } rc = shishi_authenticator_seqnumber_get (cxk5->sh, shishi_ap_authenticator (cxk5->ap), &cxk5->initseqnr); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = _gss_krb5_checksum_parse (minor_status, context_handle, input_chan_bindings); if (rc != GSS_S_COMPLETE) return GSS_S_FAILURE; cxk5->tkt = shishi_ap_tkt (cxk5->ap); cxk5->key = shishi_ap_key (cxk5->ap); if (shishi_apreq_mutual_required_p (crk5->sh, shishi_ap_req (cxk5->ap))) { Shishi_asn1 aprep; char *der; size_t len; rc = shishi_ap_rep_asn1 (cxk5->ap, &aprep); if (rc != SHISHI_OK) { printf ("Error creating AP-REP: %s\n", shishi_strerror (rc)); return GSS_S_FAILURE; } rc = shishi_encapreppart_seqnumber_get (cxk5->sh, shishi_ap_encapreppart (cxk5->ap), &cxk5->acceptseqnr); if (rc != SHISHI_OK) { /* A strict 1964 implementation would return GSS_S_DEFECTIVE_TOKEN here. gssapi-cfx permit absent sequence number, though. */ cxk5->acceptseqnr = 0; } rc = shishi_asn1_to_der (crk5->sh, aprep, &der, &len); if (rc != SHISHI_OK) { printf ("Error der encoding aprep: %s\n", shishi_strerror (rc)); return GSS_S_FAILURE; } rc = _gss_encapsulate_token_prefix (TOK_AP_REP, TOK_LEN, der, len, GSS_KRB5->elements, GSS_KRB5->length, &output_token->value, &output_token->length); if (rc != 0) return GSS_S_FAILURE; if (ret_flags) *ret_flags = GSS_C_MUTUAL_FLAG; } else { output_token->value = NULL; output_token->length = 0; } if (src_name) { gss_name_t p; p = malloc (sizeof (*p)); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } rc = shishi_encticketpart_client (cxk5->sh, shishi_tkt_encticketpart (cxk5->tkt), &p->value, &p->length); if (rc != SHISHI_OK) return GSS_S_FAILURE; p->type = GSS_KRB5_NT_PRINCIPAL_NAME; *src_name = p; } /* PROT_READY is not mentioned in 1964/gssapi-cfx but we support it anyway. */ if (ret_flags) *ret_flags |= GSS_C_PROT_READY_FLAG; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /* Delete a krb5 security context. Assumes context_handle is valid. Should only delete krb5 specific part of context. */ OM_uint32 gss_krb5_delete_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token) { _gss_krb5_ctx_t k5 = (*context_handle)->krb5; if (k5->peerptr != GSS_C_NO_NAME) gss_release_name (NULL, &k5->peerptr); if (k5->ap) shishi_ap_done (k5->ap); if (!k5->acceptor) shishi_done (k5->sh); free (k5); if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /* Determines the number of seconds for which the specified krb5 context will remain valid. Assumes context_handle is valid. */ OM_uint32 gss_krb5_context_time (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec) { _gss_krb5_ctx_t k5 = context_handle->krb5; if (time_rec) { *time_rec = gss_krb5_tktlifetime (k5->tkt); if (*time_rec == 0) { if (minor_status) *minor_status = 0; return GSS_S_CONTEXT_EXPIRED; } } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } gss-1.0.2/lib/krb5/error.c0000644000000000000000000001130311546676340012115 00000000000000/* krb5/error.c --- Kerberos 5 GSS-API error handling functionality. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" struct gss_status_codes { gss_uint32 err; const char *name; const char *text; }; static struct gss_status_codes gss_krb5_errors[] = { /* 4.1.1. Non-Kerberos-specific codes */ {GSS_KRB5_S_G_BAD_SERVICE_NAME, "GSS_KRB5_S_G_BAD_SERVICE_NAME", N_("No @ in SERVICE-NAME name string")}, {GSS_KRB5_S_G_BAD_STRING_UID, "GSS_KRB5_S_G_BAD_STRING_UID", N_("STRING-UID-NAME contains nondigits")}, {GSS_KRB5_S_G_NOUSER, "GSS_KRB5_S_G_NOUSER", N_("UID does not resolve to username")}, {GSS_KRB5_S_G_VALIDATE_FAILED, "GSS_KRB5_S_G_VALIDATE_FAILED", N_("Validation error")}, {GSS_KRB5_S_G_BUFFER_ALLOC, "GSS_KRB5_S_G_BUFFER_ALLOC", N_("Couldn't allocate gss_buffer_t data")}, {GSS_KRB5_S_G_BAD_MSG_CTX, "GSS_KRB5_S_G_BAD_MSG_CTX", N_("Message context invalid")}, {GSS_KRB5_S_G_WRONG_SIZE, "GSS_KRB5_S_G_WRONG_SIZE", N_("Buffer is the wrong size")}, {GSS_KRB5_S_G_BAD_USAGE, "GSS_KRB5_S_G_BAD_USAGE", N_("Credential usage type is unknown")}, {GSS_KRB5_S_G_UNKNOWN_QOP, "GSS_KRB5_S_G_UNKNOWN_QOP", N_("Unknown quality of protection specified")}, /* 4.1.2. Kerberos-specific-codes */ {GSS_KRB5_S_KG_CCACHE_NOMATCH, "GSS_KRB5_S_KG_CCACHE_NOMATCH", N_("Principal in credential cache does not match desired name")}, {GSS_KRB5_S_KG_KEYTAB_NOMATCH, "GSS_KRB5_S_KG_KEYTAB_NOMATCH", N_("No principal in keytab matches desired name")}, {GSS_KRB5_S_KG_TGT_MISSING, "GSS_KRB5_S_KG_TGT_MISSING", N_("Credential cache has no TGT")}, {GSS_KRB5_S_KG_NO_SUBKEY, "GSS_KRB5_S_KG_NO_SUBKEY", N_("Authenticator has no subkey")}, {GSS_KRB5_S_KG_CONTEXT_ESTABLISHED, "GSS_KRB5_S_KG_CONTEXT_ESTABLISHED", N_("Context is already fully established")}, {GSS_KRB5_S_KG_BAD_SIGN_TYPE, "GSS_KRB5_S_KG_BAD_SIGN_TYPE", N_("Unknown signature type in token")}, {GSS_KRB5_S_KG_BAD_LENGTH, "GSS_KRB5_S_KG_BAD_LENGTH", N_("Invalid field length in token")}, {GSS_KRB5_S_KG_CTX_INCOMPLETE, "GSS_KRB5_S_KG_CTX_INCOMPLETE", N_("Attempt to use incomplete security context")} }; OM_uint32 gss_krb5_display_status (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string) { if (minor_status) *minor_status = 0; switch (status_value) { case 0: status_string->value = strdup (_("No krb5 error")); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); break; /* 4.1.1. Non-Kerberos-specific codes */ case GSS_KRB5_S_G_BAD_SERVICE_NAME: case GSS_KRB5_S_G_BAD_STRING_UID: case GSS_KRB5_S_G_NOUSER: case GSS_KRB5_S_G_VALIDATE_FAILED: case GSS_KRB5_S_G_BUFFER_ALLOC: case GSS_KRB5_S_G_BAD_MSG_CTX: case GSS_KRB5_S_G_WRONG_SIZE: case GSS_KRB5_S_G_BAD_USAGE: case GSS_KRB5_S_G_UNKNOWN_QOP: /* 4.1.2. Kerberos-specific-codes */ case GSS_KRB5_S_KG_CCACHE_NOMATCH: case GSS_KRB5_S_KG_KEYTAB_NOMATCH: case GSS_KRB5_S_KG_TGT_MISSING: case GSS_KRB5_S_KG_NO_SUBKEY: case GSS_KRB5_S_KG_CONTEXT_ESTABLISHED: case GSS_KRB5_S_KG_BAD_SIGN_TYPE: case GSS_KRB5_S_KG_BAD_LENGTH: case GSS_KRB5_S_KG_CTX_INCOMPLETE: status_string->value = strdup (_(gss_krb5_errors[status_value - 1].text)); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); break; default: status_string->value = strdup (_("Unknown krb5 error")); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); break; } return GSS_S_COMPLETE; } gss-1.0.2/lib/krb5/cred.c0000644000000000000000000001344711546676340011714 00000000000000/* krb5/cred.c --- Kerberos 5 GSS-API credential management functions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" static OM_uint32 acquire_cred1 (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec) { gss_name_t name = desired_name; _gss_krb5_cred_t k5 = (*output_cred_handle)->krb5; OM_uint32 maj_stat; if (desired_name == GSS_C_NO_NAME) { gss_buffer_desc buf = { 4, (char *) "host" }; maj_stat = gss_import_name (minor_status, &buf, GSS_C_NT_HOSTBASED_SERVICE, &name); if (GSS_ERROR (maj_stat)) return maj_stat; } maj_stat = gss_krb5_canonicalize_name (minor_status, name, GSS_KRB5, &k5->peerptr); if (GSS_ERROR (maj_stat)) return maj_stat; if (desired_name == GSS_C_NO_NAME) { maj_stat = gss_release_name (minor_status, &name); if (GSS_ERROR (maj_stat)) return maj_stat; } if (shishi_init_server (&k5->sh) != SHISHI_OK) return GSS_S_FAILURE; { char *p; p = malloc (k5->peerptr->length + 1); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy (p, k5->peerptr->value, k5->peerptr->length); p[k5->peerptr->length] = 0; k5->key = shishi_hostkeys_for_serverrealm (k5->sh, p, NULL); free (p); } if (!k5->key) { if (minor_status) *minor_status = GSS_KRB5_S_KG_KEYTAB_NOMATCH; return GSS_S_NO_CRED; } if (time_rec) *time_rec = GSS_C_INDEFINITE; return GSS_S_COMPLETE; } OM_uint32 gss_krb5_acquire_cred (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec) { OM_uint32 maj_stat; gss_cred_id_t p = *output_cred_handle; p->krb5 = calloc (sizeof (*p->krb5), 1); if (!p->krb5) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } if (actual_mechs) { maj_stat = gss_create_empty_oid_set (minor_status, actual_mechs); if (GSS_ERROR (maj_stat)) { free (p->krb5); return maj_stat; } maj_stat = gss_add_oid_set_member (minor_status, GSS_KRB5, actual_mechs); if (GSS_ERROR (maj_stat)) { free (p->krb5); return maj_stat; } } maj_stat = acquire_cred1 (minor_status, desired_name, time_req, desired_mechs, cred_usage, &p, actual_mechs, time_rec); if (GSS_ERROR (maj_stat)) { if (actual_mechs) gss_release_oid_set (NULL, actual_mechs); free (p->krb5); return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } static OM_uint32 inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms) { OM_uint32 maj_stat; if (cred_handle == GSS_C_NO_CREDENTIAL) return GSS_S_NO_CRED; if (mechanisms) { maj_stat = gss_create_empty_oid_set (minor_status, mechanisms); if (GSS_ERROR (maj_stat)) return maj_stat; maj_stat = gss_add_oid_set_member (minor_status, GSS_KRB5, mechanisms); if (GSS_ERROR (maj_stat)) return maj_stat; } if (name) { maj_stat = gss_duplicate_name (minor_status, cred_handle->krb5->peerptr, name); if (GSS_ERROR (maj_stat)) return maj_stat; } if (cred_usage) *cred_usage = GSS_C_BOTH; if (lifetime) *lifetime = GSS_C_INDEFINITE; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } OM_uint32 gss_krb5_inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms) { return inquire_cred (minor_status, cred_handle, name, lifetime, cred_usage, mechanisms); } OM_uint32 gss_krb5_inquire_cred_by_mech (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage) { OM_uint32 maj_stat; maj_stat = inquire_cred (minor_status, cred_handle, name, initiator_lifetime, cred_usage, NULL); if (acceptor_lifetime) *acceptor_lifetime = *initiator_lifetime; return maj_stat; } OM_uint32 gss_krb5_release_cred (OM_uint32 * minor_status, gss_cred_id_t * cred_handle) { _gss_krb5_cred_t k5 = (*cred_handle)->krb5; if (k5->peerptr != GSS_C_NO_NAME) gss_release_name (NULL, &k5->peerptr); shishi_key_done (k5->key); shishi_done (k5->sh); free (k5); if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } gss-1.0.2/lib/krb5/protos.h0000644000000000000000000001104711546676340012324 00000000000000/* protos.h --- Export Kerberos 5 GSS functions to core GSS library. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* See context.c. */ extern OM_uint32 gss_krb5_init_sec_context (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec); extern OM_uint32 gss_krb5_accept_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle); extern OM_uint32 gss_krb5_delete_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token); extern OM_uint32 gss_krb5_context_time (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec); /* See cred.c. */ extern OM_uint32 gss_krb5_acquire_cred (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec); extern OM_uint32 gss_krb5_inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms); extern OM_uint32 gss_krb5_inquire_cred_by_mech (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage); extern OM_uint32 gss_krb5_release_cred (OM_uint32 * minor_status, gss_cred_id_t * cred_handle); /* See error.c. */ extern OM_uint32 gss_krb5_display_status (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string); /* See msg.c. */ extern OM_uint32 gss_krb5_get_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token); extern OM_uint32 gss_krb5_verify_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state); extern OM_uint32 gss_krb5_unwrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, gss_qop_t * qop_state); extern OM_uint32 gss_krb5_wrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer); /* See name.c. */ extern OM_uint32 gss_krb5_canonicalize_name (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name); extern OM_uint32 gss_krb5_export_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name); gss-1.0.2/lib/krb5/k5internal.h0000644000000000000000000000273711546676340013060 00000000000000/* k5internal.h --- Internal header file for Kerberos 5 GSS. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" #include "protos.h" #include typedef struct _gss_krb5_cred_struct { Shishi *sh; gss_name_t peerptr; /* For user-to-user, we could have a Shishi_tkt here too. */ Shishi_key *key; } _gss_krb5_cred_desc, *_gss_krb5_cred_t; typedef struct _gss_krb5_ctx_struct { Shishi *sh; Shishi_ap *ap; Shishi_tkt *tkt; Shishi_key *key; gss_name_t peerptr; int acceptor; uint32_t acceptseqnr; uint32_t initseqnr; OM_uint32 flags; int reqdone; int repdone; } _gss_krb5_ctx_desc, *_gss_krb5_ctx_t; OM_uint32 gss_krb5_tktlifetime (Shishi_tkt * tkt); gss-1.0.2/lib/krb5/checksum.c0000644000000000000000000002122711546676340012574 00000000000000/* krb5/checksum.c --- (Un)pack checksum fields in Krb5 GSS contexts. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get GSS API. */ #include "k5internal.h" /* Get specification. */ #include "checksum.h" static void pack_uint32 (OM_uint32 i, char *buf) { buf[0] = i & 0xFF; buf[1] = (i >> 8) & 0xFF; buf[2] = (i >> 16) & 0xFF; buf[3] = (i >> 24) & 0xFF; } static int hash_cb (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_channel_bindings_t input_chan_bindings, char **out) { gss_ctx_id_t ctx = *context_handle; _gss_krb5_ctx_t k5 = ctx->krb5; char *buf, *p; size_t len; int res; if (input_chan_bindings->initiator_address.length > UINT32_MAX || input_chan_bindings->acceptor_address.length > UINT32_MAX || input_chan_bindings->application_data.length > UINT32_MAX) return GSS_S_BAD_BINDINGS; len = sizeof (OM_uint32) * 5 + input_chan_bindings->initiator_address.length + input_chan_bindings->acceptor_address.length + input_chan_bindings->application_data.length; p = buf = malloc (len); if (!buf) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } pack_uint32 (input_chan_bindings->initiator_addrtype, p); p += sizeof (OM_uint32); pack_uint32 (input_chan_bindings->initiator_address.length, p); p += sizeof (OM_uint32); if (input_chan_bindings->initiator_address.length > 0) { memcpy (p, input_chan_bindings->initiator_address.value, input_chan_bindings->initiator_address.length); p += input_chan_bindings->initiator_address.length; } pack_uint32 (input_chan_bindings->acceptor_addrtype, p); p += sizeof (OM_uint32); pack_uint32 (input_chan_bindings->acceptor_address.length, p); p += sizeof (OM_uint32); if (input_chan_bindings->acceptor_address.length > 0) { memcpy (p, input_chan_bindings->acceptor_address.value, input_chan_bindings->acceptor_address.length); p += input_chan_bindings->acceptor_address.length; } pack_uint32 (input_chan_bindings->application_data.length, p); p += sizeof (OM_uint32); if (input_chan_bindings->application_data.length > 0) memcpy (p, input_chan_bindings->application_data.value, input_chan_bindings->application_data.length); res = shishi_md5 (k5->sh, buf, len, out); free (buf); if (res != SHISHI_OK) return GSS_S_FAILURE; return GSS_S_COMPLETE; } /* Create the checksum value field from input parameters. */ OM_uint32 _gss_krb5_checksum_pack (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_channel_bindings_t input_chan_bindings, OM_uint32 req_flags, char **data, size_t * datalen) { char *p; *datalen = 24; p = *data = malloc (*datalen); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } /* * RFC 1964 / gssapi-cfx: * * The checksum value field's format is as follows: * * Byte Name Description * 0..3 Lgth Number of bytes in Bnd field; * Currently contains hex 10 00 00 00 * (16, represented in little-endian form) */ memcpy (&p[0], "\x10\x00\x00\x00", 4); /* length of Bnd */ /* * 4..19 Bnd MD5 hash of channel bindings, taken over all non-null * components of bindings, in order of declaration. * Integer fields within channel bindings are represented * in little-endian order for the purposes of the MD5 * calculation. * * In computing the contents of the "Bnd" field, the following detailed * points apply: * * (1) Each integer field shall be formatted into four bytes, using * little-endian byte ordering, for purposes of MD5 hash * computation. * * (2) All input length fields within gss_buffer_desc elements of a * gss_channel_bindings_struct, even those which are zero-valued, * shall be included in the hash calculation; the value elements of * gss_buffer_desc elements shall be dereferenced, and the * resulting data shall be included within the hash computation, * only for the case of gss_buffer_desc elements having non-zero * length specifiers. * * (3) If the caller passes the value GSS_C_NO_BINDINGS instead of * a valid channel bindings structure, the Bnd field shall be set * to 16 zero-valued bytes. * */ if (input_chan_bindings != GSS_C_NO_CHANNEL_BINDINGS) { char *md5hash; int res; res = hash_cb (minor_status, context_handle, input_chan_bindings, &md5hash); if (res != GSS_S_COMPLETE) { free (p); return res; } memcpy (&p[4], md5hash, 16); free (md5hash); } else memset (&p[4], 0, 16); /* * 20..23 Flags Bit vector of context-establishment flags, * with values consistent with RFC-1509, p. 41: * GSS_C_DELEG_FLAG: 1 * GSS_C_MUTUAL_FLAG: 2 * GSS_C_REPLAY_FLAG: 4 * GSS_C_SEQUENCE_FLAG: 8 * GSS_C_CONF_FLAG: 16 * GSS_C_INTEG_FLAG: 32 * The resulting bit vector is encoded into bytes 20..23 * in little-endian form. */ req_flags &= /* GSS_C_DELEG_FLAG | */ GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG | GSS_C_CONF_FLAG | GSS_C_INTEG_FLAG; p[20] = req_flags & 0xFF; p[21] = (req_flags >> 8) & 0xFF; p[22] = (req_flags >> 16) & 0xFF; p[23] = (req_flags >> 24) & 0xFF; /* * 24..25 DlgOpt The delegation option identifier (=1) in * little-endian order [optional]. This field * and the next two fields are present if and * only if GSS_C_DELEG_FLAG is set as described * in section 4.1.1.1. * 26..27 Dlgth The length of the Deleg field in little- * endian order [optional]. * 28..(n-1) Deleg A KRB_CRED message (n = Dlgth + 28) * [optional]. * n..last Exts Extensions [optional]. * */ if (req_flags & GSS_C_DELEG_FLAG) { /* XXX We don't support credential delegation yet. We should not fail here, as GSS_C_DELEG_FLAG is masked out above, and in context.c. */ } return GSS_S_COMPLETE; } OM_uint32 _gss_krb5_checksum_parse (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_channel_bindings_t input_chan_bindings) { gss_ctx_id_t ctx = *context_handle; _gss_krb5_ctx_t k5 = ctx->krb5; char *out = NULL; size_t len = 0; int rc; char *md5hash; if (shishi_ap_authenticator_cksumtype (k5->ap) != 0x8003) { if (minor_status) *minor_status = GSS_KRB5_S_G_VALIDATE_FAILED; return GSS_S_FAILURE; } rc = shishi_ap_authenticator_cksumdata (k5->ap, out, &len); if (rc != SHISHI_TOO_SMALL_BUFFER) return GSS_S_FAILURE; out = malloc (len); if (!out) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } rc = shishi_ap_authenticator_cksumdata (k5->ap, out, &len); if (rc != SHISHI_OK) { free (out); return GSS_S_FAILURE; } if (memcmp (out, "\x10\x00\x00\x00", 4) != 0) { free (out); return GSS_S_DEFECTIVE_TOKEN; } if (input_chan_bindings != GSS_C_NO_CHANNEL_BINDINGS) { rc = hash_cb (minor_status, context_handle, input_chan_bindings, &md5hash); if (rc != GSS_S_COMPLETE) { free (out); return GSS_S_DEFECTIVE_TOKEN; } rc = memcmp (&out[4], md5hash, 16); free (md5hash); } else { char zeros[16]; memset (&zeros[0], 0, sizeof zeros); rc = memcmp (&out[4], zeros, 16); } free (out); if (rc != 0) return GSS_S_DEFECTIVE_TOKEN; return GSS_S_COMPLETE; } gss-1.0.2/lib/krb5/msg.c0000644000000000000000000003072711546676340011565 00000000000000/* krb5/msg.c --- Implementation of Kerberos 5 GSS-API Per-Message functions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" #define TOK_LEN 2 #define TOK_WRAP "\x02\x01" #define C2I(buf) ((buf[0] & 0xFF) | \ ((buf[1] & 0xFF) << 8) | \ ((buf[2] & 0xFF) << 16) | \ ((buf[3] & 0xFF) << 24)) OM_uint32 gss_krb5_get_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token) { return GSS_S_UNAVAILABLE; } OM_uint32 gss_krb5_verify_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state) { return GSS_S_UNAVAILABLE; } OM_uint32 gss_krb5_wrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer) { _gss_krb5_ctx_t k5 = context_handle->krb5; size_t padlength; gss_buffer_desc data; char *p; size_t tmplen; int rc; switch (shishi_key_type (k5->key)) { /* XXX implement other checksums */ case SHISHI_DES_CBC_MD5: { char header[8]; char seqno[8]; char *eseqno; char *cksum; char confounder[8]; /* Typical data: ;; 02 01 00 00 ff ff ff ff 0c 22 1f 79 59 3d 00 cb ;; d5 78 2f fb 50 d2 b8 59 fb b4 e0 9b d0 a2 fa dc ;; 01 00 20 00 04 04 04 04 Translates into: ;; HEADER ENCRYPTED SEQ.NUMBER ;; DES-MAC-MD5 CKSUM CONFOUNDER ;; PADDED DATA */ padlength = 8 - input_message_buffer->length % 8; data.length = 4 * 8 + input_message_buffer->length + padlength; p = malloc (data.length); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } /* XXX encrypt data iff confidential option chosen */ /* Setup header and confounder */ memcpy (header, TOK_WRAP, 2); /* TOK_ID: Wrap 0201 */ memcpy (header + 2, "\x00\x00", 2); /* SGN_ALG: DES-MAC-MD5 */ memcpy (header + 4, "\xFF\xFF", 2); /* SEAL_ALG: none */ memcpy (header + 6, "\xFF\xFF", 2); /* filler */ rc = shishi_randomize (k5->sh, 0, confounder, 8); if (rc != SHISHI_OK) return GSS_S_FAILURE; /* Compute checksum over header, confounder, input string, and pad */ memcpy (p, header, 8); memcpy (p + 8, confounder, 8); memcpy (p + 16, input_message_buffer->value, input_message_buffer->length); memset (p + 16 + input_message_buffer->length, (int) padlength, padlength); rc = shishi_checksum (k5->sh, k5->key, 0, SHISHI_RSA_MD5_DES_GSS, p, 16 + input_message_buffer->length + padlength, &cksum, &tmplen); if (rc != SHISHI_OK || tmplen != 8) return GSS_S_FAILURE; /* seq_nr */ if (k5->acceptor) { seqno[0] = k5->acceptseqnr & 0xFF; seqno[1] = k5->acceptseqnr >> 8 & 0xFF; seqno[2] = k5->acceptseqnr >> 16 & 0xFF; seqno[3] = k5->acceptseqnr >> 24 & 0xFF; memset (seqno + 4, 0xFF, 4); } else { seqno[0] = k5->initseqnr & 0xFF; seqno[1] = k5->initseqnr >> 8 & 0xFF; seqno[2] = k5->initseqnr >> 16 & 0xFF; seqno[3] = k5->initseqnr >> 24 & 0xFF; memset (seqno + 4, 0, 4); } rc = shishi_encrypt_iv_etype (k5->sh, k5->key, 0, SHISHI_DES_CBC_NONE, cksum, 8, seqno, 8, &eseqno, &tmplen); if (rc != SHISHI_OK || tmplen != 8) return GSS_S_FAILURE; /* put things in place */ memcpy (p, header, 8); memcpy (p + 8, eseqno, 8); free (eseqno); memcpy (p + 16, cksum, 8); free (cksum); memcpy (p + 24, confounder, 8); memcpy (p + 32, input_message_buffer->value, input_message_buffer->length); memset (p + 32 + input_message_buffer->length, (int) padlength, padlength); data.value = p; rc = gss_encapsulate_token (&data, GSS_KRB5, output_message_buffer); if (rc != GSS_S_COMPLETE) return GSS_S_FAILURE; if (k5->acceptor) k5->acceptseqnr++; else k5->initseqnr++; } break; case SHISHI_DES3_CBC_HMAC_SHA1_KD: { char *tmp; padlength = 8 - input_message_buffer->length % 8; data.length = 8 + 8 + 20 + 8 + input_message_buffer->length + padlength; p = malloc (data.length); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } /* XXX encrypt data iff confidential option chosen */ /* Compute checksum over header, confounder, input string, and pad */ memcpy (p, TOK_WRAP, 2); /* TOK_ID: Wrap */ memcpy (p + 2, "\x04\x00", 2); /* SGN_ALG: 3DES */ memcpy (p + 4, "\xFF\xFF", 2); /* SEAL_ALG: none */ memcpy (p + 6, "\xFF\xFF", 2); /* filler */ rc = shishi_randomize (k5->sh, 0, p + 8, 8); if (rc != SHISHI_OK) return GSS_S_FAILURE; memcpy (p + 16, input_message_buffer->value, input_message_buffer->length); memset (p + 16 + input_message_buffer->length, (int) padlength, padlength); rc = shishi_checksum (k5->sh, k5->key, SHISHI_KEYUSAGE_GSS_R2, SHISHI_HMAC_SHA1_DES3_KD, p, 16 + input_message_buffer->length + padlength, &tmp, &tmplen); if (rc != SHISHI_OK || tmplen != 20) return GSS_S_FAILURE; memcpy (p + 16, tmp, tmplen); memcpy (p + 36, p + 8, 8); /* seq_nr */ if (k5->acceptor) { (p + 8)[0] = k5->acceptseqnr & 0xFF; (p + 8)[1] = k5->acceptseqnr >> 8 & 0xFF; (p + 8)[2] = k5->acceptseqnr >> 16 & 0xFF; (p + 8)[3] = k5->acceptseqnr >> 24 & 0xFF; memset (p + 8 + 4, 0xFF, 4); } else { (p + 8)[0] = k5->initseqnr & 0xFF; (p + 8)[1] = k5->initseqnr >> 8 & 0xFF; (p + 8)[2] = k5->initseqnr >> 16 & 0xFF; (p + 8)[3] = k5->initseqnr >> 24 & 0xFF; memset (p + 8 + 4, 0, 4); } rc = shishi_encrypt_iv_etype (k5->sh, k5->key, 0, SHISHI_DES3_CBC_NONE, p + 16, 8, /* cksum */ p + 8, 8, &tmp, &tmplen); if (rc != SHISHI_OK || tmplen != 8) return GSS_S_FAILURE; memcpy (p + 8, tmp, tmplen); free (tmp); memcpy (p + 8 + 8 + 20 + 8, input_message_buffer->value, input_message_buffer->length); memset (p + 8 + 8 + 20 + 8 + input_message_buffer->length, (int) padlength, padlength); data.value = p; rc = gss_encapsulate_token (&data, GSS_KRB5, output_message_buffer); if (rc != GSS_S_COMPLETE) return GSS_S_FAILURE; if (k5->acceptor) k5->acceptseqnr++; else k5->initseqnr++; break; } default: return GSS_S_FAILURE; } return GSS_S_COMPLETE; } OM_uint32 gss_krb5_unwrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, gss_qop_t * qop_state) { _gss_krb5_ctx_t k5 = context_handle->krb5; gss_buffer_desc tok; char *data; OM_uint32 sgn_alg, seal_alg; size_t tmplen; int rc; rc = gss_decapsulate_token (input_message_buffer, GSS_KRB5, &tok); if (rc != GSS_S_COMPLETE) return GSS_S_BAD_MIC; if (tok.length < 8) return GSS_S_BAD_MIC; if (memcmp (tok.value, TOK_WRAP, TOK_LEN) != 0) return GSS_S_BAD_MIC; data = tok.value; sgn_alg = data[2] & 0xFF; sgn_alg |= data[3] << 8 & 0xFF00; seal_alg = data[4] & 0xFF; seal_alg |= data[5] << 8 & 0xFF00; if (conf_state != NULL) *conf_state = seal_alg == 0xFFFF; if (memcmp (data + 6, "\xFF\xFF", 2) != 0) return GSS_S_BAD_MIC; switch (sgn_alg) { /* XXX implement other checksums */ case 0: /* DES-MD5 */ { size_t padlen; char *pt; char header[8]; char encseqno[8]; char seqno[8]; char cksum[8]; char confounder[8]; char *tmp; uint32_t seqnr; size_t outlen, i; /* Typical data: ;; 02 01 00 00 ff ff ff ff 0c 22 1f 79 59 3d 00 cb ;; d5 78 2f fb 50 d2 b8 59 fb b4 e0 9b d0 a2 fa dc ;; 01 00 20 00 04 04 04 04 Translates into: ;; HEADER ENCRYPTED SEQ.NUMBER ;; DES-MAC-MD5 CKSUM CONFOUNDER ;; PADDED DATA */ if (tok.length < 5 * 8) return GSS_S_BAD_MIC; memcpy (header, data, 8); memcpy (encseqno, data + 8, 8); memcpy (cksum, data + 16, 8); memcpy (confounder, data + 24, 8); pt = data + 32; /* XXX decrypt data iff confidential option chosen */ rc = shishi_decrypt_iv_etype (k5->sh, k5->key, 0, SHISHI_DES_CBC_NONE, cksum, 8, encseqno, 8, &tmp, &outlen); if (rc != SHISHI_OK) return GSS_S_FAILURE; if (outlen != 8) return GSS_S_BAD_MIC; memcpy (seqno, tmp, 8); free (tmp); if (memcmp (seqno + 4, k5->acceptor ? "\x00\x00\x00\x00" : "\xFF\xFF\xFF\xFF", 4) != 0) return GSS_S_BAD_MIC; seqnr = C2I (seqno); if (seqnr != (k5->acceptor ? k5->initseqnr : k5->acceptseqnr)) return GSS_S_BAD_MIC; if (k5->acceptor) k5->initseqnr++; else k5->acceptseqnr++; /* Check pad */ padlen = data[tok.length - 1]; if (padlen > 8) return GSS_S_BAD_MIC; for (i = 1; i <= padlen; i++) if (data[tok.length - i] != (int) padlen) return GSS_S_BAD_MIC; /* Write header and confounder next to data */ memcpy (data + 16, header, 8); memcpy (data + 24, confounder, 8); /* Checksum header + confounder + data + pad */ rc = shishi_checksum (k5->sh, k5->key, 0, SHISHI_RSA_MD5_DES_GSS, data + 16, tok.length - 16, &tmp, &tmplen); if (rc != SHISHI_OK || tmplen != 8) return GSS_S_FAILURE; memcpy (data + 8, tmp, tmplen); /* Compare checksum */ if (tmplen != 8 || memcmp (cksum, data + 8, 8) != 0) return GSS_S_BAD_MIC; /* Copy output data */ output_message_buffer->length = tok.length - 8 - 8 - 8 - 8 - padlen; output_message_buffer->value = malloc (output_message_buffer->length); if (!output_message_buffer->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy (output_message_buffer->value, pt, tok.length - 4 * 8 - padlen); } break; case 4: /* 3DES */ { size_t padlen; char *p; char *t; char cksum[20]; size_t outlen, i; uint32_t seqnr; if (tok.length < 8 + 8 + 20 + 8 + 8) return GSS_S_BAD_MIC; memcpy (cksum, data + 8 + 8, 20); /* XXX decrypt data iff confidential option chosen */ p = data + 8; rc = shishi_decrypt_iv_etype (k5->sh, k5->key, 0, SHISHI_DES3_CBC_NONE, cksum, 8, p, 8, &t, &outlen); if (rc != SHISHI_OK || outlen != 8) return GSS_S_FAILURE; memcpy (p, t, 8); free (t); if (memcmp (p + 4, k5->acceptor ? "\x00\x00\x00\x00" : "\xFF\xFF\xFF\xFF", 4) != 0) return GSS_S_BAD_MIC; seqnr = C2I (p); if (seqnr != (k5->acceptor ? k5->initseqnr : k5->acceptseqnr)) return GSS_S_BAD_MIC; if (k5->acceptor) k5->initseqnr++; else k5->acceptseqnr++; /* Check pad */ padlen = data[tok.length - 1]; if (padlen > 8) return GSS_S_BAD_MIC; for (i = 1; i <= padlen; i++) if (data[tok.length - i] != (int) padlen) return GSS_S_BAD_MIC; /* Write header next to confounder */ memcpy (data + 8 + 20, data, 8); /* Checksum header + confounder + data + pad */ rc = shishi_checksum (k5->sh, k5->key, SHISHI_KEYUSAGE_GSS_R2, SHISHI_HMAC_SHA1_DES3_KD, data + 20 + 8, tok.length - 20 - 8, &t, &tmplen); if (rc != SHISHI_OK || tmplen != 20) return GSS_S_FAILURE; memcpy (data + 8 + 8, t, tmplen); free (t); /* Compare checksum */ if (tmplen != 20 || memcmp (cksum, data + 8 + 8, 20) != 0) return GSS_S_BAD_MIC; /* Copy output data */ output_message_buffer->length = tok.length - 8 - 20 - 8 - 8 - padlen; output_message_buffer->value = malloc (output_message_buffer->length); if (!output_message_buffer->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy (output_message_buffer->value, data + 20 + 8 + 8 + 8, tok.length - 20 - 8 - 8 - 8 - padlen); } break; default: return GSS_S_FAILURE; } return GSS_S_COMPLETE; } gss-1.0.2/lib/version.c0000644000000000000000000000312411546676340011610 00000000000000/* version.c --- Version handling. * Copyright (C) 2002-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" #include /* for strverscmp */ /** * gss_check_version: * @req_version: version string to compare with, or NULL * * Check that the version of the library is at minimum the one * given as a string in @req_version. * * WARNING: This function is a GNU GSS specific extension, and is not * part of the official GSS API. * * Return value: The actual version string of the library; NULL if the * condition is not met. If NULL is passed to this function no * check is done and only the version string is returned. **/ const char * gss_check_version (const char *req_version) { if (!req_version || strverscmp (req_version, PACKAGE_VERSION) <= 0) return PACKAGE_VERSION; return NULL; } gss-1.0.2/lib/obsolete.c0000644000000000000000000000424211546676340011741 00000000000000/* obsolete.c --- Obsolete GSS-API v1 compatibility mappings. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" OM_uint32 gss_sign (OM_uint32 * minor_status, gss_ctx_id_t context_handle, int qop_req, gss_buffer_t message_buffer, gss_buffer_t message_token) { return gss_get_mic (minor_status, context_handle, (gss_qop_t) qop_req, message_buffer, message_token); } OM_uint32 gss_verify (OM_uint32 * minor_status, gss_ctx_id_t context_handle, gss_buffer_t message_buffer, gss_buffer_t token_buffer, int *qop_state) { return gss_verify_mic (minor_status, context_handle, message_buffer, token_buffer, (gss_qop_t *) qop_state); } OM_uint32 gss_seal (OM_uint32 * minor_status, gss_ctx_id_t context_handle, int conf_req_flag, int qop_req, gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer) { return gss_wrap (minor_status, context_handle, conf_req_flag, (gss_qop_t) qop_req, input_message_buffer, conf_state, output_message_buffer); } OM_uint32 gss_unseal (OM_uint32 * minor_status, gss_ctx_id_t context_handle, gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, int *qop_state) { return gss_unwrap (minor_status, context_handle, input_message_buffer, output_message_buffer, conf_state, (gss_qop_t *) qop_state); } gss-1.0.2/lib/msg.c0000644000000000000000000002575111546676340010723 00000000000000/* msg.c --- Implementation of GSS-API Per-Message functions. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech */ #include "meta.h" /** * gss_get_mic: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) Identifies the context on * which the message will be sent. * @qop_req: (gss_qop_t, read, optional) Specifies requested quality * of protection. Callers are encouraged, on portability grounds, * to accept the default quality of protection offered by the chosen * mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT * for this parameter. If an unsupported protection strength is * requested, gss_get_mic will return a major_status of * GSS_S_BAD_QOP. * @message_buffer: (buffer, opaque, read) Message to be protected. * @message_token: (buffer, opaque, modify) Buffer to receive token. The * application must free storage associated with this buffer after * use with a call to gss_release_buffer(). * * Generates a cryptographic MIC for the supplied message, and places * the MIC in a token for transfer to the peer application. The * qop_req parameter allows a choice between several cryptographic * algorithms, if supported by the chosen mechanism. * * Since some application-level protocols may wish to use tokens * emitted by gss_wrap() to provide "secure framing", implementations * must support derivation of MICs from zero-length messages. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_CONTEXT_EXPIRED`: The context has already expired. * * `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a * valid context. * * `GSS_S_BAD_QOP`: The specified QOP is not supported by the * mechanism. **/ OM_uint32 gss_get_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token) { _gss_mech_api_t mech; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT; } mech = _gss_find_mech (context_handle->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->get_mic (minor_status, context_handle, qop_req, message_buffer, message_token); } /** * gss_verify_mic: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) Identifies the context on * which the message arrived. * @message_buffer: (buffer, opaque, read) Message to be verified. * @token_buffer: (buffer, opaque, read) Token associated with * message. * @qop_state: (gss_qop_t, modify, optional) Quality of protection * gained from MIC Specify NULL if not required. * * Verifies that a cryptographic MIC, contained in the token * parameter, fits the supplied message. The qop_state parameter * allows a message recipient to determine the strength of protection * that was applied to the message. * * Since some application-level protocols may wish to use tokens * emitted by gss_wrap() to provide "secure framing", implementations * must support the calculation and verification of MICs over * zero-length messages. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_DEFECTIVE_TOKEN`: The token failed consistency checks. * * `GSS_S_BAD_SIG`: The MIC was incorrect. * * `GSS_S_DUPLICATE_TOKEN`: The token was valid, and contained a * correct MIC for the message, but it had already been processed. * * `GSS_S_OLD_TOKEN`: The token was valid, and contained a correct MIC * for the message, but it is too old to check for duplication. * * `GSS_S_UNSEQ_TOKEN`: The token was valid, and contained a correct * MIC for the message, but has been verified out of sequence; a later * token has already been received. * * `GSS_S_GAP_TOKEN`: The token was valid, and contained a correct MIC * for the message, but has been verified out of sequence; an earlier * expected token has not yet been received. * * `GSS_S_CONTEXT_EXPIRED`: The context has already expired. * * `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a * valid context. **/ OM_uint32 gss_verify_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state) { _gss_mech_api_t mech; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT; } mech = _gss_find_mech (context_handle->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->verify_mic (minor_status, context_handle, message_buffer, token_buffer, qop_state); } /** * gss_wrap: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) Identifies the context on * which the message will be sent. * @conf_req_flag: (boolean, read) Non-zero - Both confidentiality and * integrity services are requested. Zero - Only integrity service is * requested. * @qop_req: (gss_qop_t, read, optional) Specifies required quality of * protection. A mechanism-specific default may be requested by * setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported * protection strength is requested, gss_wrap will return a * major_status of GSS_S_BAD_QOP. * @input_message_buffer: (buffer, opaque, read) Message to be * protected. * @conf_state: (boolean, modify, optional) Non-zero - * Confidentiality, data origin authentication and integrity * services have been applied. Zero - Integrity and data origin * services only has been applied. Specify NULL if not required. * @output_message_buffer: (buffer, opaque, modify) Buffer to receive * protected message. Storage associated with this message must be * freed by the application after use with a call to * gss_release_buffer(). * * Attaches a cryptographic MIC and optionally encrypts the specified * input_message. The output_message contains both the MIC and the * message. The qop_req parameter allows a choice between several * cryptographic algorithms, if supported by the chosen mechanism. * * Since some application-level protocols may wish to use tokens * emitted by gss_wrap() to provide "secure framing", implementations * must support the wrapping of zero-length messages. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_CONTEXT_EXPIRED`: The context has already expired. * * `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a * valid context. * * `GSS_S_BAD_QOP`: The specified QOP is not supported by the * mechanism. **/ OM_uint32 gss_wrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer) { _gss_mech_api_t mech; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT; } mech = _gss_find_mech (context_handle->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->wrap (minor_status, context_handle, conf_req_flag, qop_req, input_message_buffer, conf_state, output_message_buffer); } /** * gss_unwrap: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) Identifies the context on * which the message arrived. * @input_message_buffer: (buffer, opaque, read) Protected message. * @output_message_buffer: (buffer, opaque, modify) Buffer to receive * unwrapped message. Storage associated with this buffer must be * freed by the application after use use with a call to * gss_release_buffer(). * @conf_state: (boolean, modify, optional) Non-zero - Confidentiality * and integrity protection were used. Zero - Integrity service only * was used. Specify NULL if not required. * @qop_state: (gss_qop_t, modify, optional) Quality of protection * provided. Specify NULL if not required. * * Converts a message previously protected by gss_wrap back to a * usable form, verifying the embedded MIC. The conf_state parameter * indicates whether the message was encrypted; the qop_state * parameter indicates the strength of protection that was used to * provide the confidentiality and integrity services. * * Since some application-level protocols may wish to use tokens * emitted by gss_wrap() to provide "secure framing", implementations * must support the wrapping and unwrapping of zero-length messages. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_DEFECTIVE_TOKEN`: The token failed consistency checks. * * `GSS_S_BAD_SIG`: The MIC was incorrect. * * `GSS_S_DUPLICATE_TOKEN`: The token was valid, and contained a * correct MIC for the message, but it had already been processed. * * `GSS_S_OLD_TOKEN`: The token was valid, and contained a correct MIC * for the message, but it is too old to check for duplication. * * `GSS_S_UNSEQ_TOKEN`: The token was valid, and contained a correct * MIC for the message, but has been verified out of sequence; a later * token has already been received. * * `GSS_S_GAP_TOKEN`: The token was valid, and contained a correct MIC * for the message, but has been verified out of sequence; an earlier * expected token has not yet been received. * * `GSS_S_CONTEXT_EXPIRED`: The context has already expired. * * `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a * valid context. **/ OM_uint32 gss_unwrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, gss_qop_t * qop_state) { _gss_mech_api_t mech; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT; } mech = _gss_find_mech (context_handle->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->unwrap (minor_status, context_handle, input_message_buffer, output_message_buffer, conf_state, qop_state); } gss-1.0.2/src/0000755000000000000000000000000011663555055010057 500000000000000gss-1.0.2/src/gss_cmd.h0000644000000000000000000001524311663554727011601 00000000000000/** @file gss_cmd.h * @brief The header file for the command line option parser * generated by GNU Gengetopt version 2.22.4 * http://www.gnu.org/software/gengetopt. * DO NOT modify this file, since it can be overwritten * @author GNU Gengetopt by Lorenzo Bettini */ #ifndef GSS_CMD_H #define GSS_CMD_H /* If we use autoconf. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include /* for FILE */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifndef CMDLINE_PARSER_PACKAGE /** @brief the program name (used for printing errors) */ #define CMDLINE_PARSER_PACKAGE PACKAGE #endif #ifndef CMDLINE_PARSER_PACKAGE_NAME /** @brief the complete program name (used for help and version) */ #ifdef PACKAGE_NAME #define CMDLINE_PARSER_PACKAGE_NAME PACKAGE_NAME #else #define CMDLINE_PARSER_PACKAGE_NAME PACKAGE #endif #endif #ifndef CMDLINE_PARSER_VERSION /** @brief the program version */ #define CMDLINE_PARSER_VERSION VERSION #endif /** @brief Where the command line options are stored */ struct gengetopt_args_info { const char *help_help; /**< @brief Print help and exit help description. */ const char *version_help; /**< @brief Print version and exit help description. */ long major_arg; /**< @brief See gss.c for doc string. */ char * major_orig; /**< @brief See gss.c for doc string original value given at command line. */ const char *major_help; /**< @brief See gss.c for doc string help description. */ const char *list_mechanisms_help; /**< @brief See gss.c for doc string help description. */ int quiet_flag; /**< @brief Silent operation (default=off). */ const char *quiet_help; /**< @brief Silent operation help description. */ unsigned int help_given ; /**< @brief Whether help was given. */ unsigned int version_given ; /**< @brief Whether version was given. */ unsigned int major_given ; /**< @brief Whether major was given. */ unsigned int list_mechanisms_given ; /**< @brief Whether list-mechanisms was given. */ unsigned int quiet_given ; /**< @brief Whether quiet was given. */ } ; /** @brief The additional parameters to pass to parser functions */ struct cmdline_parser_params { int override; /**< @brief whether to override possibly already present options (default 0) */ int initialize; /**< @brief whether to initialize the option structure gengetopt_args_info (default 1) */ int check_required; /**< @brief whether to check that all required options were provided (default 1) */ int check_ambiguity; /**< @brief whether to check for options already specified in the option structure gengetopt_args_info (default 0) */ int print_errors; /**< @brief whether getopt_long should print an error message for a bad option (default 1) */ } ; /** @brief the purpose string of the program */ extern const char *gengetopt_args_info_purpose; /** @brief the usage string of the program */ extern const char *gengetopt_args_info_usage; /** @brief all the lines making the help output */ extern const char *gengetopt_args_info_help[]; /** * The command line parser * @param argc the number of command line options * @param argv the command line options * @param args_info the structure where option information will be stored * @return 0 if everything went fine, NON 0 if an error took place */ int cmdline_parser (int argc, char **argv, struct gengetopt_args_info *args_info); /** * The command line parser (version with additional parameters - deprecated) * @param argc the number of command line options * @param argv the command line options * @param args_info the structure where option information will be stored * @param override whether to override possibly already present options * @param initialize whether to initialize the option structure my_args_info * @param check_required whether to check that all required options were provided * @return 0 if everything went fine, NON 0 if an error took place * @deprecated use cmdline_parser_ext() instead */ int cmdline_parser2 (int argc, char **argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required); /** * The command line parser (version with additional parameters) * @param argc the number of command line options * @param argv the command line options * @param args_info the structure where option information will be stored * @param params additional parameters for the parser * @return 0 if everything went fine, NON 0 if an error took place */ int cmdline_parser_ext (int argc, char **argv, struct gengetopt_args_info *args_info, struct cmdline_parser_params *params); /** * Save the contents of the option struct into an already open FILE stream. * @param outfile the stream where to dump options * @param args_info the option struct to dump * @return 0 if everything went fine, NON 0 if an error took place */ int cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info); /** * Save the contents of the option struct into a (text) file. * This file can be read by the config file parser (if generated by gengetopt) * @param filename the file where to save * @param args_info the option struct to save * @return 0 if everything went fine, NON 0 if an error took place */ int cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info); /** * Print the help */ void cmdline_parser_print_help(void); /** * Print the version */ void cmdline_parser_print_version(void); /** * Initializes all the fields a cmdline_parser_params structure * to their default values * @param params the structure to initialize */ void cmdline_parser_params_init(struct cmdline_parser_params *params); /** * Allocates dynamically a cmdline_parser_params structure and initializes * all its fields to their default values * @return the created and initialized cmdline_parser_params structure */ struct cmdline_parser_params *cmdline_parser_params_create(void); /** * Initializes the passed gengetopt_args_info structure's fields * (also set default values for options that have a default) * @param args_info the structure to initialize */ void cmdline_parser_init (struct gengetopt_args_info *args_info); /** * Deallocates the string fields of the gengetopt_args_info structure * (but does not deallocate the structure itself) * @param args_info the structure to deallocate */ void cmdline_parser_free (struct gengetopt_args_info *args_info); /** * Checks that all the required options were specified * @param args_info the structure to check * @param prog_name the name of the program that will be used to print * possible errors * @return */ int cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* GSS_CMD_H */ gss-1.0.2/src/gl/0000755000000000000000000000000011663555055010461 500000000000000gss-1.0.2/src/gl/progname.h0000644000000000000000000000377611662447025012373 00000000000000/* Program name management. Copyright (C) 2001-2004, 2006, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _PROGNAME_H #define _PROGNAME_H /* Programs using this file should do the following in main(): set_program_name (argv[0]); */ #ifdef __cplusplus extern "C" { #endif /* String containing name the program is called with. */ extern const char *program_name; /* Set program_name, based on argv[0]. argv0 must be a string allocated with indefinite extent, and must not be modified after this call. */ extern void set_program_name (const char *argv0); #if defined(ENABLE_RELOCATABLE) && ENABLE_RELOCATABLE /* Set program_name, based on argv[0], and original installation prefix and directory, for relocatability. */ extern void set_program_name_and_installdir (const char *argv0, const char *orig_installprefix, const char *orig_installdir); #undef set_program_name #define set_program_name(ARG0) \ set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) /* Return the full pathname of the current executable, based on the earlier call to set_program_name_and_installdir. Return NULL if unknown. */ extern char *get_full_program_name (void); #endif #ifdef __cplusplus } #endif #endif /* _PROGNAME_H */ gss-1.0.2/src/gl/progname.c0000644000000000000000000000615011662447025012353 00000000000000/* Program name management. Copyright (C) 2001-2003, 2005-2011 Free Software Foundation, Inc. Written by Bruno Haible , 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ #include "progname.h" #include /* get program_invocation_name declaration */ #include #include #include /* String containing name the program is called with. To be initialized by main(). */ const char *program_name = NULL; /* Set program_name, based on argv[0]. argv0 must be a string allocated with indefinite extent, and must not be modified after this call. */ void set_program_name (const char *argv0) { /* libtool creates a temporary executable whose name is sometimes prefixed with "lt-" (depends on the platform). It also makes argv[0] absolute. But the name of the temporary executable is a detail that should not be visible to the end user and to the test suite. Remove this "/.libs/" or "/.libs/lt-" prefix here. */ const char *slash; const char *base; /* Sanity check. POSIX requires the invoking process to pass a non-NULL argv[0]. */ if (argv0 == NULL) { /* It's a bug in the invoking program. Help diagnosing it. */ fputs ("A NULL argv[0] was passed through an exec system call.\n", stderr); abort (); } slash = strrchr (argv0, '/'); base = (slash != NULL ? slash + 1 : argv0); if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) { argv0 = base; if (strncmp (base, "lt-", 3) == 0) { argv0 = base + 3; /* On glibc systems, remove the "lt-" prefix from the variable program_invocation_short_name. */ #if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME program_invocation_short_name = (char *) argv0; #endif } } /* But don't strip off a leading / in general, because when the user runs /some/hidden/place/bin/cp foo foo he should get the error message /some/hidden/place/bin/cp: `foo' and `foo' are the same file not cp: `foo' and `foo' are the same file */ program_name = argv0; /* On glibc systems, the error() function comes from libc and uses the variable program_invocation_name, not program_name. So set this variable as well. */ #if HAVE_DECL_PROGRAM_INVOCATION_NAME program_invocation_name = (char *) argv0; #endif } gss-1.0.2/src/gl/msvc-nothrow.h0000644000000000000000000000311411662447025013213 00000000000000/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _MSVC_NOTHROW_H #define _MSVC_NOTHROW_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines wrappers that turn such an invalid parameter notification into an error code. */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ # include # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Override _get_osfhandle. */ extern intptr_t _gl_nothrow_get_osfhandle (int fd); # define _get_osfhandle _gl_nothrow_get_osfhandle # endif #endif #endif /* _MSVC_NOTHROW_H */ gss-1.0.2/src/gl/strerror-override.c0000644000000000000000000002103011662447025014234 00000000000000/* strerror-override.c --- POSIX compatible system error routine Copyright (C) 2010-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2010. */ #include #include "strerror-override.h" #include #if GNULIB_defined_EWINSOCK /* native Windows platforms */ # if HAVE_WINSOCK2_H # include # endif #endif /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ const char * strerror_override (int errnum) { /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ switch (errnum) { #if REPLACE_STRERROR_0 case 0: return "Success"; #endif #if GNULIB_defined_ESOCK /* native Windows platforms with older */ case EINPROGRESS: return "Operation now in progress"; case EALREADY: return "Operation already in progress"; case ENOTSOCK: return "Socket operation on non-socket"; case EDESTADDRREQ: return "Destination address required"; case EMSGSIZE: return "Message too long"; case EPROTOTYPE: return "Protocol wrong type for socket"; case ENOPROTOOPT: return "Protocol not available"; case EPROTONOSUPPORT: return "Protocol not supported"; case EOPNOTSUPP: return "Operation not supported"; case EAFNOSUPPORT: return "Address family not supported by protocol"; case EADDRINUSE: return "Address already in use"; case EADDRNOTAVAIL: return "Cannot assign requested address"; case ENETDOWN: return "Network is down"; case ENETUNREACH: return "Network is unreachable"; case ECONNRESET: return "Connection reset by peer"; case ENOBUFS: return "No buffer space available"; case EISCONN: return "Transport endpoint is already connected"; case ENOTCONN: return "Transport endpoint is not connected"; case ETIMEDOUT: return "Connection timed out"; case ECONNREFUSED: return "Connection refused"; case ELOOP: return "Too many levels of symbolic links"; case EHOSTUNREACH: return "No route to host"; case EWOULDBLOCK: return "Operation would block"; case ETXTBSY: return "Text file busy"; case ENODATA: return "No data available"; case ENOSR: return "Out of streams resources"; case ENOSTR: return "Device not a stream"; case ENOTRECOVERABLE: return "State not recoverable"; case EOWNERDEAD: return "Owner died"; case ETIME: return "Timer expired"; case EOTHER: return "Other error"; #endif #if GNULIB_defined_EWINSOCK /* native Windows platforms */ case ESOCKTNOSUPPORT: return "Socket type not supported"; case EPFNOSUPPORT: return "Protocol family not supported"; case ESHUTDOWN: return "Cannot send after transport endpoint shutdown"; case ETOOMANYREFS: return "Too many references: cannot splice"; case EHOSTDOWN: return "Host is down"; case EPROCLIM: return "Too many processes"; case EUSERS: return "Too many users"; case EDQUOT: return "Disk quota exceeded"; case ESTALE: return "Stale NFS file handle"; case EREMOTE: return "Object is remote"; # if HAVE_WINSOCK2_H /* WSA_INVALID_HANDLE maps to EBADF */ /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ /* WSA_INVALID_PARAMETER maps to EINVAL */ case WSA_OPERATION_ABORTED: return "Overlapped operation aborted"; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state"; case WSA_IO_PENDING: return "Overlapped operations will complete later"; /* WSAEINTR maps to EINTR */ /* WSAEBADF maps to EBADF */ /* WSAEACCES maps to EACCES */ /* WSAEFAULT maps to EFAULT */ /* WSAEINVAL maps to EINVAL */ /* WSAEMFILE maps to EMFILE */ /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ /* WSAEINPROGRESS maps to EINPROGRESS */ /* WSAEALREADY maps to EALREADY */ /* WSAENOTSOCK maps to ENOTSOCK */ /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ /* WSAEMSGSIZE maps to EMSGSIZE */ /* WSAEPROTOTYPE maps to EPROTOTYPE */ /* WSAENOPROTOOPT maps to ENOPROTOOPT */ /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ /* WSAEADDRINUSE maps to EADDRINUSE */ /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ /* WSAENETDOWN maps to ENETDOWN */ /* WSAENETUNREACH maps to ENETUNREACH */ /* WSAENETRESET maps to ENETRESET */ /* WSAECONNABORTED maps to ECONNABORTED */ /* WSAECONNRESET maps to ECONNRESET */ /* WSAENOBUFS maps to ENOBUFS */ /* WSAEISCONN maps to EISCONN */ /* WSAENOTCONN maps to ENOTCONN */ /* WSAESHUTDOWN is ESHUTDOWN */ /* WSAETOOMANYREFS is ETOOMANYREFS */ /* WSAETIMEDOUT maps to ETIMEDOUT */ /* WSAECONNREFUSED maps to ECONNREFUSED */ /* WSAELOOP maps to ELOOP */ /* WSAENAMETOOLONG maps to ENAMETOOLONG */ /* WSAEHOSTDOWN is EHOSTDOWN */ /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ /* WSAENOTEMPTY maps to ENOTEMPTY */ /* WSAEPROCLIM is EPROCLIM */ /* WSAEUSERS is EUSERS */ /* WSAEDQUOT is EDQUOT */ /* WSAESTALE is ESTALE */ /* WSAEREMOTE is EREMOTE */ case WSASYSNOTREADY: return "Network subsystem is unavailable"; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range"; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed"; case WSAEDISCON: return "Graceful shutdown in progress"; case WSAENOMORE: case WSA_E_NO_MORE: return "No more results"; case WSAECANCELLED: case WSA_E_CANCELLED: return "Call was canceled"; case WSAEINVALIDPROCTABLE: return "Procedure call table is invalid"; case WSAEINVALIDPROVIDER: return "Service provider is invalid"; case WSAEPROVIDERFAILEDINIT: return "Service provider failed to initialize"; case WSASYSCALLFAILURE: return "System call failure"; case WSASERVICE_NOT_FOUND: return "Service not found"; case WSATYPE_NOT_FOUND: return "Class type not found"; case WSAEREFUSED: return "Database query was refused"; case WSAHOST_NOT_FOUND: return "Host not found"; case WSATRY_AGAIN: return "Nonauthoritative host not found"; case WSANO_RECOVERY: return "Nonrecoverable error"; case WSANO_DATA: return "Valid name, no data record of requested type"; /* WSA_QOS_* omitted */ # endif #endif #if GNULIB_defined_ENOMSG case ENOMSG: return "No message of desired type"; #endif #if GNULIB_defined_EIDRM case EIDRM: return "Identifier removed"; #endif #if GNULIB_defined_ENOLINK case ENOLINK: return "Link has been severed"; #endif #if GNULIB_defined_EPROTO case EPROTO: return "Protocol error"; #endif #if GNULIB_defined_EMULTIHOP case EMULTIHOP: return "Multihop attempted"; #endif #if GNULIB_defined_EBADMSG case EBADMSG: return "Bad message"; #endif #if GNULIB_defined_EOVERFLOW case EOVERFLOW: return "Value too large for defined data type"; #endif #if GNULIB_defined_ENOTSUP case ENOTSUP: return "Not supported"; #endif #if GNULIB_defined_ENETRESET case ENETRESET: return "Network dropped connection on reset"; #endif #if GNULIB_defined_ECONNABORTED case ECONNABORTED: return "Software caused connection abort"; #endif #if GNULIB_defined_ESTALE case ESTALE: return "Stale NFS file handle"; #endif #if GNULIB_defined_EDQUOT case EDQUOT: return "Disk quota exceeded"; #endif #if GNULIB_defined_ECANCELED case ECANCELED: return "Operation canceled"; #endif default: return NULL; } } gss-1.0.2/src/gl/msvc-nothrow.c0000644000000000000000000000252711662447025013215 00000000000000/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include /* Specification. */ #include "msvc-nothrow.h" /* Get declarations of the Win32 API functions. */ #define WIN32_LEAN_AND_MEAN #include #include "msvc-inval.h" #undef _get_osfhandle #if HAVE_MSVC_INVALID_PARAMETER_HANDLER intptr_t _gl_nothrow_get_osfhandle (int fd) { intptr_t result; TRY_MSVC_INVAL { result = _get_osfhandle (fd); } CATCH_MSVC_INVAL { result = (intptr_t) INVALID_HANDLE_VALUE; } DONE_MSVC_INVAL; return result; } #endif gss-1.0.2/src/gl/intprops.h0000644000000000000000000003500611662447025012430 00000000000000/* intprops.h -- properties of integer types Copyright (C) 2001-2005, 2009-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paul Eggert. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include /* Return an integer value, converted to the same type as the integer expression E after integer type promotion. V is the unconverted value. */ #define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see . */ #define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is an integer type. bool counts as an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) /* True if negative values of the signed integer type T use two's complement, ones' complement, or signed magnitude representation, respectively. Much GNU code assumes two's complement, but some people like to be portable to all possible C hosts. */ #define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) #define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) #define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) /* True if the signed integer expression E uses two's complement. */ #define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1) /* True if the arithmetic type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the integer expression E, after integer promotion, has a signed type. */ #define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. These macros have undefined behavior if T is signed and has padding bits. If this is a problem for you, please let us know how to fix it for your host. */ /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) 0 \ : TYPE_SIGNED_MAGNITUDE (t) \ ? ~ (t) 0 \ : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, after integer promotion. E should not have side effects. */ #define _GL_INT_MINIMUM(e) \ (_GL_INT_SIGNED (e) \ ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (_GL_INT_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1) /* Return 1 if the __typeof__ keyword works. This could be done by 'configure', but for now it's easier to do it by hand. */ #if 2 <= __GNUC__ || 0x5110 <= __SUNPRO_C # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 #endif /* Return 1 if the integer type or expression T might be signed. Return 0 if it is definitely unsigned. This macro does not evaluate its argument, and expands to an integer constant expression. */ #if _GL_HAVE___TYPEOF__ # define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) #else # define _GL_SIGNED_TYPE_OR_EXPR(t) 1 #endif /* Bound on length of the string representing an unsigned integer value representable in B bits. log10 (2.0) < 146/485. The smallest value of B where this bound is not tight is 2621. */ #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) /* Bound on length of the string representing an integer type or expression T. Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is signed, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT \ - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, including the terminating null. */ #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) /* Range overflow checks. The INT__RANGE_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They do not rely on undefined or implementation-defined behavior. Their implementations are simple and straightforward, but they are a bit harder to use than the INT__OVERFLOW macros described below. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); Restrictions on *_RANGE_OVERFLOW macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned types should use a zero MIN of the proper type. These macros are tuned for constant MIN and MAX. For commutative operations such as A + B, they are also tuned for constant B. */ /* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (a) < (min) - (b) \ : (max) - (b) < (a)) /* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (max) + (b) < (a) \ : (a) < (min) + (b)) /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ ((min) < 0 \ ? (a) < - (max) \ : 0 < (a)) /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see . */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ ? (a) < (max) / (b) \ : (b) == -1 \ ? 0 \ : (min) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (a) < (min) / (b) \ : (max) / (b) < (a))) /* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. */ #define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ ((min) < 0 && (b) == -1 && (a) < - (max)) /* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. Mathematically, % should never overflow, but on x86-like hosts INT_MIN % -1 traps, and the C standard permits this, so treat this as an overflow too. */ #define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) /* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0 <= B < wordwidth, and that when A is negative then A << B has undefined behavior and A >> B has implementation-defined behavior, but do not check these other restrictions. */ #define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ ((a) < 0 \ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ #define _GL_ADD_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? (b) <= (a) + (b) \ : (b) < 0 ? (a) <= (a) + (b) \ : (a) + (b) < (b)) #define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? 1 \ : (b) < 0 ? (a) - (b) <= (a) \ : (a) < (b)) #define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ : (b) < 0 && (a) + (b) <= (a)) #define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) /* Return a nonzero value if A is a mathematical multiple of B, where A is unsigned, B is negative, and MAX is the maximum value of A's type. A's type must be the same as (A % B)'s type. Normally (A % -B == 0) suffices, but things get tricky if -B would overflow. */ #define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ ? (a) \ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ : (a) % - (b)) \ == 0) /* Integer overflow checks. The INT__OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_OVERFLOW (i, j)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. These macros are tuned for their last argument being a constant. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ #define INT_ADD_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) #define INT_NEGATE_OVERFLOW(a) \ INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) #define INT_REMAINDER_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) #define INT_LEFT_SHIFT_OVERFLOW(a, b) \ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) /* Return 1 if the expression A B would overflow, where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, assuming MIN and MAX are the minimum and maximum for the result type. Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ _GL_INT_MINIMUM (0 * (b) + (a)), \ _GL_INT_MAXIMUM (0 * (b) + (a))) #endif /* _GL_INTPROPS_H */ gss-1.0.2/src/gl/Makefile.am0000644000000000000000000005440111662447025012435 00000000000000## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: gnulib-tool --import --dir=. --local-dir=src/gl/override --lib=libgnu --source-base=src/gl --m4-base=src/gl/m4 --doc-base=doc --tests-base=src/gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=srcgl --no-vc-files error getopt-gnu progname version-etc AUTOMAKE_OPTIONS = 1.5 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = EXTRA_DIST += m4/gnulib-cache.m4 AM_CPPFLAGS = AM_CFLAGS = noinst_LTLIBRARIES += libgnu.la libgnu_la_SOURCES = libgnu_la_LIBADD = $(srcgl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(srcgl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) libgnu_la_LDFLAGS += -no-undefined libgnu_la_LDFLAGS += $(LTLIBINTL) ## begin gnulib module errno BUILT_SOURCES += $(ERRNO_H) # We need the following in order to create when the system # doesn't have one that is POSIX compliant. if GL_GENERATE_ERRNO_H errno.h: errno.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ < $(srcdir)/errno.in.h; \ } > $@-t && \ mv $@-t $@ else errno.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += errno.h errno.h-t EXTRA_DIST += errno.in.h ## end gnulib module errno ## begin gnulib module error EXTRA_DIST += error.c error.h EXTRA_libgnu_la_SOURCES += error.c ## end gnulib module error ## begin gnulib module getopt-posix BUILT_SOURCES += $(GETOPT_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ < $(srcdir)/getopt.in.h; \ } > $@-t && \ mv -f $@-t $@ MOSTLYCLEANFILES += getopt.h getopt.h-t EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h EXTRA_libgnu_la_SOURCES += getopt.c getopt1.c ## end gnulib module getopt-posix ## begin gnulib module gettext-h libgnu_la_SOURCES += gettext.h ## end gnulib module gettext-h ## begin gnulib module intprops EXTRA_DIST += intprops.h ## end gnulib module intprops ## begin gnulib module msvc-inval EXTRA_DIST += msvc-inval.c msvc-inval.h EXTRA_libgnu_la_SOURCES += msvc-inval.c ## end gnulib module msvc-inval ## begin gnulib module msvc-nothrow EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h EXTRA_libgnu_la_SOURCES += msvc-nothrow.c ## end gnulib module msvc-nothrow ## begin gnulib module progname libgnu_la_SOURCES += progname.h progname.c ## end gnulib module progname ## begin gnulib module snippet/arg-nonnull # The BUILT_SOURCES created by this Makefile snippet are not used via #include # statements but through direct file reference. Therefore this snippet must be # present in all Makefile.am that need it. This is ensured by the applicability # 'all' defined above. BUILT_SOURCES += arg-nonnull.h # The arg-nonnull.h that gets inserted into generated .h files is the same as # build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut # off. arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/GL_ARG_NONNULL/,$$p' \ < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t ARG_NONNULL_H=arg-nonnull.h EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # The BUILT_SOURCES created by this Makefile snippet are not used via #include # statements but through direct file reference. Therefore this snippet must be # present in all Makefile.am that need it. This is ensured by the applicability # 'all' defined above. BUILT_SOURCES += c++defs.h # The c++defs.h that gets inserted into generated .h files is the same as # build-aux/snippet/c++defs.h, except that it has the copyright header cut off. c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/_GL_CXXDEFS/,$$p' \ < $(top_srcdir)/build-aux/snippet/c++defs.h \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += c++defs.h c++defs.h-t CXXDEFS_H=c++defs.h EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use BUILT_SOURCES += warn-on-use.h # The warn-on-use.h that gets inserted into generated .h files is the same as # build-aux/snippet/warn-on-use.h, except that it has the copyright header cut # off. warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/^.ifndef/,$$p' \ < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t WARN_ON_USE_H=warn-on-use.h EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module stdarg BUILT_SOURCES += $(STDARG_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDARG_H stdarg.h: stdarg.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ < $(srcdir)/stdarg.in.h; \ } > $@-t && \ mv $@-t $@ else stdarg.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdarg.h stdarg.h-t EXTRA_DIST += stdarg.in.h ## end gnulib module stdarg ## begin gnulib module stddef BUILT_SOURCES += $(STDDEF_H) # We need the following in order to create when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ < $(srcdir)/stddef.in.h; \ } > $@-t && \ mv $@-t $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## begin gnulib module strerror EXTRA_DIST += strerror.c EXTRA_libgnu_la_SOURCES += strerror.c ## end gnulib module strerror ## begin gnulib module strerror-override EXTRA_DIST += strerror-override.c strerror-override.h EXTRA_libgnu_la_SOURCES += strerror-override.c ## end gnulib module strerror-override ## begin gnulib module string BUILT_SOURCES += string.h # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += string.h string.h-t EXTRA_DIST += string.in.h ## end gnulib module string ## begin gnulib module unistd BUILT_SOURCES += unistd.h # We need the following in order to create an empty placeholder for # when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/$(GNULIB_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += unistd.h unistd.h-t EXTRA_DIST += unistd.in.h ## end gnulib module unistd ## begin gnulib module verify EXTRA_DIST += verify.h ## end gnulib module verify ## begin gnulib module version-etc libgnu_la_SOURCES += version-etc.h version-etc.c ## end gnulib module version-etc mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : gss-1.0.2/src/gl/unistd.in.h0000644000000000000000000014153211662447025012467 00000000000000/* Substitute for and wrapper around . Copyright (C) 2003-2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Special invocation convention: - On mingw, several headers, including , include , but we need to ensure that both the system and are completely included before we replace gethostname. */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ && !defined _GL_WINSOCK2_H_WITNESS && defined _WINSOCK2_H /* is being indirectly included for the first time from ; avoid declaring any overrides. */ # if @HAVE_UNISTD_H@ # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ # else # error unexpected; report this to bug-gnulib@gnu.org # endif # define _GL_WINSOCK2_H_WITNESS /* Normal invocation. */ #elif !defined _@GUARD_PREFIX@_UNISTD_H /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UNISTD_H@ # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ #endif /* Get all possible declarations of gethostname(). */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include # undef _GL_INCLUDING_WINSOCK2_H #endif #if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H #define _@GUARD_PREFIX@_UNISTD_H /* NetBSD 5.0 mis-defines NULL. Also get size_t. */ #include /* mingw doesn't define the SEEK_* or *_FILENO macros in . */ /* Cygwin 1.7.1 declares symlinkat in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ && defined __CYGWIN__)) \ && ! defined __GLIBC__ # include #endif /* Cygwin 1.7.1 declares unlinkat in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ && ! defined __GLIBC__ # include #endif /* mingw fails to declare _exit in . */ /* mingw, MSVC, BeOS, Haiku declare environ in , not in . */ /* Solaris declares getcwd not only in but also in . */ /* But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include #endif /* Native Windows platforms declare chdir, getcwd, rmdir in and/or , not in . */ #if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) # include /* mingw32, mingw64 */ # include /* mingw64, MSVC 9 */ #endif /* AIX and OSF/1 5.1 declare getdomainname in , not in . NonStop Kernel declares gethostname in , not in . */ /* But avoid namespace pollution on glibc systems. */ #if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ && !defined __GLIBC__ # include #endif /* MSVC defines off_t in . */ #if !@HAVE_UNISTD_H@ /* Get off_t. */ # include #endif #if (@GNULIB_READ@ || @GNULIB_WRITE@ \ || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK) /* Get ssize_t. */ # include #endif /* Get getopt(), optarg, optind, opterr, optopt. But avoid namespace pollution on glibc systems. */ #if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Hide some function declarations from . */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including "); _GL_WARN_ON_USE (connect, "connect() used without including "); _GL_WARN_ON_USE (accept, "accept() used without including "); _GL_WARN_ON_USE (bind, "bind() used without including "); _GL_WARN_ON_USE (getpeername, "getpeername() used without including "); _GL_WARN_ON_USE (getsockname, "getsockname() used without including "); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including "); _GL_WARN_ON_USE (listen, "listen() used without including "); _GL_WARN_ON_USE (recv, "recv() used without including "); _GL_WARN_ON_USE (send, "send() used without including "); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including "); _GL_WARN_ON_USE (sendto, "sendto() used without including "); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including "); _GL_WARN_ON_USE (shutdown, "shutdown() used without including "); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including "); # endif # endif #endif /* OS/2 EMX lacks these macros. */ #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif /* Ensure *_OK macros exist. */ #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif /* Declare overridden functions. */ #if defined GNULIB_POSIXCHECK /* The access() function is a security risk. */ _GL_WARN_ON_USE (access, "the access function is a security risk - " "use the gnulib module faccessat instead"); #endif #if @GNULIB_CHDIR@ _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIASWARN (chdir); #elif defined GNULIB_POSIXCHECK # undef chdir # if HAVE_RAW_DECL_CHDIR _GL_WARN_ON_USE (chown, "chdir is not always in - " "use gnulib module chdir for portability"); # endif #endif #if @GNULIB_CHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_DUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup2 rpl_dup2 # endif _GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); _GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); # else # if !@HAVE_DUP2@ _GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #elif defined GNULIB_POSIXCHECK # undef dup2 # if HAVE_RAW_DECL_DUP2 _GL_WARN_ON_USE (dup2, "dup2 is unportable - " "use gnulib module dup2 for portability"); # endif #endif #if @GNULIB_DUP3@ /* Copy the file descriptor OLDFD into file descriptor NEWFD, with the specified flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). Close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the Linux man page at . */ # if @HAVE_DUP3@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup3 rpl_dup3 # endif _GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); # else _GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); # endif _GL_CXXALIASWARN (dup3); #elif defined GNULIB_POSIXCHECK # undef dup3 # if HAVE_RAW_DECL_DUP3 _GL_WARN_ON_USE (dup3, "dup3 is unportable - " "use gnulib module dup3 for portability"); # endif #endif #if @GNULIB_ENVIRON@ # if !@HAVE_DECL_ENVIRON@ /* Set of environment variables and values. An array of strings of the form "VARIABLE=VALUE", terminated with a NULL. */ # if defined __APPLE__ && defined __MACH__ # include # define environ (*_NSGetEnviron ()) # else # ifdef __cplusplus extern "C" { # endif extern char **environ; # ifdef __cplusplus } # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if HAVE_RAW_DECL_ENVIRON static inline char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is unportable - " "use gnulib module environ for portability"); # undef environ # define environ (*rpl_environ ()) # endif #endif #if @GNULIB_EUIDACCESS@ /* Like access(), except that it uses the effective user id and group id of the current process. */ # if !@HAVE_EUIDACCESS@ _GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); _GL_CXXALIASWARN (euidaccess); # if defined GNULIB_POSIXCHECK /* Like access(), this function is a security risk. */ _GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif defined GNULIB_POSIXCHECK # undef euidaccess # if HAVE_RAW_DECL_EUIDACCESS _GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " "use gnulib module euidaccess for portability"); # endif #endif #if @GNULIB_FACCESSAT@ # if !@HAVE_FACCESSAT@ _GL_FUNCDECL_SYS (faccessat, int, (int fd, char const *file, int mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (faccessat, int, (int fd, char const *file, int mode, int flag)); _GL_CXXALIASWARN (faccessat); #elif defined GNULIB_POSIXCHECK # undef faccessat # if HAVE_RAW_DECL_FACCESSAT _GL_WARN_ON_USE (faccessat, "faccessat is not portable - " "use gnulib module faccessat for portability"); # endif #endif #if @GNULIB_FCHDIR@ /* Change the process' current working directory to the directory on which the given file descriptor is open. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if ! @HAVE_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); /* Gnulib internal hooks needed to maintain the fchdir metadata. */ _GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) _GL_ARG_NONNULL ((2)); _GL_EXTERN_C void _gl_unregister_fd (int fd); _GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); _GL_EXTERN_C const char *_gl_directory_name (int fd); # else # if !@HAVE_DECL_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); # endif # endif _GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); _GL_CXXALIASWARN (fchdir); #elif defined GNULIB_POSIXCHECK # undef fchdir # if HAVE_RAW_DECL_FCHDIR _GL_WARN_ON_USE (fchdir, "fchdir is unportable - " "use gnulib module fchdir for portability"); # endif #endif #if @GNULIB_FCHOWNAT@ # if @REPLACE_FCHOWNAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchownat # define fchownat rpl_fchownat # endif _GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # else # if !@HAVE_FCHOWNAT@ _GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # endif _GL_CXXALIASWARN (fchownat); #elif defined GNULIB_POSIXCHECK # undef fchownat # if HAVE_RAW_DECL_FCHOWNAT _GL_WARN_ON_USE (fchownat, "fchownat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FDATASYNC@ /* Synchronize changes to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ _GL_FUNCDECL_SYS (fdatasync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fdatasync, int, (int fd)); _GL_CXXALIASWARN (fdatasync); #elif defined GNULIB_POSIXCHECK # undef fdatasync # if HAVE_RAW_DECL_FDATASYNC _GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " "use gnulib module fdatasync for portability"); # endif #endif #if @GNULIB_FSYNC@ /* Synchronize changes, including metadata, to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if !@HAVE_FSYNC@ _GL_FUNCDECL_SYS (fsync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fsync, int, (int fd)); _GL_CXXALIASWARN (fsync); #elif defined GNULIB_POSIXCHECK # undef fsync # if HAVE_RAW_DECL_FSYNC _GL_WARN_ON_USE (fsync, "fsync is unportable - " "use gnulib module fsync for portability"); # endif #endif #if @GNULIB_FTRUNCATE@ /* Change the size of the file to which FD is opened to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if !@HAVE_FTRUNCATE@ _GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); _GL_CXXALIASWARN (ftruncate); #elif defined GNULIB_POSIXCHECK # undef ftruncate # if HAVE_RAW_DECL_FTRUNCATE _GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " "use gnulib module ftruncate for portability"); # endif #endif #if @GNULIB_GETCWD@ /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Return BUF if successful, or NULL if the directory couldn't be determined or SIZE was too small. See the POSIX:2008 specification . Additionally, the gnulib module 'getcwd' guarantees the following GNU extension: If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # if @REPLACE_GETCWD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getcwd rpl_getcwd # endif _GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); _GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); # else /* Need to cast, because on mingw, the second parameter is int size. */ _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #elif defined GNULIB_POSIXCHECK # undef getcwd # if HAVE_RAW_DECL_GETCWD _GL_WARN_ON_USE (getcwd, "getcwd is unportable - " "use gnulib module getcwd for portability"); # endif #endif #if @GNULIB_GETDOMAINNAME@ /* Return the NIS domain name of the machine. WARNING! The NIS domain name is unrelated to the fully qualified host name of the machine. It is also unrelated to email addresses. WARNING! The NIS domain name is usually the empty string or "(none)" when not using NIS. Put up to LEN bytes of the NIS domain name into NAME. Null terminate it if the name is shorter than LEN. If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @REPLACE_GETDOMAINNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdomainname # define getdomainname rpl_getdomainname # endif _GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); # else # if !@HAVE_DECL_GETDOMAINNAME@ _GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (getdomainname); #elif defined GNULIB_POSIXCHECK # undef getdomainname # if HAVE_RAW_DECL_GETDOMAINNAME _GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " "use gnulib module getdomainname for portability"); # endif #endif #if @GNULIB_GETDTABLESIZE@ /* Return the maximum number of file descriptors in the current process. In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ # if !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif _GL_CXXALIAS_SYS (getdtablesize, int, (void)); _GL_CXXALIASWARN (getdtablesize); #elif defined GNULIB_POSIXCHECK # undef getdtablesize # if HAVE_RAW_DECL_GETDTABLESIZE _GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " "use gnulib module getdtablesize for portability"); # endif #endif #if @GNULIB_GETGROUPS@ /* Return the supplemental groups that the current process belongs to. It is unspecified whether the effective group id is in the list. If N is 0, return the group count; otherwise, N describes how many entries are available in GROUPS. Return -1 and set errno if N is not 0 and not large enough. Fails with ENOSYS on some systems. */ # if @REPLACE_GETGROUPS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getgroups # define getgroups rpl_getgroups # endif _GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); _GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); # else # if !@HAVE_GETGROUPS@ _GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIASWARN (getgroups); #elif defined GNULIB_POSIXCHECK # undef getgroups # if HAVE_RAW_DECL_GETGROUPS _GL_WARN_ON_USE (getgroups, "getgroups is unportable - " "use gnulib module getgroups for portability"); # endif #endif #if @GNULIB_GETHOSTNAME@ /* Return the standard host name of the machine. WARNING! The host name may or may not be fully qualified. Put up to LEN bytes of the host name into NAME. Null terminate it if the name is shorter than LEN. If the host name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @UNISTD_H_HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname rpl_gethostname # endif _GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); # else # if !@HAVE_GETHOSTNAME@ _GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second parameter is int len. */ _GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (gethostname); #elif @UNISTD_H_HAVE_WINSOCK2_H@ # undef gethostname # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname #elif defined GNULIB_POSIXCHECK # undef gethostname # if HAVE_RAW_DECL_GETHOSTNAME _GL_WARN_ON_USE (gethostname, "gethostname is unportable - " "use gnulib module gethostname for portability"); # endif #endif #if @GNULIB_GETLOGIN@ /* Returns the user's login name, or NULL if it cannot be found. Upon error, returns NULL with errno set. See . Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if !@HAVE_GETLOGIN@ _GL_FUNCDECL_SYS (getlogin, char *, (void)); # endif _GL_CXXALIAS_SYS (getlogin, char *, (void)); _GL_CXXALIASWARN (getlogin); #elif defined GNULIB_POSIXCHECK # undef getlogin # if HAVE_RAW_DECL_GETLOGIN _GL_WARN_ON_USE (getlogin, "getlogin is unportable - " "use gnulib module getlogin for portability"); # endif #endif #if @GNULIB_GETLOGIN_R@ /* Copies the user's login name to NAME. The array pointed to by NAME has room for SIZE bytes. Returns 0 if successful. Upon error, an error number is returned, or -1 in the case that the login name cannot be found but no specific error is provided (this case is hopefully rare but is left open by the POSIX spec). See . Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if @REPLACE_GETLOGIN_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getlogin_r rpl_getlogin_r # endif _GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); # else # if !@HAVE_DECL_GETLOGIN_R@ _GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 systems, the second argument is int size. */ _GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); # endif _GL_CXXALIASWARN (getlogin_r); #elif defined GNULIB_POSIXCHECK # undef getlogin_r # if HAVE_RAW_DECL_GETLOGIN_R _GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " "use gnulib module getlogin_r for portability"); # endif #endif #if @GNULIB_GETPAGESIZE@ # if @REPLACE_GETPAGESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize rpl_getpagesize # endif _GL_FUNCDECL_RPL (getpagesize, int, (void)); _GL_CXXALIAS_RPL (getpagesize, int, (void)); # else # if !@HAVE_GETPAGESIZE@ # if !defined getpagesize /* This is for POSIX systems. */ # if !defined _gl_getpagesize && defined _SC_PAGESIZE # if ! (defined __VMS && __VMS_VER < 70000000) # define _gl_getpagesize() sysconf (_SC_PAGESIZE) # endif # endif /* This is for older VMS. */ # if !defined _gl_getpagesize && defined __VMS # ifdef __ALPHA # define _gl_getpagesize() 8192 # else # define _gl_getpagesize() 512 # endif # endif /* This is for BeOS. */ # if !defined _gl_getpagesize && @HAVE_OS_H@ # include # if defined B_PAGE_SIZE # define _gl_getpagesize() B_PAGE_SIZE # endif # endif /* This is for AmigaOS4.0. */ # if !defined _gl_getpagesize && defined __amigaos4__ # define _gl_getpagesize() 2048 # endif /* This is for older Unix systems. */ # if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ # include # ifdef EXEC_PAGESIZE # define _gl_getpagesize() EXEC_PAGESIZE # else # ifdef NBPG # ifndef CLSIZE # define CLSIZE 1 # endif # define _gl_getpagesize() (NBPG * CLSIZE) # else # ifdef NBPC # define _gl_getpagesize() NBPC # endif # endif # endif # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize() _gl_getpagesize () # else # if !GNULIB_defined_getpagesize_function static inline int getpagesize () { return _gl_getpagesize (); } # define GNULIB_defined_getpagesize_function 1 # endif # endif # endif # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ _GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); # endif # if @HAVE_DECL_GETPAGESIZE@ _GL_CXXALIASWARN (getpagesize); # endif #elif defined GNULIB_POSIXCHECK # undef getpagesize # if HAVE_RAW_DECL_GETPAGESIZE _GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " "use gnulib module getpagesize for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Return the next valid login shell on the system, or NULL when the end of the list has been reached. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (getusershell, char *, (void)); # endif _GL_CXXALIAS_SYS (getusershell, char *, (void)); _GL_CXXALIASWARN (getusershell); #elif defined GNULIB_POSIXCHECK # undef getusershell # if HAVE_RAW_DECL_GETUSERSHELL _GL_WARN_ON_USE (getusershell, "getusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Rewind to pointer that is advanced at each getusershell() call. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (setusershell, void, (void)); # endif _GL_CXXALIAS_SYS (setusershell, void, (void)); _GL_CXXALIASWARN (setusershell); #elif defined GNULIB_POSIXCHECK # undef setusershell # if HAVE_RAW_DECL_SETUSERSHELL _GL_WARN_ON_USE (setusershell, "setusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Free the pointer that is advanced at each getusershell() call and associated resources. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (endusershell, void, (void)); # endif _GL_CXXALIAS_SYS (endusershell, void, (void)); _GL_CXXALIASWARN (endusershell); #elif defined GNULIB_POSIXCHECK # undef endusershell # if HAVE_RAW_DECL_ENDUSERSHELL _GL_WARN_ON_USE (endusershell, "endusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GROUP_MEMBER@ /* Determine whether group id is in calling user's group list. */ # if !@HAVE_GROUP_MEMBER@ _GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); # endif _GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); _GL_CXXALIASWARN (group_member); #elif defined GNULIB_POSIXCHECK # undef group_member # if HAVE_RAW_DECL_GROUP_MEMBER _GL_WARN_ON_USE (group_member, "group_member is unportable - " "use gnulib module group-member for portability"); # endif #endif #if @GNULIB_LCHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Do not follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_LCHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lchown # define lchown rpl_lchown # endif _GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); # else # if !@HAVE_LCHOWN@ _GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); # endif _GL_CXXALIASWARN (lchown); #elif defined GNULIB_POSIXCHECK # undef lchown # if HAVE_RAW_DECL_LCHOWN _GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " "use gnulib module lchown for portability"); # endif #endif #if @GNULIB_LINK@ /* Create a new hard link for an existing file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification . */ # if @REPLACE_LINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define link rpl_link # endif _GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); # else # if !@HAVE_LINK@ _GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); # endif _GL_CXXALIASWARN (link); #elif defined GNULIB_POSIXCHECK # undef link # if HAVE_RAW_DECL_LINK _GL_WARN_ON_USE (link, "link is unportable - " "use gnulib module link for portability"); # endif #endif #if @GNULIB_LINKAT@ /* Create a new hard link for an existing file, relative to two directories. FLAG controls whether symlinks are followed. Return 0 if successful, otherwise -1 and errno set. */ # if @REPLACE_LINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef linkat # define linkat rpl_linkat # endif _GL_FUNCDECL_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # else # if !@HAVE_LINKAT@ _GL_FUNCDECL_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # endif _GL_CXXALIASWARN (linkat); #elif defined GNULIB_POSIXCHECK # undef linkat # if HAVE_RAW_DECL_LINKAT _GL_WARN_ON_USE (linkat, "linkat is unportable - " "use gnulib module linkat for portability"); # endif #endif #if @GNULIB_LSEEK@ /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. Return the new offset if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_LSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lseek rpl_lseek # endif _GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); _GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #elif defined GNULIB_POSIXCHECK # undef lseek # if HAVE_RAW_DECL_LSEEK _GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " "systems - use gnulib module lseek for portability"); # endif #endif #if @GNULIB_PIPE@ /* Create a pipe, defaulting to O_BINARY mode. Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. */ # if !@HAVE_PIPE@ _GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pipe, int, (int fd[2])); _GL_CXXALIASWARN (pipe); #elif defined GNULIB_POSIXCHECK # undef pipe # if HAVE_RAW_DECL_PIPE _GL_WARN_ON_USE (pipe, "pipe is unportable - " "use gnulib module pipe-posix for portability"); # endif #endif #if @GNULIB_PIPE2@ /* Create a pipe, applying the given flags when opening the read-end of the pipe and the write-end of the pipe. The flags are a bitmask, possibly including O_CLOEXEC (defined in ) and O_TEXT, O_BINARY (defined in "binary-io.h"). Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. See also the Linux man page at . */ # if @HAVE_PIPE2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define pipe2 rpl_pipe2 # endif _GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); # else _GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); # endif _GL_CXXALIASWARN (pipe2); #elif defined GNULIB_POSIXCHECK # undef pipe2 # if HAVE_RAW_DECL_PIPE2 _GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " "use gnulib module pipe2 for portability"); # endif #endif #if @GNULIB_PREAD@ /* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. Return the number of bytes placed into BUF if successful, otherwise set errno and return -1. 0 indicates EOF. See the POSIX:2008 specification . */ # if @REPLACE_PREAD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pread # define pread rpl_pread # endif _GL_FUNCDECL_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PREAD@ _GL_FUNCDECL_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pread); #elif defined GNULIB_POSIXCHECK # undef pread # if HAVE_RAW_DECL_PREAD _GL_WARN_ON_USE (pread, "pread is unportable - " "use gnulib module pread for portability"); # endif #endif #if @GNULIB_PWRITE@ /* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. Return the number of bytes written if successful, otherwise set errno and return -1. 0 indicates nothing written. See the POSIX:2008 specification . */ # if @REPLACE_PWRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pwrite # define pwrite rpl_pwrite # endif _GL_FUNCDECL_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PWRITE@ _GL_FUNCDECL_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pwrite); #elif defined GNULIB_POSIXCHECK # undef pwrite # if HAVE_RAW_DECL_PWRITE _GL_WARN_ON_USE (pwrite, "pwrite is unportable - " "use gnulib module pwrite for portability"); # endif #endif #if @GNULIB_READ@ /* Read up to COUNT bytes from file descriptor FD into the buffer starting at BUF. See the POSIX:2008 specification . */ # if @REPLACE_READ@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read rpl_read # endif _GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); # else /* Need to cast, because on mingw, the third parameter is unsigned int count and the return type is 'int'. */ _GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #endif #if @GNULIB_READLINK@ /* Read the contents of the symbolic link FILE and place the first BUFSIZE bytes of it into BUF. Return the number of bytes placed into BUF if successful, otherwise -1 and errno set. See the POSIX:2008 specification . */ # if @REPLACE_READLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlink rpl_readlink # endif _GL_FUNCDECL_RPL (readlink, ssize_t, (const char *file, char *buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (readlink, ssize_t, (const char *file, char *buf, size_t bufsize)); # else # if !@HAVE_READLINK@ _GL_FUNCDECL_SYS (readlink, ssize_t, (const char *file, char *buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (readlink, ssize_t, (const char *file, char *buf, size_t bufsize)); # endif _GL_CXXALIASWARN (readlink); #elif defined GNULIB_POSIXCHECK # undef readlink # if HAVE_RAW_DECL_READLINK _GL_WARN_ON_USE (readlink, "readlink is unportable - " "use gnulib module readlink for portability"); # endif #endif #if @GNULIB_READLINKAT@ # if !@HAVE_READLINKAT@ _GL_FUNCDECL_SYS (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (readlinkat, ssize_t, (int fd, char const *file, char *buf, size_t len)); _GL_CXXALIASWARN (readlinkat); #elif defined GNULIB_POSIXCHECK # undef readlinkat # if HAVE_RAW_DECL_READLINKAT _GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " "use gnulib module readlinkat for portability"); # endif #endif #if @GNULIB_RMDIR@ /* Remove the directory DIR. */ # if @REPLACE_RMDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define rmdir rpl_rmdir # endif _GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #elif defined GNULIB_POSIXCHECK # undef rmdir # if HAVE_RAW_DECL_RMDIR _GL_WARN_ON_USE (rmdir, "rmdir is unportable - " "use gnulib module rmdir for portability"); # endif #endif #if @GNULIB_SLEEP@ /* Pause the execution of the current thread for N seconds. Returns the number of seconds left to sleep. See the POSIX:2008 specification . */ # if @REPLACE_SLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sleep # define sleep rpl_sleep # endif _GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); _GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); # else # if !@HAVE_SLEEP@ _GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIASWARN (sleep); #elif defined GNULIB_POSIXCHECK # undef sleep # if HAVE_RAW_DECL_SLEEP _GL_WARN_ON_USE (sleep, "sleep is unportable - " "use gnulib module sleep for portability"); # endif #endif #if @GNULIB_SYMLINK@ # if @REPLACE_SYMLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlink # define symlink rpl_symlink # endif _GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); # else # if !@HAVE_SYMLINK@ _GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); # endif _GL_CXXALIASWARN (symlink); #elif defined GNULIB_POSIXCHECK # undef symlink # if HAVE_RAW_DECL_SYMLINK _GL_WARN_ON_USE (symlink, "symlink is not portable - " "use gnulib module symlink for portability"); # endif #endif #if @GNULIB_SYMLINKAT@ # if !@HAVE_SYMLINKAT@ _GL_FUNCDECL_SYS (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (symlinkat, int, (char const *contents, int fd, char const *file)); _GL_CXXALIASWARN (symlinkat); #elif defined GNULIB_POSIXCHECK # undef symlinkat # if HAVE_RAW_DECL_SYMLINKAT _GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " "use gnulib module symlinkat for portability"); # endif #endif #if @GNULIB_TTYNAME_R@ /* Store at most BUFLEN characters of the pathname of the terminal FD is open on in BUF. Return 0 on success, otherwise an error number. */ # if @REPLACE_TTYNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ttyname_r # define ttyname_r rpl_ttyname_r # endif _GL_FUNCDECL_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen)); # else # if !@HAVE_DECL_TTYNAME_R@ _GL_FUNCDECL_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen)); # endif _GL_CXXALIASWARN (ttyname_r); #elif defined GNULIB_POSIXCHECK # undef ttyname_r # if HAVE_RAW_DECL_TTYNAME_R _GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " "use gnulib module ttyname_r for portability"); # endif #endif #if @GNULIB_UNLINK@ # if @REPLACE_UNLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink rpl_unlink # endif _GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #elif defined GNULIB_POSIXCHECK # undef unlink # if HAVE_RAW_DECL_UNLINK _GL_WARN_ON_USE (unlink, "unlink is not portable - " "use gnulib module unlink for portability"); # endif #endif #if @GNULIB_UNLINKAT@ # if @REPLACE_UNLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlinkat # define unlinkat rpl_unlinkat # endif _GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); # else # if !@HAVE_UNLINKAT@ _GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); # endif _GL_CXXALIASWARN (unlinkat); #elif defined GNULIB_POSIXCHECK # undef unlinkat # if HAVE_RAW_DECL_UNLINKAT _GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_USLEEP@ /* Pause the execution of the current thread for N microseconds. Returns 0 on completion, or -1 on range error. See the POSIX:2001 specification . */ # if @REPLACE_USLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef usleep # define usleep rpl_usleep # endif _GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); _GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); # else # if !@HAVE_USLEEP@ _GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); # endif _GL_CXXALIAS_SYS (usleep, int, (useconds_t n)); # endif _GL_CXXALIASWARN (usleep); #elif defined GNULIB_POSIXCHECK # undef usleep # if HAVE_RAW_DECL_USLEEP _GL_WARN_ON_USE (usleep, "usleep is unportable - " "use gnulib module usleep for portability"); # endif #endif #if @GNULIB_WRITE@ /* Write up to COUNT bytes starting at BUF to file descriptor FD. See the POSIX:2008 specification . */ # if @REPLACE_WRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write rpl_write # endif _GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); # else /* Need to cast, because on mingw, the third parameter is unsigned int count and the return type is 'int'. */ _GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #endif #endif /* _@GUARD_PREFIX@_UNISTD_H */ #endif /* _@GUARD_PREFIX@_UNISTD_H */ gss-1.0.2/src/gl/msvc-inval.h0000644000000000000000000002124111662447025012625 00000000000000/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _MSVC_INVAL_H #define _MSVC_INVAL_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines macros that turn such an invalid parameter notification into a non-local exit. An error code can then be produced at the target of this exit. You can thus write code like TRY_MSVC_INVAL { } CATCH_MSVC_INVAL { } DONE_MSVC_INVAL; This entire block expands to a single statement. The handling of invalid parameters can be done in three ways: * The default way, which is reasonable for programs (not libraries): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) * The way for libraries that make "hairy" calls (like close(-1), or fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) * The way for libraries that make no "hairy" calls: AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) */ #define DEFAULT_HANDLING 0 #define HAIRY_LIBRARY_HANDLING 1 #define SANE_LIBRARY_HANDLING 2 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* A native Windows platform with the "invalid parameter handler" concept, and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING /* Default handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that just returns. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) # else /* Handling for hairy libraries. */ # include /* Gnulib can define its own status codes, as described in the page "Raising Software Exceptions" on microsoft.com . Our status codes are composed of - 0xE0000000, mandatory for all user-defined status codes, - 0x474E550, a API identifier ("GNU"), - 0, 1, 2, ..., used to distinguish different status codes from the same API. */ # define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) # if defined _MSC_VER /* A compiler that supports __try/__except, as described in the page "try-except statement" on microsoft.com . With __try/__except, we can use the multithread-safe exception handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ __try # define CATCH_MSVC_INVAL \ __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ ? EXCEPTION_EXECUTE_HANDLER \ : EXCEPTION_CONTINUE_SEARCH) # define DONE_MSVC_INVAL \ } \ while (0) # else /* Any compiler. We can only use setjmp/longjmp. */ # include # ifdef __cplusplus extern "C" { # endif struct gl_msvc_inval_per_thread { /* The restart that will resume execution at the code between CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ jmp_buf restart; /* Tells whether the contents of restart is valid. */ int restart_valid; }; /* Ensure that the invalid parameter handler in installed that passes control to the gl_msvc_inval_restart if it is valid, or raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); /* Return a pointer to the per-thread data for the current thread. */ extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ struct gl_msvc_inval_per_thread *msvc_inval_current; \ gl_msvc_inval_ensure_handler (); \ msvc_inval_current = gl_msvc_inval_current (); \ /* First, initialize gl_msvc_inval_restart. */ \ if (setjmp (msvc_inval_current->restart) == 0) \ { \ /* Then, mark it as valid. */ \ msvc_inval_current->restart_valid = 1; # define CATCH_MSVC_INVAL \ /* Execution completed. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; \ } \ else \ { \ /* Execution triggered an invalid parameter notification. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; # define DONE_MSVC_INVAL \ } \ } \ while (0) # endif # endif #else /* A platform that does not need to the invalid parameter handler, or when SANE_LIBRARY_HANDLING is desired. */ /* The braces here avoid GCC warnings like "warning: suggest explicit braces to avoid ambiguous `else'". */ # define TRY_MSVC_INVAL \ do \ { \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) #endif #endif /* _MSVC_INVAL_H */ gss-1.0.2/src/gl/stdarg.in.h0000644000000000000000000000227311662447025012443 00000000000000/* Substitute for and wrapper around . Copyright (C) 2008-2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _@GUARD_PREFIX@_STDARG_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDARG_H@ #ifndef _@GUARD_PREFIX@_STDARG_H #define _@GUARD_PREFIX@_STDARG_H #ifndef va_copy # define va_copy(a,b) ((a) = (b)) #endif #endif /* _@GUARD_PREFIX@_STDARG_H */ #endif /* _@GUARD_PREFIX@_STDARG_H */ gss-1.0.2/src/gl/getopt.in.h0000644000000000000000000002152011662447025012455 00000000000000/* Declarations for getopt. Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _@GUARD_PREFIX@_GETOPT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. We must also inform the replacement unistd.h to not recursively use ; our definitions will be present soon enough. */ #if @HAVE_GETOPT_H@ # define _GL_SYSTEM_GETOPT # @INCLUDE_NEXT@ @NEXT_GETOPT_H@ # undef _GL_SYSTEM_GETOPT #endif #ifndef _@GUARD_PREFIX@_GETOPT_H #ifndef __need_getopt # define _@GUARD_PREFIX@_GETOPT_H 1 #endif /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in this header. When this happens, include the headers that might declare getopt so that they will not cause confusion if included after this file (if the system had , we have already included it). Then systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #if defined __GETOPT_PREFIX && !defined __need_getopt # if !@HAVE_GETOPT_H@ # include # include # include # endif # undef __need_getopt # undef getopt # undef getopt_long # undef getopt_long_only # undef optarg # undef opterr # undef optind # undef optopt # undef option # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # define getopt __GETOPT_ID (getopt) # define getopt_long __GETOPT_ID (getopt_long) # define getopt_long_only __GETOPT_ID (getopt_long_only) # define optarg __GETOPT_ID (optarg) # define opterr __GETOPT_ID (opterr) # define optind __GETOPT_ID (optind) # define optopt __GETOPT_ID (optopt) # define option __GETOPT_ID (option) # define _getopt_internal __GETOPT_ID (getopt_internal) #endif /* Standalone applications get correct prototypes for getopt_long and getopt_long_only; they declare "char **argv". libc uses prototypes with "char *const *argv" that are incorrect because getopt_long and getopt_long_only can permute argv; this is required for backward compatibility (e.g., for LSB 2.0.1). This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt', but it caused redefinition warnings if both unistd.h and getopt.h were included, since unistd.h includes getopt.h having previously defined __need_getopt. The only place where __getopt_argv_const is used is in definitions of getopt_long and getopt_long_only below, but these are visible only if __need_getopt is not defined, so it is quite safe to rewrite the conditional as follows: */ #if !defined __need_getopt # if defined __GETOPT_PREFIX # define __getopt_argv_const /* empty */ # else # define __getopt_argv_const const # endif #endif /* If __GNU_LIBRARY__ is not already defined, either we are being used standalone, or this is the first header included in the source file. If we are being used with glibc, we need to include , but that does not exist if we are standalone. So: if __GNU_LIBRARY__ is not defined, include , which will pull in for us if it's from glibc. (Why ctype.h? It's guaranteed to exist and it doesn't flood the namespace with stuff the way some other headers do.) */ #if !defined __GNU_LIBRARY__ # include #endif #ifndef __THROW # ifndef __GNUC_PREREQ # define __GNUC_PREREQ(maj, min) (0) # endif # if defined __cplusplus && __GNUC_PREREQ (2,8) # define __THROW throw () # else # define __THROW # endif #endif /* The definition of _GL_ARG_NONNULL is copied here. */ #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; #ifndef __need_getopt /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ # if !GNULIB_defined_struct_option struct option { const char *name; /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; # define GNULIB_defined_struct_option 1 # endif /* Names for the values of the `has_arg' field of `struct option'. */ # define no_argument 0 # define required_argument 1 # define optional_argument 2 #endif /* need getopt */ /* Get definitions and prototypes for functions to process the arguments in ARGV (ARGC of them, minus the program name) for options given in OPTS. Return the option character from OPTS just read. Return -1 when there are no more options. For unrecognized options, or options missing arguments, `optopt' is set to the option letter, and '?' is returned. The OPTS string is a list of characters which are recognized option letters, optionally followed by colons, specifying that that letter takes an argument, to be placed in `optarg'. If a letter in OPTS is followed by two colons, its argument is optional. This behavior is specific to the GNU `getopt'. The argument `--' causes premature termination of argument scanning, explicitly telling `getopt' that there are no more options. If OPTS begins with `-', then non-option arguments are treated as arguments to the option '\1'. This behavior is specific to the GNU `getopt'. If OPTS begins with `+', or POSIXLY_CORRECT is set in the environment, then do not permute arguments. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW _GL_ARG_NONNULL ((2, 3)); #ifndef __need_getopt extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); #endif #ifdef __cplusplus } #endif /* Make sure we later can get all the definitions and declarations. */ #undef __need_getopt #endif /* _@GUARD_PREFIX@_GETOPT_H */ #endif /* _@GUARD_PREFIX@_GETOPT_H */ gss-1.0.2/src/gl/version-etc.h0000644000000000000000000000555211662447025013013 00000000000000/* Print --version and bug-reporting information in a consistent format. Copyright (C) 1999, 2003, 2005, 2009-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Jim Meyering. */ #ifndef VERSION_ETC_H # define VERSION_ETC_H 1 # include # include /* The `sentinel' attribute was added in gcc 4.0. */ #ifndef _GL_ATTRIBUTE_SENTINEL # if 4 <= __GNUC__ # define _GL_ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__)) # else # define _GL_ATTRIBUTE_SENTINEL /* empty */ # endif #endif extern const char version_etc_copyright[]; /* The three functions below display the --version information in the standard way: command and package names, package version, followed by a short GPLv3+ notice and a list of up to 10 author names. If COMMAND_NAME is NULL, the PACKAGE is asumed to be the name of the program. The formats are therefore: PACKAGE VERSION or COMMAND_NAME (PACKAGE) VERSION. The functions differ in the way they are passed author names: */ /* N_AUTHORS names are supplied in array AUTHORS. */ extern void version_etc_arn (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors, size_t n_authors); /* Names are passed in the NULL-terminated array AUTHORS. */ extern void version_etc_ar (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors); /* Names are passed in the NULL-terminated va_list. */ extern void version_etc_va (FILE *stream, const char *command_name, const char *package, const char *version, va_list authors); /* Names are passed as separate arguments, with an additional NULL argument at the end. */ extern void version_etc (FILE *stream, const char *command_name, const char *package, const char *version, /* const char *author1, ..., NULL */ ...) _GL_ATTRIBUTE_SENTINEL; /* Display the usual `Report bugs to' stanza */ extern void emit_bug_reporting_address (void); #endif /* VERSION_ETC_H */ gss-1.0.2/src/gl/getopt_int.h0000644000000000000000000001174211662447025012727 00000000000000/* Internal declarations for getopt. Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GETOPT_INT_H #define _GETOPT_INT_H 1 #include extern int _getopt_internal (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, int __posixly_correct); /* Reentrant versions which can handle parsing multiple argument vectors at the same time. */ /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters, or by calling getopt. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ enum __ord { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER }; /* Data type for reentrant functions. */ struct _getopt_data { /* These have exactly the same meaning as the corresponding global variables, except that they are used for the reentrant versions of getopt. */ int optind; int opterr; int optopt; char *optarg; /* Internal members. */ /* True if the internal members have been initialized. */ int __initialized; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ char *__nextchar; /* See __ord above. */ enum __ord __ordering; /* If the POSIXLY_CORRECT environment variable is set or getopt was called. */ int __posixly_correct; /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ int __first_nonopt; int __last_nonopt; #if defined _LIBC && defined USE_NONOPTION_FLAGS int __nonoption_flags_max_len; int __nonoption_flags_len; #endif }; /* The initializer is necessary to set OPTIND and OPTERR to their default values and to clear the initialization flag. */ #define _GETOPT_DATA_INITIALIZER { 1, 1 } extern int _getopt_internal_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, struct _getopt_data *__data, int __posixly_correct); extern int _getopt_long_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); extern int _getopt_long_only_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); #endif /* getopt_int.h */ gss-1.0.2/src/gl/msvc-inval.c0000644000000000000000000000757611662447025012637 00000000000000/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include /* Specification. */ #include "msvc-inval.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* Get _invalid_parameter_handler type and _set_invalid_parameter_handler declaration. */ # include # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING static void cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } # else /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include # if defined _MSC_VER static void cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # else /* An index to thread-local storage. */ static DWORD tls_index; static int tls_initialized /* = 0 */; /* Used as a fallback only. */ static struct gl_msvc_inval_per_thread not_per_thread; struct gl_msvc_inval_per_thread * gl_msvc_inval_current (void) { if (!tls_initialized) { tls_index = TlsAlloc (); tls_initialized = 1; } if (tls_index == TLS_OUT_OF_INDEXES) /* TlsAlloc had failed. */ return ¬_per_thread; else { struct gl_msvc_inval_per_thread *pointer = (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); if (pointer == NULL) { /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ pointer = (struct gl_msvc_inval_per_thread *) malloc (sizeof (struct gl_msvc_inval_per_thread)); if (pointer == NULL) /* Could not allocate memory. Use the global storage. */ pointer = ¬_per_thread; TlsSetValue (tls_index, pointer); } return pointer; } } static void cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); if (current->restart_valid) longjmp (current->restart, 1); else /* An invalid parameter notification from outside the gnulib code. Give the caller a chance to intervene. */ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # endif # endif static int gl_msvc_inval_initialized /* = 0 */; void gl_msvc_inval_ensure_handler (void) { if (gl_msvc_inval_initialized == 0) { _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); gl_msvc_inval_initialized = 1; } } #endif gss-1.0.2/src/gl/stddef.in.h0000644000000000000000000000534311662447025012431 00000000000000/* A substitute for POSIX 2008 , for platforms that have issues. Copyright (C) 2009-2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Eric Blake. */ /* * POSIX 2008 for platforms that have issues. * */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_wchar_t || defined __need_size_t \ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t /* Special invocation convention inside gcc header files. In particular, gcc provides a version of that blindly redefines NULL even when __need_wint_t was defined, even though wint_t is not normally provided by . Hence, we must remember if special invocation has ever been used to obtain wint_t, in which case we need to clean up NULL yet again. */ # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) # ifdef __need_wint_t # undef _@GUARD_PREFIX@_STDDEF_H # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ #if @REPLACE_NULL@ # undef NULL # ifdef __cplusplus /* ISO C++ says that the macro NULL must expand to an integer constant expression, hence '((void *) 0)' is not allowed in C++. */ # if __GNUG__ >= 3 /* GNU C++ has a __null macro that behaves like an integer ('int' or 'long') but has the same size as a pointer. Use that, to avoid warnings. */ # define NULL __null # else # define NULL 0L # endif # else # define NULL ((void *) 0) # endif #endif /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ gss-1.0.2/src/gl/Makefile.in0000644000000000000000000015272211663554705012460 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: gnulib-tool --import --dir=. --local-dir=src/gl/override --lib=libgnu --source-base=src/gl --m4-base=src/gl/m4 --doc-base=doc --tests-base=src/gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=srcgl --no-vc-files error getopt-gnu progname version-etc VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/gl DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = am_libgnu_la_OBJECTS = progname.lo version-etc.lo libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.5 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = libgnu.la EXTRA_DIST = m4/gnulib-cache.m4 errno.in.h error.c error.h getopt.c \ getopt.in.h getopt1.c getopt_int.h intprops.h msvc-inval.c \ msvc-inval.h msvc-nothrow.c msvc-nothrow.h \ $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ $(top_srcdir)/build-aux/snippet/c++defs.h \ $(top_srcdir)/build-aux/snippet/warn-on-use.h stdarg.in.h \ stddef.in.h strerror.c strerror-override.c strerror-override.h \ string.in.h unistd.in.h verify.h # The BUILT_SOURCES created by this Makefile snippet are not used via #include # statements but through direct file reference. Therefore this snippet must be # present in all Makefile.am that need it. This is ensured by the applicability # 'all' defined above. # The BUILT_SOURCES created by this Makefile snippet are not used via #include # statements but through direct file reference. Therefore this snippet must be # present in all Makefile.am that need it. This is ensured by the applicability # 'all' defined above. BUILT_SOURCES = $(ERRNO_H) $(GETOPT_H) arg-nonnull.h c++defs.h \ warn-on-use.h $(STDARG_H) $(STDDEF_H) string.h unistd.h SUFFIXES = MOSTLYCLEANFILES = core *.stackdump errno.h errno.h-t getopt.h \ getopt.h-t arg-nonnull.h arg-nonnull.h-t c++defs.h c++defs.h-t \ warn-on-use.h warn-on-use.h-t stdarg.h stdarg.h-t stddef.h \ stddef.h-t string.h string.h-t unistd.h unistd.h-t MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CPPFLAGS = AM_CFLAGS = libgnu_la_SOURCES = gettext.h progname.h progname.c version-etc.h \ version-etc.c libgnu_la_LIBADD = $(srcgl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(srcgl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = error.c getopt.c getopt1.c msvc-inval.c \ msvc-nothrow.c strerror.c strerror-override.c libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(LTLIBINTL) ARG_NONNULL_H = arg-nonnull.h CXXDEFS_H = c++defs.h WARN_ON_USE_H = warn-on-use.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/gl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits src/gl/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(AM_V_CCLD)$(libgnu_la_LINK) $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-inval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-nothrow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror-override.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am # We need the following in order to create when the system # doesn't have one that is POSIX compliant. @GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_ERRNO_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_ERRNO_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ < $(srcdir)/errno.in.h; \ @GL_GENERATE_ERRNO_H_TRUE@ } > $@-t && \ @GL_GENERATE_ERRNO_H_TRUE@ mv $@-t $@ @GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ < $(srcdir)/getopt.in.h; \ } > $@-t && \ mv -f $@-t $@ # The arg-nonnull.h that gets inserted into generated .h files is the same as # build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut # off. arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/GL_ARG_NONNULL/,$$p' \ < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ > $@-t && \ mv $@-t $@ # The c++defs.h that gets inserted into generated .h files is the same as # build-aux/snippet/c++defs.h, except that it has the copyright header cut off. c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/_GL_CXXDEFS/,$$p' \ < $(top_srcdir)/build-aux/snippet/c++defs.h \ > $@-t && \ mv $@-t $@ # The warn-on-use.h that gets inserted into generated .h files is the same as # build-aux/snippet/warn-on-use.h, except that it has the copyright header cut # off. warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/^.ifndef/,$$p' \ < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ > $@-t && \ mv $@-t $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDARG_H_TRUE@stdarg.h: stdarg.in.h $(top_builddir)/config.status @GL_GENERATE_STDARG_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDARG_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDARG_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ @GL_GENERATE_STDARG_H_TRUE@ < $(srcdir)/stdarg.in.h; \ @GL_GENERATE_STDARG_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDARG_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDARG_H_FALSE@stdarg.h: $(top_builddir)/config.status @GL_GENERATE_STDARG_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \ @GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # We need the following in order to create when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ < $(srcdir)/string.in.h; \ } > $@-t && \ mv $@-t $@ # We need the following in order to create an empty placeholder for # when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/$(GNULIB_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ } > $@-t && \ mv $@-t $@ mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/src/gl/getopt.c0000644000000000000000000011750411662447025012053 00000000000000/* Getopt for GNU. NOTE: getopt is part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to drepper@gnu.org before changing it! Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _LIBC # include #endif #include "getopt.h" #include #include #include #include #ifdef _LIBC # include #else # include "gettext.h" # define _(msgid) gettext (msgid) #endif #if defined _LIBC && defined USE_IN_LIBIO # include #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt_long' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Using `getopt' or setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt_int.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Keep a global copy of all internal members of getopt_data. */ static struct _getopt_data getopt_data; #if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV extern char *getenv (); #endif #ifdef _LIBC /* Stored original parameters. XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ extern int __libc_argc; extern char **__libc_argv; /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ # ifdef USE_NONOPTION_FLAGS /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; # endif # ifdef USE_NONOPTION_FLAGS # define SWAP_FLAGS(ch1, ch2) \ if (d->__nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } # else # define SWAP_FLAGS(ch1, ch2) # endif #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ static void exchange (char **argv, struct _getopt_data *d) { int bottom = d->__first_nonopt; int middle = d->__last_nonopt; int top = d->optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = malloc (top + 1); if (new_str == NULL) d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0; else { memset (__mempcpy (new_str, __getopt_nonoption_flags, d->__nonoption_flags_max_len), '\0', top + 1 - d->__nonoption_flags_max_len); d->__nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; SWAP_FLAGS (bottom + i, middle + i); } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ d->__first_nonopt += (d->optind - d->__last_nonopt); d->__last_nonopt = d->optind; } /* Initialize the internal data when the first call is made. */ static const char * _getopt_initialize (int argc _GL_UNUSED, char **argv _GL_UNUSED, const char *optstring, struct _getopt_data *d, int posixly_correct) { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ d->__first_nonopt = d->__last_nonopt = d->optind; d->__nextchar = NULL; d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { d->__ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { d->__ordering = REQUIRE_ORDER; ++optstring; } else if (d->__posixly_correct) d->__ordering = REQUIRE_ORDER; else d->__ordering = PERMUTE; #if defined _LIBC && defined USE_NONOPTION_FLAGS if (!d->__posixly_correct && argc == __libc_argc && argv == __libc_argv) { if (d->__nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') d->__nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = d->__nonoption_flags_max_len = strlen (orig_str); if (d->__nonoption_flags_max_len < argc) d->__nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) malloc (d->__nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) d->__nonoption_flags_max_len = -1; else memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), '\0', d->__nonoption_flags_max_len - len); } } d->__nonoption_flags_len = d->__nonoption_flags_max_len; } else d->__nonoption_flags_len = 0; #endif return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns -1. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal_r (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int posixly_correct) { int print_errors = d->opterr; if (argc < 1) return -1; d->optarg = NULL; if (d->optind == 0 || !d->__initialized) { if (d->optind == 0) d->optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct); d->__initialized = 1; } else if (optstring[0] == '-' || optstring[0] == '+') optstring++; if (optstring[0] == ':') print_errors = 0; /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #if defined _LIBC && defined USE_NONOPTION_FLAGS # define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \ || (d->optind < d->__nonoption_flags_len \ && __getopt_nonoption_flags[d->optind] == '1')) #else # define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') #endif if (d->__nextchar == NULL || *d->__nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (d->__last_nonopt > d->optind) d->__last_nonopt = d->optind; if (d->__first_nonopt > d->optind) d->__first_nonopt = d->optind; if (d->__ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange ((char **) argv, d); else if (d->__last_nonopt != d->optind) d->__first_nonopt = d->optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (d->optind < argc && NONOPTION_P) d->optind++; d->__last_nonopt = d->optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (d->optind != argc && !strcmp (argv[d->optind], "--")) { d->optind++; if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange ((char **) argv, d); else if (d->__first_nonopt == d->__last_nonopt) d->__first_nonopt = d->optind; d->__last_nonopt = argc; d->optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (d->optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (d->__first_nonopt != d->__last_nonopt) d->optind = d->__first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (d->__ordering == REQUIRE_ORDER) return -1; d->optarg = argv[d->optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ d->__nextchar = (argv[d->optind] + 1 + (longopts != NULL && argv[d->optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[d->optind][1] == '-' || (long_only && (argv[d->optind][2] || !strchr (optstring, argv[d->optind][1]))))) { char *nameend; unsigned int namelen; const struct option *p; const struct option *pfound = NULL; struct option_list { const struct option *p; struct option_list *next; } *ambig_list = NULL; int exact = 0; int indfound = -1; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; namelen = nameend - d->__nextchar; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, d->__nextchar, namelen)) { if (namelen == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) { /* Second or later nonexact match found. */ struct option_list *newp = malloc (sizeof (*newp)); newp->p = p; newp->next = ambig_list; ambig_list = newp; } } if (ambig_list != NULL && !exact) { if (print_errors) { struct option_list first; first.p = pfound; first.next = ambig_list; ambig_list = &first; #if defined _LIBC && defined USE_IN_LIBIO char *buf = NULL; size_t buflen = 0; FILE *fp = open_memstream (&buf, &buflen); if (fp != NULL) { fprintf (fp, _("%s: option '%s' is ambiguous; possibilities:"), argv[0], argv[d->optind]); do { fprintf (fp, " '--%s'", ambig_list->p->name); ambig_list = ambig_list->next; } while (ambig_list != NULL); fputc_unlocked ('\n', fp); if (__builtin_expect (fclose (fp) != EOF, 1)) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } } #else fprintf (stderr, _("%s: option '%s' is ambiguous; possibilities:"), argv[0], argv[d->optind]); do { fprintf (stderr, " '--%s'", ambig_list->p->name); ambig_list = ambig_list->next; } while (ambig_list != NULL); fputc ('\n', stderr); #endif } d->__nextchar += strlen (d->__nextchar); d->optind++; d->optopt = 0; return '?'; } while (ambig_list != NULL) { struct option_list *pn = ambig_list->next; free (ambig_list); ambig_list = pn; } if (pfound != NULL) { option_index = indfound; d->optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif if (argv[d->optind - 1][1] == '-') { /* --option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("\ %s: option '--%s' doesn't allow an argument\n"), argv[0], pfound->name); #else fprintf (stderr, _("\ %s: option '--%s' doesn't allow an argument\n"), argv[0], pfound->name); #endif } else { /* +option or -option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("\ %s: option '%c%s' doesn't allow an argument\n"), argv[0], argv[d->optind - 1][0], pfound->name); #else fprintf (stderr, _("\ %s: option '%c%s' doesn't allow an argument\n"), argv[0], argv[d->optind - 1][0], pfound->name); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #endif } d->__nextchar += strlen (d->__nextchar); d->optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option '--%s' requires an argument\n"), argv[0], pfound->name) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("%s: option '--%s' requires an argument\n"), argv[0], pfound->name); #endif } d->__nextchar += strlen (d->__nextchar); d->optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } d->__nextchar += strlen (d->__nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[d->optind][1] == '-' || strchr (optstring, *d->__nextchar) == NULL) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif if (argv[d->optind][1] == '-') { /* --option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: unrecognized option '--%s'\n"), argv[0], d->__nextchar); #else fprintf (stderr, _("%s: unrecognized option '--%s'\n"), argv[0], d->__nextchar); #endif } else { /* +option or -option */ #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: unrecognized option '%c%s'\n"), argv[0], argv[d->optind][0], d->__nextchar); #else fprintf (stderr, _("%s: unrecognized option '%c%s'\n"), argv[0], argv[d->optind][0], d->__nextchar); #endif } #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #endif } d->__nextchar = (char *) ""; d->optind++; d->optopt = 0; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *d->__nextchar++; const char *temp = strchr (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*d->__nextchar == '\0') ++d->optind; if (temp == NULL || c == ':' || c == ';') { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; int n; #endif #if defined _LIBC && defined USE_IN_LIBIO n = __asprintf (&buf, _("%s: invalid option -- '%c'\n"), argv[0], c); #else fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); #endif #if defined _LIBC && defined USE_IN_LIBIO if (n >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #endif } d->optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; if (longopts == NULL) goto no_longs; /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ d->optind++; } else if (d->optind == argc) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("%s: option requires an argument -- '%c'\n"), argv[0], c) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); #endif } d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `d->optind' once; increment it again when taking next ARGV-elt as argument. */ d->optarg = argv[d->optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) { if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("%s: option '-W %s' is ambiguous\n"), argv[0], d->optarg) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"), argv[0], d->optarg); #endif } d->__nextchar += strlen (d->__nextchar); d->optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option '-W %s' doesn't allow an argument\n"), argv[0], pfound->name) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("\ %s: option '-W %s' doesn't allow an argument\n"), argv[0], pfound->name); #endif } d->__nextchar += strlen (d->__nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option '-W %s' requires an argument\n"), argv[0], pfound->name) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("\ %s: option '-W %s' requires an argument\n"), argv[0], pfound->name); #endif } d->__nextchar += strlen (d->__nextchar); return optstring[0] == ':' ? ':' : '?'; } } else d->optarg = NULL; d->__nextchar += strlen (d->__nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } no_longs: d->__nextchar = NULL; return 'W'; /* Let the application handle it. */ } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; d->optind++; } else d->optarg = NULL; d->__nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ d->optind++; } else if (d->optind == argc) { if (print_errors) { #if defined _LIBC && defined USE_IN_LIBIO char *buf; if (__asprintf (&buf, _("\ %s: option requires an argument -- '%c'\n"), argv[0], c) >= 0) { _IO_flockfile (stderr); int old_flags2 = ((_IO_FILE *) stderr)->_flags2; ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; __fxprintf (NULL, "%s", buf); ((_IO_FILE *) stderr)->_flags2 = old_flags2; _IO_funlockfile (stderr); free (buf); } #else fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); #endif } d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ d->optarg = argv[d->optind++]; d->__nextchar = NULL; } } return c; } } int _getopt_internal (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, int posixly_correct) { int result; getopt_data.optind = optind; getopt_data.opterr = opterr; result = _getopt_internal_r (argc, argv, optstring, longopts, longind, long_only, &getopt_data, posixly_correct); optind = getopt_data.optind; optarg = getopt_data.optarg; optopt = getopt_data.optopt; return result; } /* glibc gets a LSB-compliant getopt. Standalone applications get a POSIX-compliant getopt. */ #if _LIBC enum { POSIXLY_CORRECT = 0 }; #else enum { POSIXLY_CORRECT = 1 }; #endif int getopt (int argc, char *const *argv, const char *optstring) { return _getopt_internal (argc, (char **) argv, optstring, (const struct option *) 0, (int *) 0, 0, POSIXLY_CORRECT); } #ifdef _LIBC int __posix_getopt (int argc, char *const *argv, const char *optstring) { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0, 1); } #endif #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ gss-1.0.2/src/gl/gettext.h0000644000000000000000000001044411662447025012235 00000000000000/* Convenience header for conditional use of GNU . Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option. */ #if ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by the gettext() and ngettext() macros. This is an alternative to calling textdomain(), and is useful for libraries. */ # ifdef DEFAULT_TEXT_DOMAIN # undef gettext # define gettext(Msgid) \ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) # endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. We don't include as well because people using "gettext.h" will not include , and also including would fail on SunOS 4, whereas is OK. */ #if defined(__sun) # include #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include , which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) # include # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H # include # endif #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # undef gettext # define gettext(Msgid) ((const char *) (Msgid)) # undef dgettext # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) # undef dcgettext # define dcgettext(Domainname, Msgid, Category) \ ((void) (Category), dgettext (Domainname, Msgid)) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 \ ? ((void) (Msgid2), (const char *) (Msgid1)) \ : ((void) (Msgid1), (const char *) (Msgid2))) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) # undef textdomain # define textdomain(Domainname) ((const char *) (Domainname)) # undef bindtextdomain # define bindtextdomain(Domainname, Dirname) \ ((void) (Domainname), (const char *) (Dirname)) # undef bind_textdomain_codeset # define bind_textdomain_codeset(Domainname, Codeset) \ ((void) (Domainname), (const char *) (Codeset)) #endif /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String #endif /* _LIBGETTEXT_H */ gss-1.0.2/src/gl/verify.h0000644000000000000000000002276211662447025012063 00000000000000/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H # define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per the C1X draft N1548 section 6.7.10. This is supported by GCC 4.6.0 and later, in C mode, and its use here generates easier-to-read diagnostics when verify (R) fails. Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per the C++0X draft N3242 section 7.(4). This will likely be supported by future GCC versions, in C++ mode. Use this only with GCC. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ # if (4 < __GNUC__ || (__GNUC__ == 4 && 6 <= __GNUC_MINOR__)) && !defined __cplusplus # define _GL_HAVE__STATIC_ASSERT 1 # endif /* The condition (99 < __GNUC__) is temporary, until we know about the first G++ release that supports static_assert. */ # if (99 < __GNUC__) && defined __cplusplus # define _GL_HAVE_STATIC_ASSERT 1 # endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant_decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ # define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) # define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ # if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ # else # define _GL_COUNTER __LINE__ # endif /* Generate a symbol with the given prefix, making it unique if possible. */ # define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ # define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) # ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _gl_verify_type<(R) ? 1 : -1> # elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { \ _Static_assert (R, DIAGNOSTIC); \ int _gl_dummy; \ } # else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } # endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. Unfortunately, unlike C1X, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ # ifdef _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY _Static_assert # else # define _GL_VERIFY(R, DIAGNOSTIC) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] # endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ # ifdef _GL_STATIC_ASSERT_H # if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert # define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) # endif # if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert # define static_assert _Static_assert /* Draft C1X requires this #define. */ # endif # endif /* @assert.h omit start@ */ /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_true (R) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time, as an integer constant expression. Return 1. This is equivalent to verify_expr (R, 1). verify_true is obsolescent; please use verify_expr instead. */ # define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") /* Verify requirement R at compile-time. Return the value of the expression E. */ # define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. */ # define verify(R) _GL_VERIFY (R, "verify (" #R ")") /* @assert.h omit end@ */ #endif gss-1.0.2/src/gl/m4/0000755000000000000000000000000011663555055011001 500000000000000gss-1.0.2/src/gl/m4/gnulib-cache.m40000644000000000000000000000373311662447025013506 00000000000000# Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the specification of how gnulib-tool is used. # It acts as a cache: It is written and read by gnulib-tool. # In projects that use version control, this file is meant to be put under # version control, like the configure.ac and various Makefile.am files. # Specification in the form of a command-line invocation: # gnulib-tool --import --dir=. --local-dir=src/gl/override --lib=libgnu --source-base=src/gl --m4-base=src/gl/m4 --doc-base=doc --tests-base=src/gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=srcgl --no-vc-files error getopt-gnu progname version-etc # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([src/gl/override]) gl_MODULES([ error getopt-gnu progname version-etc ]) gl_AVOID([]) gl_SOURCE_BASE([src/gl]) gl_M4_BASE([src/gl/m4]) gl_PO_BASE([]) gl_DOC_BASE([doc]) gl_TESTS_BASE([src/gl/tests]) gl_LIB([libgnu]) gl_MAKEFILE_NAME([]) gl_LIBTOOL gl_MACRO_PREFIX([srcgl]) gl_PO_DOMAIN([]) gl_WITNESS_C_DOMAIN([]) gl_VC_FILES([false]) gss-1.0.2/src/gl/m4/stdarg.m40000644000000000000000000000540411662447025012446 00000000000000# stdarg.m4 serial 6 dnl Copyright (C) 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Provide a working va_copy in combination with . AC_DEFUN([gl_STDARG_H], [ STDARG_H='' NEXT_STDARG_H='' AC_MSG_CHECKING([for va_copy]) AC_CACHE_VAL([gl_cv_func_va_copy], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[ #ifndef va_copy void (*func) (va_list, va_list) = va_copy; #endif ]])], [gl_cv_func_va_copy=yes], [gl_cv_func_va_copy=no])]) AC_MSG_RESULT([$gl_cv_func_va_copy]) if test $gl_cv_func_va_copy = no; then dnl Provide a substitute. dnl Usually a simple definition in is enough. Not so on AIX 5 dnl with some versions of the /usr/vac/bin/cc compiler. It has an dnl which does '#undef va_copy', leading to a missing va_copy symbol. For dnl this platform, we use an substitute. But we cannot use this dnl approach on other platforms, because often defines only dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do dnl not work in this situation. AC_EGREP_CPP([vaccine], [#if defined _AIX && !defined __GNUC__ AIX vaccine #endif ], [gl_aixcc=yes], [gl_aixcc=no]) if test $gl_aixcc = yes; then dnl Provide a substitute file. STDARG_H=stdarg.h gl_NEXT_HEADERS([stdarg.h]) dnl Fallback for the case when contains only macro definitions. if test "$gl_cv_next_stdarg_h" = '""'; then gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' NEXT_STDARG_H="$gl_cv_next_stdarg_h" fi else dnl Provide a substitute in , either __va_copy or as a simple dnl assignment. gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[ #ifndef __va_copy error, bail out #endif ]])], [gl_cv_func___va_copy=yes], [gl_cv_func___va_copy=no])]) if test $gl_cv_func___va_copy = yes; then AC_DEFINE([va_copy], [__va_copy], [Define as a macro for copying va_list variables.]) else AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed. */ #define gl_va_copy(a,b) ((a) = (b))]) AC_DEFINE([va_copy], [gl_va_copy], [Define as a macro for copying va_list variables.]) fi fi fi AC_SUBST([STDARG_H]) AM_CONDITIONAL([GL_GENERATE_STDARG_H], [test -n "$STDARG_H"]) AC_SUBST([NEXT_STDARG_H]) ]) gss-1.0.2/src/gl/m4/version-etc.m40000644000000000000000000000222611662447025013417 00000000000000# version-etc.m4 serial 1 # Copyright (C) 2009-2011 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl $1 - configure flag and define name dnl $2 - human readable description m4_define([gl_VERSION_ETC_FLAG], [dnl AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1], [$2])], [dnl case $withval in yes|no) ;; *) AC_DEFINE_UNQUOTED(AS_TR_CPP([PACKAGE_$1]), ["$withval"], [$2]) ;; esac ]) ]) AC_DEFUN([gl_VERSION_ETC], [dnl gl_VERSION_ETC_FLAG([packager], [String identifying the packager of this software]) gl_VERSION_ETC_FLAG([packager-version], [Packager-specific version information]) gl_VERSION_ETC_FLAG([packager-bug-reports], [Packager info for bug reports (URL/e-mail/...)]) if test "X$with_packager" = "X" && \ test "X$with_packager_version$with_packager_bug_reports" != "X" then AC_MSG_ERROR([The --with-packager-{bug-reports,version} options require --with-packager]) fi ]) gss-1.0.2/src/gl/m4/sys_socket_h.m40000644000000000000000000001421711662447025013661 00000000000000# sys_socket_h.m4 serial 22 dnl Copyright (C) 2005-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson. AC_DEFUN([gl_HEADER_SYS_SOCKET], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_C_INLINE]) dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have dnl old-style declarations (with return type 'int' instead of 'ssize_t') dnl unless _POSIX_PII_SOCKET is defined. case "$host_os" in osf*) AC_DEFINE([_POSIX_PII_SOCKET], [1], [Define to 1 in order to get the POSIX compatible declarations of socket functions.]) ;; esac AC_CACHE_CHECK([whether is self-contained], [gl_cv_header_sys_socket_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], [gl_cv_header_sys_socket_h_selfcontained=yes], [gl_cv_header_sys_socket_h_selfcontained=no]) ]) if test $gl_cv_header_sys_socket_h_selfcontained = yes; then dnl If the shutdown function exists, should define dnl SHUT_RD, SHUT_WR, SHUT_RDWR. AC_CHECK_FUNCS([shutdown]) if test $ac_cv_func_shutdown = yes; then AC_CACHE_CHECK([whether defines the SHUT_* macros], [gl_cv_header_sys_socket_h_shut], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], [gl_cv_header_sys_socket_h_shut=yes], [gl_cv_header_sys_socket_h_shut=no]) ]) if test $gl_cv_header_sys_socket_h_shut = no; then SYS_SOCKET_H='sys/socket.h' fi fi fi # We need to check for ws2tcpip.h now. gl_PREREQ_SYS_H_SOCKET AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]) if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], [], [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], [#include #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_WS2TCPIP_H #include #endif ]) fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then SYS_SOCKET_H='sys/socket.h' fi gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include #include ]], [socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4]) ]) AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], [ dnl Check prerequisites of the replacement. AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) gl_CHECK_NEXT_HEADERS([sys/socket.h]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 HAVE_WS2TCPIP_H=0 else HAVE_SYS_SOCKET_H=0 if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi AC_SUBST([HAVE_SYS_SOCKET_H]) AC_SUBST([HAVE_WS2TCPIP_H]) ]) # Common prerequisites of the replacement and of the # replacement. # Sets and substitutes HAVE_WINSOCK2_H. AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], [ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h != yes; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([winsock2.h]) fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi AC_SUBST([HAVE_WINSOCK2_H]) ]) AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], [ GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET]) GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT]) GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT]) GNULIB_BIND=0; AC_SUBST([GNULIB_BIND]) GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME]) GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME]) GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT]) GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN]) GNULIB_RECV=0; AC_SUBST([GNULIB_RECV]) GNULIB_SEND=0; AC_SUBST([GNULIB_SEND]) GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM]) GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO]) GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT]) GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN]) GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4]) HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) ]) gss-1.0.2/src/gl/m4/nocrash.m40000644000000000000000000001055411662447025012621 00000000000000# nocrash.m4 serial 3 dnl Copyright (C) 2005, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini. AC_PREREQ([2.13]) dnl Expands to some code for use in .c programs that will cause the configure dnl test to exit instead of crashing. This is useful to avoid triggering dnl action from a background debugger and to avoid core dumps. dnl Usage: ... dnl ]GL_NOCRASH[ dnl ... dnl int main() { nocrash_init(); ... } AC_DEFUN([GL_NOCRASH],[[ #include #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on MacOS X. */ #include #include #include #include #include #include /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include #include static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include /* A POSIX signal handler. */ static void exception_handler (int sig) { exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif ]]) gss-1.0.2/src/gl/m4/strerror.m40000644000000000000000000000523011662447025013041 00000000000000# strerror.m4 serial 16 dnl Copyright (C) 2002, 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRERROR], [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) ]) if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then AC_CACHE_CHECK([for working strerror function], [gl_cv_func_working_strerror], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[if (!*strerror (-2)) return 1;]])], [gl_cv_func_working_strerror=yes], [gl_cv_func_working_strerror=no], [dnl Be pessimistic on cross-compiles for now. gl_cv_func_working_strerror="guessing no"]) ]) if test "$gl_cv_func_working_strerror" != yes; then dnl The system's strerror() fails to return a string for out-of-range dnl integers. Replace it. REPLACE_STRERROR=1 fi m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's dnl buffer, we must replace strerror. case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac ]) else dnl The system's strerror() cannot know about the new errno values we add dnl to , or any fix for strerror(0). Replace it. REPLACE_STRERROR=1 fi ]) dnl Detect if strerror(0) passes (that is, does not set errno, and does not dnl return a string that matches strerror(-1)). AC_DEFUN([gl_FUNC_STRERROR_0], [ REPLACE_STRERROR_0=0 AC_CACHE_CHECK([whether strerror(0) succeeds], [gl_cv_func_strerror_0_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result;]])], [gl_cv_func_strerror_0_works=yes], [gl_cv_func_strerror_0_works=no], [dnl Be pessimistic on cross-compiles for now. gl_cv_func_strerror_0_works="guessing no"]) ]) if test "$gl_cv_func_strerror_0_works" != yes; then REPLACE_STRERROR_0=1 AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) does not return a message implying success.]) fi ]) gss-1.0.2/src/gl/m4/error.m40000644000000000000000000000154411662447025012314 00000000000000#serial 14 # Copyright (C) 1996-1998, 2001-2004, 2009-2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_ERROR], [ dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer dnl maintained in Autoconf and because it invokes AC_LIBOBJ. AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[error_at_line (0, 0, "", 0, "an error occurred");]])], [ac_cv_lib_error_at_line=yes], [ac_cv_lib_error_at_line=no])]) ]) # Prerequisites of lib/error.c. AC_DEFUN([gl_PREREQ_ERROR], [ AC_REQUIRE([AC_FUNC_STRERROR_R]) AC_REQUIRE([AC_C_INLINE]) : ]) gss-1.0.2/src/gl/m4/gnulib-comp.m40000644000000000000000000002540111662447025013375 00000000000000# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from ./configure.ac, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([srcgl_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable AC_REQUIRE([gl_PROG_AR_RANLIB]) # Code from module errno: # Code from module error: # Code from module extensions: AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module gettext-h: # Code from module include_next: # Code from module intprops: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module nocrash: # Code from module progname: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module stdarg: dnl Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode dnl for the builtin va_copy to work. With Autoconf 2.60 or later, dnl gl_PROG_CC_C99 arranges for this. With older Autoconf gl_PROG_CC_C99 dnl shouldn't hurt, though installers are on their own to set c99 mode. gl_PROG_CC_C99 # Code from module stddef: # Code from module strerror: # Code from module strerror-override: # Code from module string: # Code from module unistd: # Code from module verify: # Code from module version-etc: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([srcgl_INIT], [ AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) gl_cond_libtool=true gl_m4_base='src/gl/m4' m4_pushdef([AC_LIBOBJ], m4_defn([srcgl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([srcgl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([srcgl_LIBSOURCES])) m4_pushdef([srcgl_LIBSOURCES_LIST], []) m4_pushdef([srcgl_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='src/gl' gl_HEADER_ERRNO_H gl_ERROR if test $ac_cv_lib_error_at_line = no; then AC_LIBOBJ([error]) gl_PREREQ_ERROR fi m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) gl_FUNC_GETOPT_GNU if test $REPLACE_GETOPT = 1; then AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1]) gl_PREREQ_GETOPT fi gl_MODULE_INDICATOR_FOR_TESTS([getopt-gnu]) gl_FUNC_GETOPT_POSIX if test $REPLACE_GETOPT = 1; then AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1]) gl_PREREQ_GETOPT fi AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) gl_MSVC_INVAL if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-inval]) fi gl_MSVC_NOTHROW if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-nothrow]) fi AC_CHECK_DECLS([program_invocation_name], [], [], [#include ]) AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include ]) gt_TYPE_SSIZE_T gl_STDARG_H gl_STDDEF_H gl_FUNC_STRERROR if test $REPLACE_STRERROR = 1; then AC_LIBOBJ([strerror]) fi gl_MODULE_INDICATOR([strerror]) gl_STRING_MODULE_INDICATOR([strerror]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then AC_LIBOBJ([strerror-override]) gl_PREREQ_SYS_H_WINSOCK2 fi gl_HEADER_STRING_H gl_UNISTD_H gl_VERSION_ETC # End of code from modules m4_ifval(srcgl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([srcgl_LIBSOURCES_DIR])[ || for gl_file in ]srcgl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([srcgl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([srcgl_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([srcgl_LIBSOURCES_DIR]) m4_popdef([srcgl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ srcgl_libobjs= srcgl_ltlibobjs= if test -n "$srcgl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $srcgl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do srcgl_libobjs="$srcgl_libobjs $i.$ac_objext" srcgl_ltlibobjs="$srcgl_ltlibobjs $i.lo" done fi AC_SUBST([srcgl_LIBOBJS], [$srcgl_libobjs]) AC_SUBST([srcgl_LTLIBOBJS], [$srcgl_ltlibobjs]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([srcgltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([srcgltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([srcgltests_LIBSOURCES])) m4_pushdef([srcgltests_LIBSOURCES_LIST], []) m4_pushdef([srcgltests_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='src/gl/tests' changequote(,)dnl srcgltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS changequote([, ])dnl AC_SUBST([srcgltests_WITNESS]) gl_module_indicator_condition=$srcgltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(srcgltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([srcgltests_LIBSOURCES_DIR])[ || for gl_file in ]srcgltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([srcgltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([srcgltests_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([srcgltests_LIBSOURCES_DIR]) m4_popdef([srcgltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ srcgltests_libobjs= srcgltests_ltlibobjs= if test -n "$srcgltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $srcgltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do srcgltests_libobjs="$srcgltests_libobjs $i.$ac_objext" srcgltests_ltlibobjs="$srcgltests_ltlibobjs $i.lo" done fi AC_SUBST([srcgltests_LIBOBJS], [$srcgltests_libobjs]) AC_SUBST([srcgltests_LTLIBOBJS], [$srcgltests_ltlibobjs]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into srcgl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([srcgl_LIBOBJ], [ AS_LITERAL_IF([$1], [srcgl_LIBSOURCES([$1.c])])dnl srcgl_LIBOBJS="$srcgl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into srcgl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([srcgl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [srcgl_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([srcgl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([srcgl_LIBSOURCES_DIR], [src/gl]) m4_append([srcgl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into srcgltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([srcgltests_LIBOBJ], [ AS_LITERAL_IF([$1], [srcgltests_LIBSOURCES([$1.c])])dnl srcgltests_LIBOBJS="$srcgltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into srcgltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([srcgltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [srcgltests_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([srcgltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([srcgltests_LIBSOURCES_DIR], [src/gl/tests]) m4_append([srcgltests_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([srcgl_FILE_LIST], [ build-aux/snippet/arg-nonnull.h build-aux/snippet/c++defs.h build-aux/snippet/warn-on-use.h lib/errno.in.h lib/error.c lib/error.h lib/getopt.c lib/getopt.in.h lib/getopt1.c lib/getopt_int.h lib/gettext.h lib/intprops.h lib/msvc-inval.c lib/msvc-inval.h lib/msvc-nothrow.c lib/msvc-nothrow.h lib/progname.c lib/progname.h lib/stdarg.in.h lib/stddef.in.h lib/strerror-override.c lib/strerror-override.h lib/strerror.c lib/string.in.h lib/unistd.in.h lib/verify.h lib/version-etc.c lib/version-etc.h m4/00gnulib.m4 m4/errno_h.m4 m4/error.m4 m4/extensions.m4 m4/getopt.m4 m4/gnulib-common.m4 m4/include_next.m4 m4/msvc-inval.m4 m4/msvc-nothrow.m4 m4/nocrash.m4 m4/ssize_t.m4 m4/stdarg.m4 m4/stddef_h.m4 m4/strerror.m4 m4/string_h.m4 m4/sys_socket_h.m4 m4/unistd_h.m4 m4/version-etc.m4 m4/warn-on-use.m4 m4/wchar_t.m4 ]) gss-1.0.2/src/gl/m4/ssize_t.m40000644000000000000000000000146311662447025012643 00000000000000# ssize_t.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2001-2003, 2006, 2010-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether ssize_t is defined. AC_DEFUN([gt_TYPE_SSIZE_T], [ AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x;]])], [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) if test $gt_cv_ssize_t = no; then AC_DEFINE([ssize_t], [int], [Define as a signed type of the same size as size_t.]) fi ]) gss-1.0.2/src/gl/m4/unistd_h.m40000644000000000000000000002070411662447025012777 00000000000000# unistd_h.m4 serial 61 dnl Copyright (C) 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Simon Josefsson, Bruno Haible. AC_DEFUN([gl_UNISTD_H], [ dnl Use AC_REQUIRE here, so that the default behavior below is expanded dnl once only, before all statements that occur in other macros. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_C_INLINE]) gl_CHECK_NEXT_HEADERS([unistd.h]) if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi AC_SUBST([HAVE_UNISTD_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_UNISTD_H # include #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include # endif #endif ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sleep symlink symlinkat ttyname_r unlink unlinkat usleep]) ]) AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) AC_DEFUN([gl_UNISTD_H_DEFAULTS], [ GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3]) GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT]) GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT]) GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC]) GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS]) GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN]) GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT]) GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE]) GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE]) GNULIB_READ=0; AC_SUBST([GNULIB_READ]) GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) GNULIB_UNISTD_H_GETOPT=0; AC_SUBST([GNULIB_UNISTD_H_GETOPT]) GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK]) GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT]) GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP]) GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) HAVE_LINK=1; AC_SUBST([HAVE_LINK]) HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) REPLACE_READ=0; AC_SUBST([REPLACE_READ]) REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) ]) gss-1.0.2/src/gl/m4/errno_h.m40000644000000000000000000000600611662447025012615 00000000000000# errno_h.m4 serial 10 dnl Copyright (C) 2004, 2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ AC_EGREP_CPP([booboo],[ #include #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif ], [gl_cv_header_errno_h_complete=no], [gl_cv_header_errno_h_complete=yes]) ]) if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else gl_NEXT_HEADERS([errno.h]) ERRNO_H='errno.h' fi AC_SUBST([ERRNO_H]) AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"]) gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) gl_REPLACE_ERRNO_VALUE([ENOLINK]) gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) ]) # Assuming $1 = EOVERFLOW. # The EOVERFLOW errno value ought to be defined in , according to # POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and # some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. # Check for the value of EOVERFLOW. # Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. AC_DEFUN([gl_REPLACE_ERRNO_VALUE], [ if test -n "$ERRNO_H"; then AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ AC_EGREP_CPP([yes],[ #include #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=yes], [gl_cv_header_errno_h_]$1[=no]) if test $gl_cv_header_errno_h_]$1[ = no; then AC_EGREP_CPP([yes],[ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=hidden]) if test $gl_cv_header_errno_h_]$1[ = hidden; then dnl The macro exists but is hidden. dnl Define it to the same value. AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include ]) fi fi ]) case $gl_cv_header_errno_h_]$1[ in yes | no) ]$1[_HIDDEN=0; ]$1[_VALUE= ;; *) ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" ;; esac AC_SUBST($1[_HIDDEN]) AC_SUBST($1[_VALUE]) fi ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) gss-1.0.2/src/gl/m4/msvc-nothrow.m40000644000000000000000000000052311662447025013625 00000000000000# msvc-nothrow.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MSVC_NOTHROW], [ AC_REQUIRE([gl_MSVC_INVAL]) ]) gss-1.0.2/src/gl/m4/msvc-inval.m40000644000000000000000000000132711662447025013241 00000000000000# msvc-inval.m4 serial 1 dnl Copyright (C) 2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MSVC_INVAL], [ AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], [Define to 1 on MSVC platforms that have the "invalid parameter handler" concept.]) else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) ]) gss-1.0.2/src/gl/m4/getopt.m40000644000000000000000000002656211662447025012474 00000000000000# getopt.m4 serial 38 dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Request a POSIX compliant getopt function. AC_DEFUN([gl_FUNC_GETOPT_POSIX], [ m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Other modules can request the gnulib implementation of the getopt dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS. dnl argp.m4 does this. m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [ gl_GETOPT_IFELSE([], []) REPLACE_GETOPT=1 ], [ REPLACE_GETOPT=0 gl_GETOPT_IFELSE([ REPLACE_GETOPT=1 ], []) ]) if test $REPLACE_GETOPT = 1; then dnl Arrange for getopt.h to be created. gl_GETOPT_SUBSTITUTE_HEADER dnl Arrange for unistd.h to include getopt.h. GNULIB_UNISTD_H_GETOPT=1 fi ]) # Request a POSIX compliant getopt function with GNU extensions (such as # options with optional arguments) and the functions getopt_long, # getopt_long_only. AC_DEFUN([gl_FUNC_GETOPT_GNU], [ m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) AC_REQUIRE([gl_FUNC_GETOPT_POSIX]) ]) # emacs' configure.in uses this. AC_DEFUN([gl_GETOPT_IFELSE], [ AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) AS_IF([test -n "$gl_replace_getopt"], [$1], [$2]) ]) # Determine whether to replace the entire getopt facility. AC_DEFUN([gl_GETOPT_CHECK_HEADERS], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON dnl Persuade Solaris to declare optarg, optind, opterr, optopt. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_CHECK_NEXT_HEADERS([getopt.h]) if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi AC_SUBST([HAVE_GETOPT_H]) gl_replace_getopt= dnl Test whether is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes]) fi dnl Test whether the function getopt_long is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes]) fi dnl mingw's getopt (in libmingwex.a) does weird things when the options dnl strings starts with '+' and it's not the first call. Some internal state dnl is left over from earlier calls, and neither setting optind = 0 nor dnl setting optreset = 1 get rid of this internal state. dnl POSIX is silent on optind vs. optreset, so we allow either behavior. dnl POSIX 2008 does not specify leading '+' behavior, but see dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on dnl the next version of POSIX. For now, we only guarantee leading '+' dnl behavior with getopt-gnu. if test -z "$gl_replace_getopt"; then AC_CACHE_CHECK([whether getopt is POSIX compatible], [gl_cv_func_getopt_posix], [ dnl BSD getopt_long uses an incompatible method to reset option dnl processing. Existence of the optreset variable, in and of dnl itself, is not a reason to replace getopt, but knowledge dnl of the variable is needed to determine how to reset and dnl whether a reset reparses the environment. Solaris dnl supports neither optreset nor optind=0, but keeps no state dnl that needs a reset beyond setting optind=1; detect Solaris dnl by getopt_clip. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[int *p = &optreset; return optreset;]])], [gl_optind_min=1], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[return !getopt_clip;]])], [gl_optind_min=1], [gl_optind_min=0])]) dnl This test fails on mingw and succeeds on many other platforms. gl_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -DOPTIND_MIN=$gl_optind_min" AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include int main () { { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; optind = OPTIND_MIN; opterr = 0; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; } /* Some internal state exists at this point. */ { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; optind = OPTIND_MIN; opterr = 0; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; } /* Detect MacOS 10.5, AIX 7.1 bug. */ { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; optind = OPTIND_MIN; opterr = 0; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; } return 0; } ]])], [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no], [case "$host_os" in mingw*) gl_cv_func_getopt_posix="guessing no";; darwin* | aix*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac ]) CPPFLAGS=$gl_save_CPPFLAGS ]) case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu], [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. dnl GNU Coding Standards currently allow awk but not env; besides, env dnl is ambiguous with environment values that contain newlines. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" #include #include ]GL_NOCRASH[ ]], [[ int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 32; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 64; else if (getopt (3, argv, "+:a:b") != ':') result |= 64; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 128; } return result; ]])], [gl_cv_func_getopt_gnu=yes], [gl_cv_func_getopt_gnu=no], [dnl Cross compiling. Guess based on host and declarations. case $host_os:$ac_cv_have_decl_optreset in *-gnu*:* | mingw*:*) gl_cv_func_getopt_gnu=no;; *:yes) gl_cv_func_getopt_gnu=no;; *) gl_cv_func_getopt_gnu=yes;; esac ]) case $gl_had_POSIXLY_CORRECT in exported) ;; yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; *) AS_UNSET([POSIXLY_CORRECT]) ;; esac ]) if test "$gl_cv_func_getopt_gnu" = "no"; then gl_replace_getopt=yes fi fi ]) # emacs' configure.in uses this. AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], [ GETOPT_H=getopt.h AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], [Define to rpl_ if the getopt replacement functions and variables should be used.]) AC_SUBST([GETOPT_H]) ]) # Prerequisites of lib/getopt*. # emacs' configure.in uses this. AC_DEFUN([gl_PREREQ_GETOPT], [ AC_CHECK_DECLS_ONCE([getenv]) ]) gss-1.0.2/src/gl/error.h0000644000000000000000000000474611662447025011712 00000000000000/* Declaration for error-reporting function Copyright (C) 1995-1997, 2003, 2006, 2008-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _ERROR_H #define _ERROR_H 1 /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif #ifdef __cplusplus extern "C" { #endif /* Print a message with `fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ extern void error (int __status, int __errnum, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); extern void error_at_line (int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 5, 6)); /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ extern void (*error_print_progname) (void); /* This variable is incremented each time `error' is called. */ extern unsigned int error_message_count; /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ extern int error_one_per_line; #ifdef __cplusplus } #endif #endif /* error.h */ gss-1.0.2/src/gl/string.in.h0000644000000000000000000011522411662447025012466 00000000000000/* A GNU-like . Copyright (C) 1995-1996, 2001-2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _@GUARD_PREFIX@_STRING_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* NetBSD 5.0 mis-defines NULL. */ #include /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* NetBSD 5.0 declares strsignal in , not in . */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # include #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif /* Return the first instance of C within N bytes of S, or NULL. */ #if @GNULIB_MEMCHR@ # if @REPLACE_MEMCHR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memchr rpl_memchr # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else # if ! @HAVE_MEMCHR@ _GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const void * std::memchr (const void *, int, size_t); } extern "C++" { void * std::memchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memchr, void *, (void const *__s, int __c, size_t __n), void const *, (void const *__s, int __c, size_t __n)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n)); # else _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK # undef memchr /* Assume memchr is always declared. */ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " "use gnulib module memchr for portability" ); #endif /* Return the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_MEMMEM@ # if @REPLACE_MEMMEM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memmem rpl_memmem # endif _GL_FUNCDECL_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # else # if ! @HAVE_DECL_MEMMEM@ _GL_FUNCDECL_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # endif _GL_CXXALIASWARN (memmem); #elif defined GNULIB_POSIXCHECK # undef memmem # if HAVE_RAW_DECL_MEMMEM _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " "use gnulib module memmem-simple for portability, " "and module memmem for speed" ); # endif #endif /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ #if @GNULIB_MEMPCPY@ # if ! @HAVE_MEMPCPY@ _GL_FUNCDECL_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); _GL_CXXALIASWARN (mempcpy); #elif defined GNULIB_POSIXCHECK # undef mempcpy # if HAVE_RAW_DECL_MEMPCPY _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " "use gnulib module mempcpy for portability"); # endif #endif /* Search backwards through a block for a byte (specified as an int). */ #if @GNULIB_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } extern "C++" { void * std::memrchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memrchr, void *, (void const *, int, size_t), void const *, (void const *, int, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); # else _GL_CXXALIASWARN (memrchr); # endif #elif defined GNULIB_POSIXCHECK # undef memrchr # if HAVE_RAW_DECL_MEMRCHR _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " "use gnulib module memrchr for portability"); # endif #endif /* Find the first occurrence of C in S. More efficient than memchr(S,C,N), at the expense of undefined behavior if C does not occur within N bytes. */ #if @GNULIB_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::rawmemchr (const void *, int); } extern "C++" { void * std::rawmemchr (void *, int); } */ _GL_CXXALIAS_SYS_CAST2 (rawmemchr, void *, (void const *__s, int __c_in), void const *, (void const *__s, int __c_in)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); # else _GL_CXXALIASWARN (rawmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef rawmemchr # if HAVE_RAW_DECL_RAWMEMCHR _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " "use gnulib module rawmemchr for portability"); # endif #endif /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ #if @GNULIB_STPCPY@ # if ! @HAVE_STPCPY@ _GL_FUNCDECL_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); _GL_CXXALIASWARN (stpcpy); #elif defined GNULIB_POSIXCHECK # undef stpcpy # if HAVE_RAW_DECL_STPCPY _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " "use gnulib module stpcpy for portability"); # endif #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ #if @GNULIB_STPNCPY@ # if @REPLACE_STPNCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpncpy # define stpncpy rpl_stpncpy # endif _GL_FUNCDECL_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # else # if ! @HAVE_STPNCPY@ _GL_FUNCDECL_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # endif _GL_CXXALIASWARN (stpncpy); #elif defined GNULIB_POSIXCHECK # undef stpncpy # if HAVE_RAW_DECL_STPNCPY _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " "use gnulib module stpncpy for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ _GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " "in some multibyte locales - " "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ #if @GNULIB_STRCHRNUL@ # if @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * std::strchrnul (const char *, int); } extern "C++" { char * std::strchrnul (char *, int); } */ _GL_CXXALIAS_SYS_CAST2 (strchrnul, char *, (char const *__s, int __c_in), char const *, (char const *__s, int __c_in)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); # else _GL_CXXALIASWARN (strchrnul); # endif #elif defined GNULIB_POSIXCHECK # undef strchrnul # if HAVE_RAW_DECL_STRCHRNUL _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " "use gnulib module strchrnul for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_STRDUP@ # if @REPLACE_STRDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup rpl_strdup # endif _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # if !(@HAVE_DECL_STRDUP@ || defined strdup) _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #elif defined GNULIB_POSIXCHECK # undef strdup # if HAVE_RAW_DECL_STRDUP _GL_WARN_ON_USE (strdup, "strdup is unportable - " "use gnulib module strdup for portability"); # endif #endif /* Append no more than N characters from SRC onto DEST. */ #if @GNULIB_STRNCAT@ # if @REPLACE_STRNCAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strncat # define strncat rpl_strncat # endif _GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); # endif _GL_CXXALIASWARN (strncat); #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT _GL_WARN_ON_USE (strncat, "strncat is unportable - " "use gnulib module strncat for portability"); # endif #endif /* Return a newly allocated copy of at most N bytes of STRING. */ #if @GNULIB_STRNDUP@ # if @REPLACE_STRNDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strndup # define strndup rpl_strndup # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n)); # else # if ! @HAVE_DECL_STRNDUP@ _GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n)); # endif _GL_CXXALIASWARN (strndup); #elif defined GNULIB_POSIXCHECK # undef strndup # if HAVE_RAW_DECL_STRNDUP _GL_WARN_ON_USE (strndup, "strndup is unportable - " "use gnulib module strndup for portability"); # endif #endif /* Find the length (number of bytes) of STRING, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many bytes, return MAXLEN. */ #if @GNULIB_STRNLEN@ # if @REPLACE_STRNLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strnlen # define strnlen rpl_strnlen # endif _GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)); # endif _GL_CXXALIASWARN (strnlen); #elif defined GNULIB_POSIXCHECK # undef strnlen # if HAVE_RAW_DECL_STRNLEN _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " "use gnulib module strnlen for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strcspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strcspn /* Assume strcspn is always declared. */ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " "in multibyte locales - " "use mbscspn if you care about internationalization"); #endif /* Find the first occurrence in S of any character in ACCEPT. */ #if @GNULIB_STRPBRK@ # if ! @HAVE_STRPBRK@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const char * strpbrk (const char *, const char *); } extern "C++" { char * strpbrk (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strpbrk, char *, (char const *__s, char const *__accept), const char *, (char const *__s, char const *__accept)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept)); # else _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK /* strpbrk() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk _GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " "in multibyte locales - " "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK _GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " "use gnulib module strpbrk for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it cannot work with multibyte strings. */ # undef strspn /* Assume strspn is always declared. */ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " "in multibyte locales - " "use mbsspn if you care about internationalization"); #endif #if defined GNULIB_POSIXCHECK /* strrchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ _GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " "in some multibyte locales - " "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next char after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of strtok() that is multithread-safe and supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strtok_r(). */ #if @GNULIB_STRSEP@ # if ! @HAVE_STRSEP@ _GL_FUNCDECL_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim)); _GL_CXXALIASWARN (strsep); # if defined GNULIB_POSIXCHECK # undef strsep _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " "in multibyte locales - " "use mbssep if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strsep # if HAVE_RAW_DECL_STRSEP _GL_WARN_ON_USE (strsep, "strsep is unportable - " "use gnulib module strsep for portability"); # endif #endif #if @GNULIB_STRSTR@ # if @REPLACE_STRSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strstr rpl_strstr # endif _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); # else /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strstr (const char *, const char *); } extern "C++" { char * strstr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strstr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK /* strstr() does not work with multibyte strings if the locale encoding is different from UTF-8: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strstr /* Assume strstr is always declared. */ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " "work correctly on character strings in most " "multibyte locales - " "use mbsstr if you care about internationalization, " "or use strstr if you care about speed"); #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ #if @GNULIB_STRCASESTR@ # if @REPLACE_STRCASESTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strcasestr rpl_strcasestr # endif _GL_FUNCDECL_RPL (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strcasestr, char *, (const char *haystack, const char *needle)); # else # if ! @HAVE_STRCASESTR@ _GL_FUNCDECL_SYS (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strcasestr (const char *, const char *); } extern "C++" { char * strcasestr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strcasestr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); _GL_CXXALIASWARN1 (strcasestr, const char *, (const char *haystack, const char *needle)); # else _GL_CXXALIASWARN (strcasestr); # endif #elif defined GNULIB_POSIXCHECK /* strcasestr() does not work with multibyte strings: It is a glibc extension, and glibc implements it only for unibyte locales. */ # undef strcasestr # if HAVE_RAW_DECL_STRCASESTR _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " "strings in multibyte locales - " "use mbscasestr if you care about " "internationalization, or use c-strcasestr if you want " "a locale independent function"); # endif #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: http://www.opengroup.org/susv3xsh/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strsep(). */ #if @GNULIB_STRTOK_R@ # if @REPLACE_STRTOK_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtok_r # define strtok_r rpl_strtok_r # endif _GL_FUNCDECL_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # else # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # undef strtok_r # endif # if ! @HAVE_DECL_STRTOK_R@ _GL_FUNCDECL_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # endif _GL_CXXALIASWARN (strtok_r); # if defined GNULIB_POSIXCHECK _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " "strings in multibyte locales - " "use mbstok_r if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strtok_r # if HAVE_RAW_DECL_STRTOK_R _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " "use gnulib module strtok_r for portability"); # endif #endif /* The following functions are not specified by POSIX. They are gnulib extensions. */ #if @GNULIB_MBSLEN@ /* Return the number of multibyte characters in the character string STRING. This considers multibyte characters, unlike strlen, which counts bytes. */ # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ # undef mbslen # endif # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbslen rpl_mbslen # endif _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); # endif _GL_CXXALIASWARN (mbslen); #endif #if @GNULIB_MBSNLEN@ /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) _GL_ARG_NONNULL ((1)); #endif #if @GNULIB_MBSCHR@ /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbschr); #endif #if @GNULIB_MBSRCHR@ /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strrchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbsrchr); #endif #if @GNULIB_MBSSTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. Unlike strstr(), this function works correctly in multibyte locales with encodings different from UTF-8. */ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASECMP@ /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! Unlike strcasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSNCASECMP@ /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! Unlike strncasecmp(), this function works correctly in multibyte locales. But beware that N is not a byte count but a character count! */ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPCASECMP@ /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! Unlike strncasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASESTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! Unlike strcasestr(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCSPN@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strcspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPBRK@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. Unlike strpbrk(), this function works correctly in multibyte locales. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); # else _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); # endif _GL_CXXALIASWARN (mbspbrk); #endif #if @GNULIB_MBSSPN@ /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSSEP@ /* Search the next delimiter (multibyte character listed in the character string DELIM) starting at the character string *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next multibyte character after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of mbstok_r() that supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbstok_r(). */ _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. If STRING is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = mbstok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbssep(). */ _GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif /* Map any int, typically from errno, into an error message. */ #if @GNULIB_STRERROR@ # if @REPLACE_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror # define strerror rpl_strerror # endif _GL_FUNCDECL_RPL (strerror, char *, (int)); _GL_CXXALIAS_RPL (strerror, char *, (int)); # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif _GL_CXXALIASWARN (strerror); #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ _GL_WARN_ON_USE (strerror, "strerror is unportable - " "use gnulib module strerror to guarantee non-NULL result"); #endif /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #endif #if @GNULIB_STRSIGNAL@ # if @REPLACE_STRSIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strsignal rpl_strsignal # endif _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); # else # if ! @HAVE_DECL_STRSIGNAL@ _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is 'const char *'. */ _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); # endif _GL_CXXALIASWARN (strsignal); #elif defined GNULIB_POSIXCHECK # undef strsignal # if HAVE_RAW_DECL_STRSIGNAL _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " "use gnulib module strsignal for portability"); # endif #endif #if @GNULIB_STRVERSCMP@ # if !@HAVE_STRVERSCMP@ _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); _GL_CXXALIASWARN (strverscmp); #elif defined GNULIB_POSIXCHECK # undef strverscmp # if HAVE_RAW_DECL_STRVERSCMP _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " "use gnulib module strverscmp for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ gss-1.0.2/src/gl/error.c0000644000000000000000000002406011662447025011674 00000000000000/* Error handler for noninteractive utilities Copyright (C) 1990-1998, 2000-2007, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by David MacKenzie . */ #if !_LIBC # include #endif #include "error.h" #include #include #include #include #if !_LIBC && ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) #endif #ifdef _LIBC # include # include # include # include # define mbsrtowcs __mbsrtowcs #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifndef _ # define _(String) String #endif /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ void (*error_print_progname) (void); /* This variable is incremented each time `error' is called. */ unsigned int error_message_count; #ifdef _LIBC /* In the GNU C library, there is a predefined variable for this. */ # define program_name program_invocation_name # include # include # include /* In GNU libc we want do not want to use the common name `error' directly. Instead make it a weak alias. */ extern void __error (int status, int errnum, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) __attribute__ ((__format__ (__printf__, 5, 6)));; # define error __error # define error_at_line __error_at_line # include # define fflush(s) INTUSE(_IO_fflush) (s) # undef putc # define putc(c, fp) INTUSE(_IO_putc) (c, fp) # include #else /* not _LIBC */ # include # include # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the Win32 API functions. */ # define WIN32_LEAN_AND_MEAN # include /* Get _get_osfhandle. */ # include "msvc-nothrow.h" # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl # if !HAVE_DECL_STRERROR_R # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P char *strerror_r (); # else int strerror_r (); # endif # endif /* The calling program should define program_name and set it to the name of the executing program. */ extern char *program_name; # if HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # endif /* HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static inline int is_open (int fd) { # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On Win32: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support F_GETFL. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; # else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); # endif } #endif static inline void flush_stdout (void) { #if !_LIBC int stdout_fd; # if GNULIB_FREOPEN_SAFER /* Use of gnulib's freopen-safer module normally ensures that fileno (stdout) == 1 whenever stdout is open. */ stdout_fd = STDOUT_FILENO; # else /* POSIX states that fileno (stdout) after fclose is unspecified. But in practice it is not a problem, because stdout is statically allocated and the fd of a FILE stream is stored as a field in its allocated memory. */ stdout_fd = fileno (stdout); # endif /* POSIX states that fflush (stdout) after fclose is unspecified; it is safe in glibc, but not on all other platforms. fflush (NULL) is always defined, but too draconian. */ if (0 <= stdout_fd && is_open (stdout_fd)) #endif fflush (stdout); } static void print_errno_message (int errnum) { char const *s; #if defined HAVE_STRERROR_R || _LIBC char errbuf[1024]; # if STRERROR_R_CHAR_P || _LIBC s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) s = errbuf; else s = 0; # endif #else s = strerror (errnum); #endif #if !_LIBC if (! s) s = _("Unknown system error"); #endif #if _LIBC __fxprintf (NULL, ": %s", s); #else fprintf (stderr, ": %s", s); #endif } static void error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC if (_IO_fwide (stderr, 0) > 0) { # define ALLOCA_LIMIT 2000 size_t len = strlen (message) + 1; wchar_t *wmessage = NULL; mbstate_t st; size_t res; const char *tmp; bool use_malloc = false; while (1) { if (__libc_use_alloca (len * sizeof (wchar_t))) wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); else { if (!use_malloc) wmessage = NULL; wchar_t *p = (wchar_t *) realloc (wmessage, len * sizeof (wchar_t)); if (p == NULL) { free (wmessage); fputws_unlocked (L"out of memory\n", stderr); return; } wmessage = p; use_malloc = true; } memset (&st, '\0', sizeof (st)); tmp = message; res = mbsrtowcs (wmessage, &tmp, len, &st); if (res != len) break; if (__builtin_expect (len >= SIZE_MAX / 2, 0)) { /* This really should not happen if everything is fine. */ res = (size_t) -1; break; } len *= 2; } if (res == (size_t) -1) { /* The string cannot be converted. */ if (use_malloc) { free (wmessage); use_malloc = false; } wmessage = (wchar_t *) L"???"; } __vfwprintf (stderr, wmessage, args); if (use_malloc) free (wmessage); } else #endif vfprintf (stderr, message, args); va_end (args); ++error_message_count; if (errnum) print_errno_message (errnum); #if _LIBC __fxprintf (NULL, "\n"); #else putc ('\n', stderr); #endif fflush (stderr); if (status) exit (status); } /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. If ERRNUM is nonzero, print its corresponding system error message. Exit with status STATUS if it is nonzero. */ void error (int status, int errnum, const char *message, ...) { va_list args; #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s: ", program_name); #else fprintf (stderr, "%s: ", program_name); #endif } va_start (args, message); error_tail (status, errnum, message, args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; void error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { va_list args; if (error_one_per_line) { static const char *old_file_name; static unsigned int old_line_number; if (old_line_number == line_number && (file_name == old_file_name || strcmp (old_file_name, file_name) == 0)) /* Simply return and print nothing. */ return; old_file_name = file_name; old_line_number = line_number; } #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s:", program_name); #else fprintf (stderr, "%s:", program_name); #endif } #if _LIBC __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ", file_name, line_number); #else fprintf (stderr, file_name != NULL ? "%s:%d: " : " ", file_name, line_number); #endif va_start (args, message); error_tail (status, errnum, message, args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } #ifdef _LIBC /* Make the weak alias. */ # undef error # undef error_at_line weak_alias (__error, error) weak_alias (__error_at_line, error_at_line) #endif gss-1.0.2/src/gl/strerror-override.h0000644000000000000000000000350011662447025014243 00000000000000/* strerror-override.h --- POSIX compatible system error routine Copyright (C) 2010-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H # include # include /* Reasonable buffer size that should never trigger ERANGE; if this proves too small, we intentionally abort(), to remind us to fix this value. */ # define STACKBUF_LEN 256 /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ # if REPLACE_STRERROR_0 \ || GNULIB_defined_ESOCK \ || GNULIB_defined_EWINSOCK \ || GNULIB_defined_ENOMSG \ || GNULIB_defined_EIDRM \ || GNULIB_defined_ENOLINK \ || GNULIB_defined_EPROTO \ || GNULIB_defined_EMULTIHOP \ || GNULIB_defined_EBADMSG \ || GNULIB_defined_EOVERFLOW \ || GNULIB_defined_ENOTSUP \ || GNULIB_defined_ENETRESET \ || GNULIB_defined_ECONNABORTED \ || GNULIB_defined_ESTALE \ || GNULIB_defined_EDQUOT \ || GNULIB_defined_ECANCELED extern const char *strerror_override (int errnum); # else # define strerror_override(ignored) NULL # endif #endif /* _GL_STRERROR_OVERRIDE_H */ gss-1.0.2/src/gl/version-etc.c0000644000000000000000000002176511662447025013012 00000000000000/* Print --version and bug-reporting information in a consistent format. Copyright (C) 1999-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Written by Jim Meyering. */ #include /* Specification. */ #include "version-etc.h" #include #include #include #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #include "gettext.h" #define _(msgid) gettext (msgid) /* If you use AM_INIT_AUTOMAKE's no-define option, PACKAGE is not defined. Use PACKAGE_TARNAME instead. */ #if ! defined PACKAGE && defined PACKAGE_TARNAME # define PACKAGE PACKAGE_TARNAME #endif enum { COPYRIGHT_YEAR = 2011 }; /* The three functions below display the --version information the standard way. If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of the program. The formats are therefore: PACKAGE VERSION or COMMAND_NAME (PACKAGE) VERSION. The functions differ in the way they are passed author names. */ /* Display the --version information the standard way. Author names are given in the array AUTHORS. N_AUTHORS is the number of elements in the array. */ void version_etc_arn (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors, size_t n_authors) { if (command_name) fprintf (stream, "%s (%s) %s\n", command_name, package, version); else fprintf (stream, "%s %s\n", package, version); #ifdef PACKAGE_PACKAGER # ifdef PACKAGE_PACKAGER_VERSION fprintf (stream, _("Packaged by %s (%s)\n"), PACKAGE_PACKAGER, PACKAGE_PACKAGER_VERSION); # else fprintf (stream, _("Packaged by %s\n"), PACKAGE_PACKAGER); # endif #endif /* TRANSLATORS: Translate "(C)" to the copyright symbol (C-in-a-circle), if this symbol is available in the user's locale. Otherwise, do not translate "(C)"; leave it as-is. */ fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR); fputs (_("\ \n\ License GPLv3+: GNU GPL version 3 or later .\n\ This is free software: you are free to change and redistribute it.\n\ There is NO WARRANTY, to the extent permitted by law.\n\ \n\ "), stream); switch (n_authors) { case 0: /* The caller must provide at least one author name. */ abort (); case 1: /* TRANSLATORS: %s denotes an author name. */ fprintf (stream, _("Written by %s.\n"), authors[0]); break; case 2: /* TRANSLATORS: Each %s denotes an author name. */ fprintf (stream, _("Written by %s and %s.\n"), authors[0], authors[1]); break; case 3: /* TRANSLATORS: Each %s denotes an author name. */ fprintf (stream, _("Written by %s, %s, and %s.\n"), authors[0], authors[1], authors[2]); break; case 4: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"), authors[0], authors[1], authors[2], authors[3]); break; case 5: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4]); break; case 6: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5]); break; case 7: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6]); break; case 8: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("\ Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6], authors[7]); break; case 9: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("\ Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6], authors[7], authors[8]); break; default: /* 10 or more authors. Use an abbreviation, since the human reader will probably not want to read the entire list anyway. */ /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("\ Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6], authors[7], authors[8]); break; } } /* Display the --version information the standard way. See the initial comment to this module, for more information. Author names are given in the NULL-terminated array AUTHORS. */ void version_etc_ar (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors) { size_t n_authors; for (n_authors = 0; authors[n_authors]; n_authors++) ; version_etc_arn (stream, command_name, package, version, authors, n_authors); } /* Display the --version information the standard way. See the initial comment to this module, for more information. Author names are given in the NULL-terminated va_list AUTHORS. */ void version_etc_va (FILE *stream, const char *command_name, const char *package, const char *version, va_list authors) { size_t n_authors; const char *authtab[10]; for (n_authors = 0; n_authors < 10 && (authtab[n_authors] = va_arg (authors, const char *)) != NULL; n_authors++) ; version_etc_arn (stream, command_name, package, version, authtab, n_authors); } /* Display the --version information the standard way. If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of the program. The formats are therefore: PACKAGE VERSION or COMMAND_NAME (PACKAGE) VERSION. The authors names are passed as separate arguments, with an additional NULL argument at the end. */ void version_etc (FILE *stream, const char *command_name, const char *package, const char *version, /* const char *author1, ...*/ ...) { va_list authors; va_start (authors, version); version_etc_va (stream, command_name, package, version, authors); va_end (authors); } void emit_bug_reporting_address (void) { /* TRANSLATORS: The placeholder indicates the bug-reporting address for this package. Please add _another line_ saying "Report translation bugs to <...>\n" with the address for translation bugs (typically your translation team's web or email address). */ printf (_("\nReport bugs to: %s\n"), PACKAGE_BUGREPORT); #ifdef PACKAGE_PACKAGER_BUG_REPORTS printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER, PACKAGE_PACKAGER_BUG_REPORTS); #endif #ifdef PACKAGE_URL printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); #else printf (_("%s home page: \n"), PACKAGE_NAME, PACKAGE); #endif fputs (_("General help using GNU software: \n"), stdout); } gss-1.0.2/src/gl/errno.in.h0000644000000000000000000001417711662447025012312 00000000000000/* A POSIX-like . Copyright (C) 2008-2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _@GUARD_PREFIX@_ERRNO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_ERRNO_H@ #ifndef _@GUARD_PREFIX@_ERRNO_H #define _@GUARD_PREFIX@_ERRNO_H /* On native Windows platforms, many macros are not defined. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* These are the same values as defined by MSVC 10, for interoperability. */ # ifndef ENOMSG # define ENOMSG 122 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 111 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 121 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 134 # define GNULIB_defined_EPROTO 1 # endif # ifndef EBADMSG # define EBADMSG 104 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 132 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 129 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 117 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 106 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ECANCELED # define ECANCELED 105 # define GNULIB_defined_ECANCELED 1 # endif # ifndef EINPROGRESS # define EINPROGRESS 112 # define EALREADY 103 # define ENOTSOCK 128 # define EDESTADDRREQ 109 # define EMSGSIZE 115 # define EPROTOTYPE 136 # define ENOPROTOOPT 123 # define EPROTONOSUPPORT 135 # define EOPNOTSUPP 130 # define EAFNOSUPPORT 102 # define EADDRINUSE 100 # define EADDRNOTAVAIL 101 # define ENETDOWN 116 # define ENETUNREACH 118 # define ECONNRESET 108 # define ENOBUFS 119 # define EISCONN 113 # define ENOTCONN 126 # define ETIMEDOUT 138 # define ECONNREFUSED 107 # define ELOOP 114 # define EHOSTUNREACH 110 # define EWOULDBLOCK 140 # define ETXTBSY 139 # define ENODATA 120 /* not required by POSIX */ # define ENOSR 124 /* not required by POSIX */ # define ENOSTR 125 /* not required by POSIX */ # define ENOTRECOVERABLE 127 /* not required by POSIX */ # define EOWNERDEAD 133 /* not required by POSIX */ # define ETIME 137 /* not required by POSIX */ # define EOTHER 131 /* not required by POSIX */ # define GNULIB_defined_ESOCK 1 # endif /* These are intentionally the same values as the WSA* error numbers, defined in . */ # define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ # define EPFNOSUPPORT 10046 /* not required by POSIX */ # define ESHUTDOWN 10058 /* not required by POSIX */ # define ETOOMANYREFS 10059 /* not required by POSIX */ # define EHOSTDOWN 10064 /* not required by POSIX */ # define EPROCLIM 10067 /* not required by POSIX */ # define EUSERS 10068 /* not required by POSIX */ # define EDQUOT 10069 # define ESTALE 10070 # define EREMOTE 10071 /* not required by POSIX */ # define GNULIB_defined_EWINSOCK 1 # endif /* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ # if @EMULTIHOP_HIDDEN@ # define EMULTIHOP @EMULTIHOP_VALUE@ # define GNULIB_defined_EMULTIHOP 1 # endif # if @ENOLINK_HIDDEN@ # define ENOLINK @ENOLINK_VALUE@ # define GNULIB_defined_ENOLINK 1 # endif # if @EOVERFLOW_HIDDEN@ # define EOVERFLOW @EOVERFLOW_VALUE@ # define GNULIB_defined_EOVERFLOW 1 # endif /* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. Likewise, on NonStop Kernel, EDQUOT is not defined. Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. Note: When one of these systems defines some of these macros some day, binaries will have to be recompiled so that they recognizes the new errno values from the system. */ # ifndef ENOMSG # define ENOMSG 2000 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 2001 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 2002 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 2003 # define GNULIB_defined_EPROTO 1 # endif # ifndef EMULTIHOP # define EMULTIHOP 2004 # define GNULIB_defined_EMULTIHOP 1 # endif # ifndef EBADMSG # define EBADMSG 2005 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 2006 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 2007 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 2011 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 2012 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ESTALE # define ESTALE 2009 # define GNULIB_defined_ESTALE 1 # endif # ifndef EDQUOT # define EDQUOT 2010 # define GNULIB_defined_EDQUOT 1 # endif # ifndef ECANCELED # define ECANCELED 2008 # define GNULIB_defined_ECANCELED 1 # endif #endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */ gss-1.0.2/src/gl/strerror.c0000644000000000000000000000404311662447025012424 00000000000000/* strerror.c --- POSIX compatible system error routine Copyright (C) 2007-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include /* Specification. */ #include #include #include #include #include #include "intprops.h" #include "strerror-override.h" #include "verify.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf char * strerror (int n) #undef strerror { static char buf[STACKBUF_LEN]; size_t len; /* Cast away const, due to the historical signature of strerror; callers should not be modifying the string. */ const char *msg = strerror_override (n); if (msg) return (char *) msg; msg = strerror (n); /* Our strerror_r implementation might use the system's strerror buffer, so all other clients of strerror have to see the error copied into a buffer that we manage. This is not thread-safe, even if the system strerror is, but portable programs shouldn't be using strerror if they care about thread-safety. */ if (!msg || !*msg) { static char const fmt[] = "Unknown error %d"; verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); sprintf (buf, fmt, n); errno = EINVAL; return buf; } /* Fix STACKBUF_LEN if this ever aborts. */ len = strlen (msg); if (sizeof buf <= len) abort (); return memcpy (buf, msg, len + 1); } gss-1.0.2/src/gl/getopt1.c0000644000000000000000000001055211662447025012127 00000000000000/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2011 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifdef _LIBC # include #else # include # include "getopt.h" #endif #include "getopt_int.h" #include /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include #endif #ifndef NULL #define NULL 0 #endif int getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 0, 0); } int _getopt_long_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 0, d, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 1, 0); } int _getopt_long_only_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 1, d, 0); } #ifdef TEST #include int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static const struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case 'd': printf ("option d with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ gss-1.0.2/src/gss_cmd.c0000644000000000000000000003363511663554727011601 00000000000000/* File autogenerated by gengetopt version 2.22.4 generated with the following command: gengetopt --no-handle-help --no-handle-version --input gss.ggo --file-name gss_cmd The developers of gengetopt consider the fixed text that goes in all gengetopt output files to be in the public domain: we make no copyright claims on it. */ /* If we use autoconf. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #ifndef FIX_UNUSED #define FIX_UNUSED(X) (void) (X) /* avoid warnings for unused params */ #endif #include #include "gss_cmd.h" const char *gengetopt_args_info_purpose = "Command line interface to GSS, used to explain error codes."; const char *gengetopt_args_info_usage = "Usage: " CMDLINE_PARSER_PACKAGE " [OPTIONS]..."; const char *gengetopt_args_info_description = ""; const char *gengetopt_args_info_help[] = { " -h, --help Print help and exit", " -V, --version Print version and exit", " -m, --major=LONG See gss.c for doc string", " -l, --list-mechanisms See gss.c for doc string", " -q, --quiet Silent operation (default=off)", 0 }; typedef enum {ARG_NO , ARG_FLAG , ARG_LONG } cmdline_parser_arg_type; static void clear_given (struct gengetopt_args_info *args_info); static void clear_args (struct gengetopt_args_info *args_info); static int cmdline_parser_internal (int argc, char **argv, struct gengetopt_args_info *args_info, struct cmdline_parser_params *params, const char *additional_error); static char * gengetopt_strdup (const char *s); static void clear_given (struct gengetopt_args_info *args_info) { args_info->help_given = 0 ; args_info->version_given = 0 ; args_info->major_given = 0 ; args_info->list_mechanisms_given = 0 ; args_info->quiet_given = 0 ; } static void clear_args (struct gengetopt_args_info *args_info) { FIX_UNUSED (args_info); args_info->major_orig = NULL; args_info->quiet_flag = 0; } static void init_args_info(struct gengetopt_args_info *args_info) { args_info->help_help = gengetopt_args_info_help[0] ; args_info->version_help = gengetopt_args_info_help[1] ; args_info->major_help = gengetopt_args_info_help[2] ; args_info->list_mechanisms_help = gengetopt_args_info_help[3] ; args_info->quiet_help = gengetopt_args_info_help[4] ; } void cmdline_parser_print_version (void) { printf ("%s %s\n", (strlen(CMDLINE_PARSER_PACKAGE_NAME) ? CMDLINE_PARSER_PACKAGE_NAME : CMDLINE_PARSER_PACKAGE), CMDLINE_PARSER_VERSION); } static void print_help_common(void) { cmdline_parser_print_version (); if (strlen(gengetopt_args_info_purpose) > 0) printf("\n%s\n", gengetopt_args_info_purpose); if (strlen(gengetopt_args_info_usage) > 0) printf("\n%s\n", gengetopt_args_info_usage); printf("\n"); if (strlen(gengetopt_args_info_description) > 0) printf("%s\n\n", gengetopt_args_info_description); } void cmdline_parser_print_help (void) { int i = 0; print_help_common(); while (gengetopt_args_info_help[i]) printf("%s\n", gengetopt_args_info_help[i++]); } void cmdline_parser_init (struct gengetopt_args_info *args_info) { clear_given (args_info); clear_args (args_info); init_args_info (args_info); } void cmdline_parser_params_init(struct cmdline_parser_params *params) { if (params) { params->override = 0; params->initialize = 1; params->check_required = 1; params->check_ambiguity = 0; params->print_errors = 1; } } struct cmdline_parser_params * cmdline_parser_params_create(void) { struct cmdline_parser_params *params = (struct cmdline_parser_params *)malloc(sizeof(struct cmdline_parser_params)); cmdline_parser_params_init(params); return params; } static void free_string_field (char **s) { if (*s) { free (*s); *s = 0; } } static void cmdline_parser_release (struct gengetopt_args_info *args_info) { free_string_field (&(args_info->major_orig)); clear_given (args_info); } static void write_into_file(FILE *outfile, const char *opt, const char *arg, const char *values[]) { FIX_UNUSED (values); if (arg) { fprintf(outfile, "%s=\"%s\"\n", opt, arg); } else { fprintf(outfile, "%s\n", opt); } } int cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info) { int i = 0; if (!outfile) { fprintf (stderr, "%s: cannot dump options to stream\n", CMDLINE_PARSER_PACKAGE); return EXIT_FAILURE; } if (args_info->help_given) write_into_file(outfile, "help", 0, 0 ); if (args_info->version_given) write_into_file(outfile, "version", 0, 0 ); if (args_info->major_given) write_into_file(outfile, "major", args_info->major_orig, 0); if (args_info->list_mechanisms_given) write_into_file(outfile, "list-mechanisms", 0, 0 ); if (args_info->quiet_given) write_into_file(outfile, "quiet", 0, 0 ); i = EXIT_SUCCESS; return i; } int cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info) { FILE *outfile; int i = 0; outfile = fopen(filename, "w"); if (!outfile) { fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename); return EXIT_FAILURE; } i = cmdline_parser_dump(outfile, args_info); fclose (outfile); return i; } void cmdline_parser_free (struct gengetopt_args_info *args_info) { cmdline_parser_release (args_info); } /** @brief replacement of strdup, which is not standard */ char * gengetopt_strdup (const char *s) { char *result = 0; if (!s) return result; result = (char*)malloc(strlen(s) + 1); if (result == (char*)0) return (char*)0; strcpy(result, s); return result; } int cmdline_parser (int argc, char **argv, struct gengetopt_args_info *args_info) { return cmdline_parser2 (argc, argv, args_info, 0, 1, 1); } int cmdline_parser_ext (int argc, char **argv, struct gengetopt_args_info *args_info, struct cmdline_parser_params *params) { int result; result = cmdline_parser_internal (argc, argv, args_info, params, 0); if (result == EXIT_FAILURE) { cmdline_parser_free (args_info); exit (EXIT_FAILURE); } return result; } int cmdline_parser2 (int argc, char **argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required) { int result; struct cmdline_parser_params params; params.override = override; params.initialize = initialize; params.check_required = check_required; params.check_ambiguity = 0; params.print_errors = 1; result = cmdline_parser_internal (argc, argv, args_info, ¶ms, 0); if (result == EXIT_FAILURE) { cmdline_parser_free (args_info); exit (EXIT_FAILURE); } return result; } int cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name) { FIX_UNUSED (args_info); FIX_UNUSED (prog_name); return EXIT_SUCCESS; } static char *package_name = 0; /** * @brief updates an option * @param field the generic pointer to the field to update * @param orig_field the pointer to the orig field * @param field_given the pointer to the number of occurrence of this option * @param prev_given the pointer to the number of occurrence already seen * @param value the argument for this option (if null no arg was specified) * @param possible_values the possible values for this option (if specified) * @param default_value the default value (in case the option only accepts fixed values) * @param arg_type the type of this option * @param check_ambiguity @see cmdline_parser_params.check_ambiguity * @param override @see cmdline_parser_params.override * @param no_free whether to free a possible previous value * @param multiple_option whether this is a multiple option * @param long_opt the corresponding long option * @param short_opt the corresponding short option (or '-' if none) * @param additional_error possible further error specification */ static int update_arg(void *field, char **orig_field, unsigned int *field_given, unsigned int *prev_given, char *value, const char *possible_values[], const char *default_value, cmdline_parser_arg_type arg_type, int check_ambiguity, int override, int no_free, int multiple_option, const char *long_opt, char short_opt, const char *additional_error) { char *stop_char = 0; const char *val = value; int found; FIX_UNUSED (field); stop_char = 0; found = 0; if (!multiple_option && prev_given && (*prev_given || (check_ambiguity && *field_given))) { if (short_opt != '-') fprintf (stderr, "%s: `--%s' (`-%c') option given more than once%s\n", package_name, long_opt, short_opt, (additional_error ? additional_error : "")); else fprintf (stderr, "%s: `--%s' option given more than once%s\n", package_name, long_opt, (additional_error ? additional_error : "")); return 1; /* failure */ } FIX_UNUSED (default_value); if (field_given && *field_given && ! override) return 0; if (prev_given) (*prev_given)++; if (field_given) (*field_given)++; if (possible_values) val = possible_values[found]; switch(arg_type) { case ARG_FLAG: *((int *)field) = !*((int *)field); break; case ARG_LONG: if (val) *((long *)field) = (long)strtol (val, &stop_char, 0); break; default: break; }; /* check numeric conversion */ switch(arg_type) { case ARG_LONG: if (val && !(stop_char && *stop_char == '\0')) { fprintf(stderr, "%s: invalid numeric value: %s\n", package_name, val); return 1; /* failure */ } break; default: ; }; /* store the original value */ switch(arg_type) { case ARG_NO: case ARG_FLAG: break; default: if (value && orig_field) { if (no_free) { *orig_field = value; } else { if (*orig_field) free (*orig_field); /* free previous string */ *orig_field = gengetopt_strdup (value); } } }; return 0; /* OK */ } int cmdline_parser_internal ( int argc, char **argv, struct gengetopt_args_info *args_info, struct cmdline_parser_params *params, const char *additional_error) { int c; /* Character of the parsed option. */ int error = 0; struct gengetopt_args_info local_args_info; int override; int initialize; int check_required; int check_ambiguity; package_name = argv[0]; override = params->override; initialize = params->initialize; check_required = params->check_required; check_ambiguity = params->check_ambiguity; if (initialize) cmdline_parser_init (args_info); cmdline_parser_init (&local_args_info); optarg = 0; optind = 0; opterr = params->print_errors; optopt = '?'; while (1) { int option_index = 0; static struct option long_options[] = { { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, { "major", 1, NULL, 'm' }, { "list-mechanisms", 0, NULL, 'l' }, { "quiet", 0, NULL, 'q' }, { 0, 0, 0, 0 } }; c = getopt_long (argc, argv, "hVm:lq", long_options, &option_index); if (c == -1) break; /* Exit from `while (1)' loop. */ switch (c) { case 'h': /* Print help and exit. */ if (update_arg( 0 , 0 , &(args_info->help_given), &(local_args_info.help_given), optarg, 0, 0, ARG_NO, check_ambiguity, override, 0, 0, "help", 'h', additional_error)) goto failure; cmdline_parser_free (&local_args_info); return 0; break; case 'V': /* Print version and exit. */ if (update_arg( 0 , 0 , &(args_info->version_given), &(local_args_info.version_given), optarg, 0, 0, ARG_NO, check_ambiguity, override, 0, 0, "version", 'V', additional_error)) goto failure; cmdline_parser_free (&local_args_info); return 0; break; case 'm': /* See gss.c for doc string. */ if (update_arg( (void *)&(args_info->major_arg), &(args_info->major_orig), &(args_info->major_given), &(local_args_info.major_given), optarg, 0, 0, ARG_LONG, check_ambiguity, override, 0, 0, "major", 'm', additional_error)) goto failure; break; case 'l': /* See gss.c for doc string. */ if (update_arg( 0 , 0 , &(args_info->list_mechanisms_given), &(local_args_info.list_mechanisms_given), optarg, 0, 0, ARG_NO, check_ambiguity, override, 0, 0, "list-mechanisms", 'l', additional_error)) goto failure; break; case 'q': /* Silent operation. */ if (update_arg((void *)&(args_info->quiet_flag), 0, &(args_info->quiet_given), &(local_args_info.quiet_given), optarg, 0, 0, ARG_FLAG, check_ambiguity, override, 1, 0, "quiet", 'q', additional_error)) goto failure; break; case 0: /* Long option with no short option */ case '?': /* Invalid option. */ /* `getopt_long' already printed an error message. */ goto failure; default: /* bug: option not considered. */ fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : "")); abort (); } /* switch */ } /* while */ cmdline_parser_release (&local_args_info); if ( error ) return (EXIT_FAILURE); return 0; failure: cmdline_parser_release (&local_args_info); return (EXIT_FAILURE); } gss-1.0.2/src/Makefile.am0000644000000000000000000000317011546676326012041 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. SUBDIRS = gl AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/gl \ -I$(top_srcdir)/src/gl -I$(top_builddir)/src/gl \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers bin_PROGRAMS = gss gss_SOURCES = gss.c gss_LDADD = ../lib/libgss.la gl/libgnu.la @LTLIBINTL@ libcmd-gss.la gss.c: $(BUILT_SOURCES) BUILT_SOURCES = gss_cmd.c gss_cmd.h MAINTAINERCLEANFILES = $(BUILT_SOURCES) $(BUILT_SOURCES): gss.ggo gengetopt --no-handle-help --no-handle-version \ --input $^ --file-name gss_cmd noinst_LTLIBRARIES = libcmd-gss.la libcmd_gss_la_CFLAGS = libcmd_gss_la_SOURCES = gss.ggo $(BUILT_SOURCES) libcmd_gss_la_LIBADD = gl/libgnu.la # For gettext. datadir = @datadir@ localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ gss-1.0.2/src/gss.c0000644000000000000000000002006611546676457010755 00000000000000/* gss.c --- Command line tool for GSS. * Copyright (C) 2004-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "config.h" #include #include #include /* For gettext. */ #include #include #define _(String) gettext (String) /* Get GSS header. */ #include /* Command line parameter parser via gengetopt. */ #include "gss_cmd.h" /* Gnulib utils. */ #include "progname.h" #include "error.h" #include "version-etc.h" const char version_etc_copyright[] = /* Do *not* mark this string for translation. %s is a copyright symbol suitable for this locale, and %d is the copyright year. */ "Copyright %s %d Simon Josefsson."; /* This feature is available in gcc versions 2.5 and later. */ #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) # define GSS_ATTR_NO_RETRUN #else # define GSS_ATTR_NO_RETRUN __attribute__ ((__noreturn__)) #endif static void usage (int status) GSS_ATTR_NO_RETRUN; static void usage (int status) { if (status != EXIT_SUCCESS) fprintf (stderr, _("Try `%s --help' for more information.\n"), program_name); else { printf (_("\ Usage: %s OPTIONS...\n\ "), program_name); fputs (_("\ Command line interface to GSS, used to explain error codes.\n\ \n\ "), stdout); fputs (_("\ Mandatory arguments to long options are mandatory for short options too.\n\ "), stdout); fputs (_("\ -h, --help Print help and exit.\n\ -V, --version Print version and exit.\n\ -l, --list-mechanisms\n\ List information about supported mechanisms\n\ in a human readable format.\n\ -m, --major=LONG Describe a `major status' error code value.\n\ "), stdout); fputs (_("\ -q, --quiet Silent operation (default=off).\n\ "), stdout); emit_bug_reporting_address (); } exit (status); } static int describe_major (unsigned int quiet, long major) { gss_buffer_desc status_string; OM_uint32 message_context = 0; OM_uint32 maj = 0, min; size_t i; int rc = 0; if (!quiet) { printf (_("GSS-API major status code %ld (0x%lx).\n\n"), major, major); printf (_(" MSB " " LSB\n" " +-----------------+---------------" "--+---------------------------------+\n" " | Calling Error | Routine Error" " | Supplementary Info |\n | ")); for (i = 0; i < 8; i++) printf ("%ld ", (major >> (31 - i)) & 1); printf ("| "); for (i = 0; i < 8; i++) printf ("%ld ", (major >> (23 - i)) & 1); printf ("| "); for (i = 0; i < 16; i++) printf ("%ld ", (major >> (15 - i)) & 1); printf (_("|\n" " +-----------------+---------------" "--+---------------------------------+\n" "Bit 31 24 23 1" "6 15 0\n\n")); } if (GSS_ROUTINE_ERROR (major)) { if (!quiet) printf (_("Masked routine error %ld (0x%lx) shifted " "into %ld (0x%lx):\n"), GSS_ROUTINE_ERROR (major), GSS_ROUTINE_ERROR (major), GSS_ROUTINE_ERROR (major) >> GSS_C_ROUTINE_ERROR_OFFSET, GSS_ROUTINE_ERROR (major) >> GSS_C_ROUTINE_ERROR_OFFSET); message_context = 0; do { maj = gss_display_status (&min, GSS_ROUTINE_ERROR (major), GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string); if (GSS_ERROR (maj)) { error (0, 0, _("displaying status code failed (%d)"), maj); rc = 1; break; } printf ("%.*s\n", (int) status_string.length, (char *) status_string.value); gss_release_buffer (&min, &status_string); } while (message_context); if (!quiet) printf ("\n"); } if (GSS_CALLING_ERROR (major)) { if (!quiet) printf (_("Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n"), GSS_CALLING_ERROR (major), GSS_CALLING_ERROR (major), GSS_CALLING_ERROR (major) >> GSS_C_CALLING_ERROR_OFFSET, GSS_CALLING_ERROR (major) >> GSS_C_CALLING_ERROR_OFFSET); message_context = 0; do { maj = gss_display_status (&min, GSS_CALLING_ERROR (major), GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string); if (GSS_ERROR (maj)) { error (0, 0, _("displaying status code failed (%d)"), maj); rc = 1; break; } printf ("%.*s\n", (int) status_string.length, (char *) status_string.value); gss_release_buffer (&min, &status_string); } while (message_context); if (!quiet) printf ("\n"); } if (GSS_SUPPLEMENTARY_INFO (major)) { if (!quiet) printf (_("Masked supplementary info %ld (0x%lx) shifted " "into %ld (0x%lx):\n"), GSS_SUPPLEMENTARY_INFO (major), GSS_SUPPLEMENTARY_INFO (major), GSS_SUPPLEMENTARY_INFO (major) >> GSS_C_SUPPLEMENTARY_OFFSET, GSS_SUPPLEMENTARY_INFO (major) >> GSS_C_SUPPLEMENTARY_OFFSET); message_context = 0; do { maj = gss_display_status (&min, GSS_SUPPLEMENTARY_INFO (major), GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string); if (GSS_ERROR (maj)) { error (0, 0, _("displaying status code failed (%d)"), maj); rc = 1; break; } printf ("%.*s\n", (int) status_string.length, (char *) status_string.value); gss_release_buffer (&min, &status_string); } while (message_context); if (!quiet) printf ("\n"); } if (major == GSS_S_COMPLETE) printf (_("No error\n")); return rc; } static int list_mechanisms (unsigned quiet) { OM_uint32 maj, min; gss_OID_set mech_set; size_t i; gss_buffer_desc sasl_mech_name; gss_buffer_desc mech_name; gss_buffer_desc mech_description; maj = gss_indicate_mechs (&min, &mech_set); if (GSS_ERROR (maj)) { error (0, 0, _("indicating mechanisms failed (%d)"), maj); return 1; } printf ("Found %lu supported mechanisms.\n", (unsigned long) mech_set->count); for (i = 0; i < mech_set->count; i++) { printf ("\nMechanism %lu:\n", (unsigned long) i); maj = gss_inquire_saslname_for_mech (&min, mech_set->elements++, &sasl_mech_name, &mech_name, &mech_description); if (GSS_ERROR (maj)) { error (0, 0, _("inquiring information about mechanism failed (%d)"), maj); continue; } printf ("\tMechanism name: %.*s\n", (int) mech_name.length, (char *) mech_name.value); printf ("\tMechanism description: %.*s\n", (int) mech_description.length, (char *) mech_description.value); printf ("\tSASL Mechanism name: %.*s\n", (int) sasl_mech_name.length, (char *) sasl_mech_name.value); } return 0; } int main (int argc, char *argv[]) { struct gengetopt_args_info args; int rc = 0; setlocale (LC_ALL, ""); set_program_name (argv[0]); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); if (cmdline_parser (argc, argv, &args) != 0) return 1; if (args.version_given) { version_etc (stdout, "gss", PACKAGE_NAME, VERSION, "Simon Josefsson", (char *) NULL); return EXIT_SUCCESS; } if (args.help_given) usage (EXIT_SUCCESS); else if (args.major_given) rc = describe_major (args.quiet_given, args.major_arg); else if (args.list_mechanisms_given) rc = list_mechanisms (args.quiet_given); else usage (EXIT_SUCCESS); return rc; } gss-1.0.2/src/gss.ggo0000644000000000000000000000214611546676326011301 00000000000000# gss.ggo --- Run gengetopt on this file to produce gss_cmd.*. -*- sh -*- # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. purpose "Command line interface to GSS, used to explain error codes." option "major" m "See gss.c for doc string" long no option "list-mechanisms" l "See gss.c for doc string" no option "quiet" q "Silent operation" flag off gss-1.0.2/src/Makefile.in0000644000000000000000000011055311663554705012052 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = gss$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libcmd_gss_la_DEPENDENCIES = gl/libgnu.la am__objects_1 = libcmd_gss_la-gss_cmd.lo am_libcmd_gss_la_OBJECTS = $(am__objects_1) libcmd_gss_la_OBJECTS = $(am_libcmd_gss_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libcmd_gss_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcmd_gss_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_gss_OBJECTS = gss.$(OBJEXT) gss_OBJECTS = $(am_gss_OBJECTS) gss_DEPENDENCIES = ../lib/libgss.la gl/libgnu.la libcmd-gss.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libcmd_gss_la_SOURCES) $(gss_SOURCES) DIST_SOURCES = $(libcmd_gss_la_SOURCES) $(gss_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ # For gettext. datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = gl AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/gl \ -I$(top_srcdir)/src/gl -I$(top_builddir)/src/gl \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers gss_SOURCES = gss.c gss_LDADD = ../lib/libgss.la gl/libgnu.la @LTLIBINTL@ libcmd-gss.la BUILT_SOURCES = gss_cmd.c gss_cmd.h MAINTAINERCLEANFILES = $(BUILT_SOURCES) noinst_LTLIBRARIES = libcmd-gss.la libcmd_gss_la_CFLAGS = libcmd_gss_la_SOURCES = gss.ggo $(BUILT_SOURCES) libcmd_gss_la_LIBADD = gl/libgnu.la all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libcmd-gss.la: $(libcmd_gss_la_OBJECTS) $(libcmd_gss_la_DEPENDENCIES) $(AM_V_CCLD)$(libcmd_gss_la_LINK) $(libcmd_gss_la_OBJECTS) $(libcmd_gss_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gss$(EXEEXT): $(gss_OBJECTS) $(gss_DEPENDENCIES) @rm -f gss$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gss_OBJECTS) $(gss_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gss.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcmd_gss_la-gss_cmd.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libcmd_gss_la-gss_cmd.lo: gss_cmd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcmd_gss_la_CFLAGS) $(CFLAGS) -MT libcmd_gss_la-gss_cmd.lo -MD -MP -MF $(DEPDIR)/libcmd_gss_la-gss_cmd.Tpo -c -o libcmd_gss_la-gss_cmd.lo `test -f 'gss_cmd.c' || echo '$(srcdir)/'`gss_cmd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcmd_gss_la-gss_cmd.Tpo $(DEPDIR)/libcmd_gss_la-gss_cmd.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gss_cmd.c' object='libcmd_gss_la-gss_cmd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcmd_gss_la_CFLAGS) $(CFLAGS) -c -o libcmd_gss_la-gss_cmd.lo `test -f 'gss_cmd.c' || echo '$(srcdir)/'`gss_cmd.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool clean-noinstLTLIBRARIES ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-binPROGRAMS gss.c: $(BUILT_SOURCES) $(BUILT_SOURCES): gss.ggo gengetopt --no-handle-help --no-handle-version \ --input $^ --file-name gss_cmd # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/doc/0000755000000000000000000000000011663555057010037 500000000000000gss-1.0.2/doc/version.texi0000644000000000000000000000014511663554742012337 00000000000000@set UPDATED 21 November 2011 @set UPDATED-MONTH November 2011 @set EDITION 1.0.2 @set VERSION 1.0.2 gss-1.0.2/doc/texi/0000755000000000000000000000000011663555057011010 500000000000000gss-1.0.2/doc/texi/gss_unwrap.texi0000644000000000000000000000473111663554775014026 00000000000000@subheading gss_unwrap @anchor{gss_unwrap} @deftypefun {OM_uint32} {gss_unwrap} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{input_message_buffer}, gss_buffer_t @var{output_message_buffer}, int * @var{conf_state}, gss_qop_t * @var{qop_state}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message arrived. @var{input_message_buffer}: (buffer, opaque, read) Protected message. @var{output_message_buffer}: (buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to gss_release_buffer(). @var{conf_state}: (boolean, modify, optional) Non-zero - Confidentiality and integrity protection were used. Zero - Integrity service only was used. Specify NULL if not required. @var{qop_state}: (gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required. Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping and unwrapping of zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: The token failed consistency checks. @code{GSS_S_BAD_SIG}: The MIC was incorrect. @code{GSS_S_DUPLICATE_TOKEN}: The token was valid, and contained a correct MIC for the message, but it had already been processed. @code{GSS_S_OLD_TOKEN}: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. @code{GSS_S_UNSEQ_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. @code{GSS_S_GAP_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @end deftypefun gss-1.0.2/doc/texi/msg.c.texi0000644000000000000000000002072711663554773012646 00000000000000@subheading gss_get_mic @anchor{gss_get_mic} @deftypefun {OM_uint32} {gss_get_mic} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, gss_qop_t @var{qop_req}, const gss_buffer_t @var{message_buffer}, gss_buffer_t @var{message_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. @var{qop_req}: (gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP. @var{message_buffer}: (buffer, opaque, read) Message to be protected. @var{message_token}: (buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to gss_release_buffer(). Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support derivation of MICs from zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun @subheading gss_verify_mic @anchor{gss_verify_mic} @deftypefun {OM_uint32} {gss_verify_mic} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{message_buffer}, const gss_buffer_t @var{token_buffer}, gss_qop_t * @var{qop_state}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message arrived. @var{message_buffer}: (buffer, opaque, read) Message to be verified. @var{token_buffer}: (buffer, opaque, read) Token associated with message. @var{qop_state}: (gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required. Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the calculation and verification of MICs over zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: The token failed consistency checks. @code{GSS_S_BAD_SIG}: The MIC was incorrect. @code{GSS_S_DUPLICATE_TOKEN}: The token was valid, and contained a correct MIC for the message, but it had already been processed. @code{GSS_S_OLD_TOKEN}: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. @code{GSS_S_UNSEQ_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. @code{GSS_S_GAP_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @end deftypefun @subheading gss_wrap @anchor{gss_wrap} @deftypefun {OM_uint32} {gss_wrap} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, int @var{conf_req_flag}, gss_qop_t @var{qop_req}, const gss_buffer_t @var{input_message_buffer}, int * @var{conf_state}, gss_buffer_t @var{output_message_buffer}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. @var{conf_req_flag}: (boolean, read) Non-zero - Both confidentiality and integrity services are requested. Zero - Only integrity service is requested. @var{qop_req}: (gss_qop_t, read, optional) Specifies required quality of protection. A mechanism-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP. @var{input_message_buffer}: (buffer, opaque, read) Message to be protected. @var{conf_state}: (boolean, modify, optional) Non-zero - Confidentiality, data origin authentication and integrity services have been applied. Zero - Integrity and data origin services only has been applied. Specify NULL if not required. @var{output_message_buffer}: (buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to gss_release_buffer(). Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping of zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun @subheading gss_unwrap @anchor{gss_unwrap} @deftypefun {OM_uint32} {gss_unwrap} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{input_message_buffer}, gss_buffer_t @var{output_message_buffer}, int * @var{conf_state}, gss_qop_t * @var{qop_state}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message arrived. @var{input_message_buffer}: (buffer, opaque, read) Protected message. @var{output_message_buffer}: (buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to gss_release_buffer(). @var{conf_state}: (boolean, modify, optional) Non-zero - Confidentiality and integrity protection were used. Zero - Integrity service only was used. Specify NULL if not required. @var{qop_state}: (gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required. Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping and unwrapping of zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: The token failed consistency checks. @code{GSS_S_BAD_SIG}: The MIC was incorrect. @code{GSS_S_DUPLICATE_TOKEN}: The token was valid, and contained a correct MIC for the message, but it had already been processed. @code{GSS_S_OLD_TOKEN}: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. @code{GSS_S_UNSEQ_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. @code{GSS_S_GAP_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @end deftypefun gss-1.0.2/doc/texi/gss_release_oid_set.texi0000644000000000000000000000145511663554770015633 00000000000000@subheading gss_release_oid_set @anchor{gss_release_oid_set} @deftypefun {OM_uint32} {gss_release_oid_set} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{set}: (Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted. Free storage associated with a GSSAPI-generated gss_OID_set object. The set parameter must refer to an OID-set that was returned from a GSS-API routine. gss_release_oid_set() will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc. The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.2/doc/texi/gss_display_status.texi0000644000000000000000000000646611663554765015570 00000000000000@subheading gss_display_status @anchor{gss_display_status} @deftypefun {OM_uint32} {gss_display_status} (OM_uint32 * @var{minor_status}, OM_uint32 @var{status_value}, int @var{status_type}, const gss_OID @var{mech_type}, OM_uint32 * @var{message_context}, gss_buffer_t @var{status_string}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{status_value}: (Integer, read) Status value to be converted. @var{status_type}: (Integer, read) GSS_C_GSS_CODE - status_value is a GSS status code. GSS_C_MECH_CODE - status_value is a mechanism status code. @var{mech_type}: (Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default. @var{message_context}: (Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from gss_display_status(), a non-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to gss_display_status(), passing the same status_value, status_type, mech_type, and message_context parameters. @var{status_string}: (buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to gss_release_buffer(). Allows an application to obtain a textual representation of a GSS-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non-zero value in this parameter if there are further messages to extract. The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr: @example OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string; ... message_context = 0; do @{ maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string) fprintf(stderr, "%.*s\n", (int)status_string.length, (char *)status_string.value); gss_release_buffer(&min_status, &status_string); @} while (message_context != 0); @end example Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Indicates that translation in accordance with an unsupported mechanism type was requested. @code{GSS_S_BAD_STATUS}: The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE. @end deftypefun gss-1.0.2/doc/texi/gss_import_name.texi0000644000000000000000000000322611663555001015001 00000000000000@subheading gss_import_name @anchor{gss_import_name} @deftypefun {OM_uint32} {gss_import_name} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{input_name_buffer}, const gss_OID @var{input_name_type}, gss_name_t * @var{output_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name_buffer}: (buffer, octet-string, read) Buffer containing contiguous string name to convert. @var{input_name_type}: (Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism-specific default printable syntax, or an OID recognized by the GSS-API implementation to name a specific namespace. @var{output_name}: (gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Convert a contiguous string name to internal form. In general, the internal name returned (via the @@output_name parameter) will not be an MN; the exception to this is if the @@input_name_type indicates that the contiguous string provided via the @@input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAMETYPE}: The input_name_type was unrecognized. @code{GSS_S_BAD_NAME}: The input_name parameter could not be interpreted as a name of the specified type. @code{GSS_S_BAD_MECH}: The input name-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input-name is not supported. @end deftypefun gss-1.0.2/doc/texi/oid.c.texi0000644000000000000000000000107711663555004012614 00000000000000@subheading gss_oid_equal @anchor{gss_oid_equal} @deftypefun {int} {gss_oid_equal} (gss_const_OID @var{first_oid}, gss_const_OID @var{second_oid}) @var{first_oid}: (Object ID, read) First Object identifier. @var{second_oid}: (Object ID, read) First Object identifier. Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339. Return value: Returns boolean value true when the two OIDs are equal, otherwise false. @end deftypefun gss-1.0.2/doc/texi/gss_duplicate_name.texi0000644000000000000000000000162111663555003015440 00000000000000@subheading gss_duplicate_name @anchor{gss_duplicate_name} @deftypefun {OM_uint32} {gss_duplicate_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{src_name}, gss_name_t * @var{dest_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{src_name}: (gss_name_t, read) Internal name to be duplicated. @var{dest_name}: (gss_name_t, modify) The resultant copy of @@src_name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Create an exact duplicate of the existing internal name @@src_name. The new @@dest_name will be independent of src_name (i.e. @@src_name and @@dest_name must both be released, and the release of one shall not affect the validity of the other). Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The src_name parameter was ill-formed. @end deftypefun gss-1.0.2/doc/texi/gss_canonicalize_name.texi0000644000000000000000000000242611663555003016131 00000000000000@subheading gss_canonicalize_name @anchor{gss_canonicalize_name} @deftypefun {OM_uint32} {gss_canonicalize_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, const gss_OID @var{mech_type}, gss_name_t * @var{output_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The name for which a canonical form is desired. @var{mech_type}: (Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided. @var{output_name}: (gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing @@mech_type as its only member, followed by a call to gss_init_sec_context(), specifying @@mech_type as the authentication mechanism. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.2/doc/texi/gss_release_cred.texi0000644000000000000000000000143311663554764015121 00000000000000@subheading gss_release_cred @anchor{gss_release_cred} @deftypefun {OM_uint32} {gss_release_cred} (OM_uint32 * @var{minor_status}, gss_cred_id_t * @var{cred_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing. Informs GSS-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: Credentials could not be accessed. @end deftypefun gss-1.0.2/doc/texi/gss_inquire_saslname_for_mech.texi0000644000000000000000000000255311663555005017676 00000000000000@subheading gss_inquire_saslname_for_mech @anchor{gss_inquire_saslname_for_mech} @deftypefun {OM_uint32} {gss_inquire_saslname_for_mech} (OM_uint32 * @var{minor_status}, const gss_OID @var{desired_mech}, gss_buffer_t @var{sasl_mech_name}, gss_buffer_t @var{mech_name}, gss_buffer_t @var{mech_description}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{desired_mech}: (OID, read) Identifies the GSS-API mechanism to query. @var{sasl_mech_name}: (buffer, character-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{mech_name}: (buffer, character-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{mech_description}: (buffer, character-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to gss_release_buffer(). Output the SASL mechanism name of a GSS-API mechanism. It also returns a name and description of the mechanism in a user friendly form. Returns: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: The @@desired_mech OID is unsupported. @end deftypefun gss-1.0.2/doc/texi/name.c.texi0000644000000000000000000002520011663555000012747 00000000000000@subheading gss_import_name @anchor{gss_import_name} @deftypefun {OM_uint32} {gss_import_name} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{input_name_buffer}, const gss_OID @var{input_name_type}, gss_name_t * @var{output_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name_buffer}: (buffer, octet-string, read) Buffer containing contiguous string name to convert. @var{input_name_type}: (Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism-specific default printable syntax, or an OID recognized by the GSS-API implementation to name a specific namespace. @var{output_name}: (gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Convert a contiguous string name to internal form. In general, the internal name returned (via the @@output_name parameter) will not be an MN; the exception to this is if the @@input_name_type indicates that the contiguous string provided via the @@input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAMETYPE}: The input_name_type was unrecognized. @code{GSS_S_BAD_NAME}: The input_name parameter could not be interpreted as a name of the specified type. @code{GSS_S_BAD_MECH}: The input name-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input-name is not supported. @end deftypefun @subheading gss_display_name @anchor{gss_display_name} @deftypefun {OM_uint32} {gss_display_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_buffer_t @var{output_name_buffer}, gss_OID * @var{output_name_type}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) Name to be displayed. @var{output_name_buffer}: (buffer, character-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{output_name_type}: (Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required. Allows an application to obtain a textual representation of an opaque internal-form name for display purposes. The syntax of a printable name is defined by the GSS-API implementation. If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer. If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: @@input_name was ill-formed. @end deftypefun @subheading gss_compare_name @anchor{gss_compare_name} @deftypefun {OM_uint32} {gss_compare_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{name1}, const gss_name_t @var{name2}, int * @var{name_equal}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{name1}: (gss_name_t, read) Internal-form name. @var{name2}: (gss_name_t, read) Internal-form name. @var{name_equal}: (boolean, modify) Non-zero - names refer to same entity. Zero - names refer to different entities (strictly, the names are not known to refer to the same identity). Allows an application to compare two internal-form names to determine whether they refer to the same entity. If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAMETYPE}: The two names were of incomparable types. @code{GSS_S_BAD_NAME}: One or both of name1 or name2 was ill-formed. @end deftypefun @subheading gss_release_name @anchor{gss_release_name} @deftypefun {OM_uint32} {gss_release_name} (OM_uint32 * @var{minor_status}, gss_name_t * @var{name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{name}: (gss_name_t, modify) The name to be deleted. Free GSSAPI-allocated storage associated with an internal-form name. The name is set to GSS_C_NO_NAME on successful completion of this call. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The name parameter did not contain a valid name. @end deftypefun @subheading gss_inquire_names_for_mech @anchor{gss_inquire_names_for_mech} @deftypefun {OM_uint32} {gss_inquire_names_for_mech} (OM_uint32 * @var{minor_status}, const gss_OID @var{mechanism}, gss_OID_set * @var{name_types}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{mechanism}: (gss_OID, read) The mechanism to be interrogated. @var{name_types}: (gss_OID_set, modify) Set of name-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to gss_release_oid_set(). Returns the set of nametypes supported by the specified mechanism. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_inquire_mechs_for_name @anchor{gss_inquire_mechs_for_name} @deftypefun {OM_uint32} {gss_inquire_mechs_for_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_OID_set * @var{mech_types}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The name to which the inquiry relates. @var{mech_types}: (gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to gss_release_oid_set(). Returns the set of mechanisms supported by the GSS-API implementation that may be able to process the specified name. Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism-independent GSS-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism-specific routine. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The input_name parameter was ill-formed. @code{GSS_S_BAD_NAMETYPE}: The input_name parameter contained an invalid or unsupported type of name. @end deftypefun @subheading gss_export_name @anchor{gss_export_name} @deftypefun {OM_uint32} {gss_export_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_buffer_t @var{exported_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The MN to be exported. @var{exported_name}: (gss_buffer_t, octet-string, modify) The canonical contiguous string form of @@input_name. Storage associated with this string must freed by the application after use with gss_release_buffer(). To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access-control list). The @@input_name parameter must specify a valid MN (i.e. an internal name generated by gss_accept_sec_context() or by gss_canonicalize_name()). Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NAME_NOT_MN}: The provided internal name was not a mechanism name. @code{GSS_S_BAD_NAME}: The provided internal name was ill-formed. @code{GSS_S_BAD_NAMETYPE}: The internal name was of a type not supported by the GSS-API implementation. @end deftypefun @subheading gss_canonicalize_name @anchor{gss_canonicalize_name} @deftypefun {OM_uint32} {gss_canonicalize_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, const gss_OID @var{mech_type}, gss_name_t * @var{output_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The name for which a canonical form is desired. @var{mech_type}: (Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided. @var{output_name}: (gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing @@mech_type as its only member, followed by a call to gss_init_sec_context(), specifying @@mech_type as the authentication mechanism. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_duplicate_name @anchor{gss_duplicate_name} @deftypefun {OM_uint32} {gss_duplicate_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{src_name}, gss_name_t * @var{dest_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{src_name}: (gss_name_t, read) Internal name to be duplicated. @var{dest_name}: (gss_name_t, modify) The resultant copy of @@src_name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Create an exact duplicate of the existing internal name @@src_name. The new @@dest_name will be independent of src_name (i.e. @@src_name and @@dest_name must both be released, and the release of one shall not affect the validity of the other). Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The src_name parameter was ill-formed. @end deftypefun gss-1.0.2/doc/texi/gss_accept_sec_context.texi0000644000000000000000000002766511663554753016356 00000000000000@subheading gss_accept_sec_context @anchor{gss_accept_sec_context} @deftypefun {OM_uint32} {gss_accept_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, const gss_cred_id_t @var{acceptor_cred_handle}, const gss_buffer_t @var{input_token_buffer}, const gss_channel_bindings_t @var{input_chan_bindings}, gss_name_t * @var{src_name}, gss_OID * @var{mech_type}, gss_buffer_t @var{output_token}, OM_uint32 * @var{ret_flags}, OM_uint32 * @var{time_rec}, gss_cred_id_t * @var{delegated_cred_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once gss_accept_sec_context() has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to gss_delete_sec_context(). @var{acceptor_cred_handle}: (gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned. @var{input_token_buffer}: (buffer, opaque, read) Token obtained from remote application. @var{input_chan_bindings}: (channel bindings, read, optional) Application- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS. @var{src_name}: (gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to gss_release_name(). If not required, specify NULL. @var{mech_type}: (Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read-only by the caller (in particular, it does not need to be freed). If not required, specify NULL. @var{output_token}: (buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non- zero length field is returned, the associated storage must be freed after use by the application with a call to gss_release_buffer(). @var{ret_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{time_rec}: (Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required. @var{delegated_cred_handle}: (gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, gss_accept_sec_context() will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to gss_release_cred(). Specify NULL if not required. Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop: @example gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; do @{ receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) @{ report_error(maj_stat, min_stat); @}; if (output_token->length != 0) @{ send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token); @}; if (GSS_ERROR(maj_stat)) @{ if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; @}; @} while (maj_stat & GSS_S_CONTINUE_NEEDED); @end example Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE. The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established. Although this requires that GSS-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should be prepared to use per-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context. If the initial call of gss_accept_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The @code{ret_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Delegated credentials are available via the delegated_cred_handle parameter. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - Remote peer asked for mutual authentication. @item False - Remote peer did not ask for mutual authentication. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling the gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name. @item False - The initiator has been authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table All other bits should be set to zero. Return value: @code{GSS_S_CONTINUE_NEEDED}: Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the input_token failed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: Indicates that consistency checks performed on the credential failed. @code{GSS_S_NO_CRED}: The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. @code{GSS_S_BAD_BINDINGS}: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. @code{GSS_S_NO_CONTEXT}: Indicates that the supplied context handle did not refer to a valid context. @code{GSS_S_BAD_SIG}: The input_token contains an invalid MIC. @code{GSS_S_OLD_TOKEN}: The input_token was too old. This is a fatal error during context establishment. @code{GSS_S_DUPLICATE_TOKEN}: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. @code{GSS_S_BAD_MECH}: The received token specified a mechanism that is not supported by the implementation or the provided credential. @end deftypefun gss-1.0.2/doc/texi/gss_wrap_size_limit.texi0000644000000000000000000000502311663554755015704 00000000000000@subheading gss_wrap_size_limit @anchor{gss_wrap_size_limit} @deftypefun {OM_uint32} {gss_wrap_size_limit} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, int @var{conf_req_flag}, gss_qop_t @var{qop_req}, OM_uint32 @var{req_output_size}, OM_uint32 * @var{max_input_size}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent. @var{conf_req_flag}: (Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details. @var{qop_req}: (gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details. @var{req_output_size}: (Integer, read) The desired maximum size for tokens emitted by gss_wrap. @var{max_input_size}: (Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes. Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes. This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection. GSS-API implementations are recommended but not required to detect invalid QOP values when gss_wrap_size_limit() is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection. Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The referenced context could not be accessed. @code{GSS_S_CONTEXT_EXPIRED}: The context has expired. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun gss-1.0.2/doc/texi/gss_init_sec_context.texi0000644000000000000000000003502011663554752016041 00000000000000@subheading gss_init_sec_context @anchor{gss_init_sec_context} @deftypefun {OM_uint32} {gss_init_sec_context} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{initiator_cred_handle}, gss_ctx_id_t * @var{context_handle}, const gss_name_t @var{target_name}, const gss_OID @var{mech_type}, OM_uint32 @var{req_flags}, OM_uint32 @var{time_req}, const gss_channel_bindings_t @var{input_chan_bindings}, const gss_buffer_t @var{input_token}, gss_OID * @var{actual_mech_type}, gss_buffer_t @var{output_token}, OM_uint32 * @var{ret_flags}, OM_uint32 * @var{time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{initiator_cred_handle}: (gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED. @var{context_handle}: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context-handle must be released by the application after use with a call to gss_delete_sec_context(). @var{target_name}: (gss_name_t, read) Name of target. @var{mech_type}: (OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default. @var{req_flags}: (bit-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ORed together to form the bit-mask value. See below for the flags. @var{time_req}: (Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period. @var{input_chan_bindings}: (channel bindings, read, optional) Application-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used. @var{input_token}: (buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call. @var{actual_mech_type}: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. @var{output_token}: (buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to gss_release_buffer(). @var{ret_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{time_rec}: (Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop: @example int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token->length = 0; while (!context_established) @{ maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) @{ report_error(maj_stat, min_stat); @}; if (output_token->length != 0) @{ send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) @}; if (GSS_ERROR(maj_stat)) @{ if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; @}; if (maj_stat & GSS_S_CONTINUE_NEEDED) @{ receive_token_from_peer(input_token); @} else @{ context_established = 1; @}; @}; @end example Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: @itemize @bullet @item The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE. @item The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory). @item The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established. @item GSS-API implementations that support per-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should determine what per-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. @item All other bits within the ret_flags argument should be set to zero. @end itemize If the initial call of gss_init_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The @code{req_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Delegate credentials to remote peer. @item False - Don't delegate. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - Request that remote peer authenticate itself. @item False - Authenticate self to remote peer only. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - Enable replay detection for messages protected with gss_wrap or gss_get_mic. @item False - Don't attempt to detect replayed messages. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - Enable detection of out-of-sequence protected messages. @item False - Don't attempt to detect out-of-sequence messages. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Request that confidentiality service be made available (via gss_wrap). @item False - No per-message confidentiality service is required. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Request that integrity service be made available (via gss_wrap or gss_get_mic). @item False - No per-message integrity service is required. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - Do not reveal the initiator's identity to the acceptor. @item False - Authenticate normally. @end itemize @end table The @code{ret_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Credentials were delegated to the remote peer. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - The remote peer has authenticated itself. @item False - Remote peer has not authenticated itself. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor. @item False - The initiator's identity has been or will be authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table All other bits should be set to zero. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTINUE_NEEDED}: Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the input_token failed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: Indicates that consistency checks performed on the credential failed. @code{GSS_S_NO_CRED}: The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. @code{GSS_S_BAD_BINDINGS}: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. @code{GSS_S_BAD_SIG}: The input_token contains an invalid MIC, or a MIC that could not be verified. @code{GSS_S_OLD_TOKEN}: The input_token was too old. This is a fatal error during context establishment. @code{GSS_S_DUPLICATE_TOKEN}: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. @code{GSS_S_NO_CONTEXT}: Indicates that the supplied context handle did not refer to a valid context. @code{GSS_S_BAD_NAMETYPE}: The provided target_name parameter contained an invalid or unsupported type of name. @code{GSS_S_BAD_NAME}: The provided target_name parameter was ill-formed. @code{GSS_S_BAD_MECH}: The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation. @end deftypefun gss-1.0.2/doc/texi/cred.c.texi0000644000000000000000000004231711663554761012771 00000000000000@subheading gss_acquire_cred @anchor{gss_acquire_cred} @deftypefun {OM_uint32} {gss_acquire_cred} (OM_uint32 * @var{minor_status}, const gss_name_t @var{desired_name}, OM_uint32 @var{time_req}, const gss_OID_set @var{desired_mechs}, gss_cred_usage_t @var{cred_usage}, gss_cred_id_t * @var{output_cred_handle}, gss_OID_set * @var{actual_mechs}, OM_uint32 * @var{time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{desired_name}: (gss_name_t, read) Name of principal whose credential should be acquired. @var{time_req}: (Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime. @var{desired_mechs}: (Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation-specific default. @var{cred_usage}: (gss_cred_usage_t, read) GSS_C_BOTH - Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credentials will only be used to initiate security contexts. GSS_C_ACCEPT - Credentials will only be used to accept security contexts. @var{output_cred_handle}: (gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to gss_release_cred(). @var{actual_mechs}: (Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID-set must be released by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. @var{time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Allows an application to acquire a handle for a pre-existing credential by name. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined. This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Unavailable mechanism requested. @code{GSS_S_BAD_NAMETYPE}: Type contained within desired_name parameter is not supported. @code{GSS_S_BAD_NAME}: Value supplied for desired_name parameter is ill formed. @code{GSS_S_CREDENTIALS_EXPIRED}: The credentials could not be acquired Because they have expired. @code{GSS_S_NO_CRED}: No credentials were found for the specified name. @end deftypefun @subheading gss_add_cred @anchor{gss_add_cred} @deftypefun {OM_uint32} {gss_add_cred} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{input_cred_handle}, const gss_name_t @var{desired_name}, const gss_OID @var{desired_mech}, gss_cred_usage_t @var{cred_usage}, OM_uint32 @var{initiator_time_req}, OM_uint32 @var{acceptor_time_req}, gss_cred_id_t * @var{output_cred_handle}, gss_OID_set * @var{actual_mechs}, OM_uint32 * @var{initiator_time_rec}, OM_uint32 * @var{acceptor_time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{input_cred_handle}: (gss_cred_id_t, read, optional) The credential to which a credential-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential-handle is not modified by gss_add_cred(), the underlying credential will be modified if output_credential_handle is NULL. @var{desired_name}: (gss_name_t, read.) Name of principal whose credential should be acquired. @var{desired_mech}: (Object ID, read) Underlying security mechanism with which the credential may be used. @var{cred_usage}: (gss_cred_usage_t, read) GSS_C_BOTH - Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credential will only be used to initiate security contexts. GSS_C_ACCEPT - Credential will only be used to accept security contexts. @var{initiator_time_req}: (Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. @var{acceptor_time_req}: (Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. @var{output_cred_handle}: (gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential-element and all the credential-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential-elements from the input_cred_handle and the newly acquired credential-element; if NULL is specified for this parameter, the newly acquired credential-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to gss_release_cred(). @var{actual_mechs}: (Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID-set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. @var{initiator_time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required @var{acceptor_time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required Adds a credential-element to a credential. The credential-element is identified by the name of the principal to which it refers. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credential-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism-specific authentication data, rather than merely acquiring a GSS-API handle to existing data. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. This routine can be used to either compose a new credential containing all credential-elements of the original in addition to the newly-acquire credential-element, or to add the new credential- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to gss_acquire_cred(), specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to gss_add_cred(), and finally called gss_release_cred() on the first credential handle. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non-NULL output_cred_handle must be supplied. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Unavailable mechanism requested. @code{GSS_S_BAD_NAMETYPE}: Type contained within desired_name parameter is not supported. @code{GSS_S_BAD_NAME}: Value supplied for desired_name parameter is ill-formed. @code{GSS_S_DUPLICATE_ELEMENT}: The credential already contains an element for the requested mechanism with overlapping usage and validity period. @code{GSS_S_CREDENTIALS_EXPIRED}: The required credentials could not be added because they have expired. @code{GSS_S_NO_CRED}: No credentials were found for the specified name. @end deftypefun @subheading gss_inquire_cred @anchor{gss_inquire_cred} @deftypefun {OM_uint32} {gss_inquire_cred} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{cred_handle}, gss_name_t * @var{name}, OM_uint32 * @var{lifetime}, gss_cred_usage_t * @var{cred_usage}, gss_OID_set * @var{mechanisms}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. @var{name}: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{cred_usage}: (gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. @var{mechanisms}: (gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. Obtains information about a credential. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: The referenced credentials could not be accessed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: The referenced credentials were invalid. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. @end deftypefun @subheading gss_inquire_cred_by_mech @anchor{gss_inquire_cred_by_mech} @deftypefun {OM_uint32} {gss_inquire_cred_by_mech} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{cred_handle}, const gss_OID @var{mech_type}, gss_name_t * @var{name}, OM_uint32 * @var{initiator_lifetime}, OM_uint32 * @var{acceptor_lifetime}, gss_cred_usage_t * @var{cred_usage}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. @var{mech_type}: (gss_OID, read) The mechanism for which information should be returned. @var{name}: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{initiator_lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{acceptor_lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{cred_usage}: (gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. Obtains per-mechanism information about a credential. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: The referenced credentials could not be accessed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: The referenced credentials were invalid. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. @end deftypefun @subheading gss_release_cred @anchor{gss_release_cred} @deftypefun {OM_uint32} {gss_release_cred} (OM_uint32 * @var{minor_status}, gss_cred_id_t * @var{cred_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing. Informs GSS-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: Credentials could not be accessed. @end deftypefun gss-1.0.2/doc/texi/gss_decapsulate_token.texi0000644000000000000000000000221211663554744016170 00000000000000@subheading gss_decapsulate_token @anchor{gss_decapsulate_token} @deftypefun {OM_uint32} {gss_decapsulate_token} (gss_const_buffer_t @var{input_token}, gss_const_OID @var{token_oid}, gss_buffer_t @var{output_token}) @var{input_token}: (buffer, opaque, read) Buffer with GSS-API context token. @var{token_oid}: (Object ID, read) Expected object identifier of token. @var{output_token}: (buffer, opaque, modify) Decapsulated token data; caller must release with gss_release_buffer(). Remove the mechanism-independent token header from an initial GSS-API context token. Unwrap a buffer in the mechanism-independent token format. This is the reverse of gss_encapsulate_token(). The translation is loss-less, all data is preserved as is. This function is standardized in RFC 6339. Return value: @code{GSS_S_COMPLETE}: Indicates successful completion, and that output parameters holds correct information. @code{GSS_S_DEFECTIVE_TOKEN}: Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors). @code{GSS_S_FAILURE}: Indicates that decapsulation failed for reasons unspecified at the GSS-API level. @end deftypefun gss-1.0.2/doc/texi/gss_inquire_mech_for_saslname.texi0000644000000000000000000000161111663555006017671 00000000000000@subheading gss_inquire_mech_for_saslname @anchor{gss_inquire_mech_for_saslname} @deftypefun {OM_uint32} {gss_inquire_mech_for_saslname} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{sasl_mech_name}, gss_OID * @var{mech_type}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{sasl_mech_name}: (buffer, character-string, read) Buffer with SASL mechanism name. @var{mech_type}: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. Output GSS-API mechanism OID of mechanism associated with given @@sasl_mech_name. Returns: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: There is no GSS-API mechanism known as @@sasl_mech_name. @end deftypefun gss-1.0.2/doc/texi/saslname.c.texi0000644000000000000000000000436411663555005013647 00000000000000@subheading gss_inquire_saslname_for_mech @anchor{gss_inquire_saslname_for_mech} @deftypefun {OM_uint32} {gss_inquire_saslname_for_mech} (OM_uint32 * @var{minor_status}, const gss_OID @var{desired_mech}, gss_buffer_t @var{sasl_mech_name}, gss_buffer_t @var{mech_name}, gss_buffer_t @var{mech_description}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{desired_mech}: (OID, read) Identifies the GSS-API mechanism to query. @var{sasl_mech_name}: (buffer, character-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{mech_name}: (buffer, character-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{mech_description}: (buffer, character-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to gss_release_buffer(). Output the SASL mechanism name of a GSS-API mechanism. It also returns a name and description of the mechanism in a user friendly form. Returns: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: The @@desired_mech OID is unsupported. @end deftypefun @subheading gss_inquire_mech_for_saslname @anchor{gss_inquire_mech_for_saslname} @deftypefun {OM_uint32} {gss_inquire_mech_for_saslname} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{sasl_mech_name}, gss_OID * @var{mech_type}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{sasl_mech_name}: (buffer, character-string, read) Buffer with SASL mechanism name. @var{mech_type}: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. Output GSS-API mechanism OID of mechanism associated with given @@sasl_mech_name. Returns: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: There is no GSS-API mechanism known as @@sasl_mech_name. @end deftypefun gss-1.0.2/doc/texi/gss_add_cred.texi0000644000000000000000000001661011663554762014232 00000000000000@subheading gss_add_cred @anchor{gss_add_cred} @deftypefun {OM_uint32} {gss_add_cred} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{input_cred_handle}, const gss_name_t @var{desired_name}, const gss_OID @var{desired_mech}, gss_cred_usage_t @var{cred_usage}, OM_uint32 @var{initiator_time_req}, OM_uint32 @var{acceptor_time_req}, gss_cred_id_t * @var{output_cred_handle}, gss_OID_set * @var{actual_mechs}, OM_uint32 * @var{initiator_time_rec}, OM_uint32 * @var{acceptor_time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{input_cred_handle}: (gss_cred_id_t, read, optional) The credential to which a credential-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential-handle is not modified by gss_add_cred(), the underlying credential will be modified if output_credential_handle is NULL. @var{desired_name}: (gss_name_t, read.) Name of principal whose credential should be acquired. @var{desired_mech}: (Object ID, read) Underlying security mechanism with which the credential may be used. @var{cred_usage}: (gss_cred_usage_t, read) GSS_C_BOTH - Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credential will only be used to initiate security contexts. GSS_C_ACCEPT - Credential will only be used to accept security contexts. @var{initiator_time_req}: (Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. @var{acceptor_time_req}: (Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. @var{output_cred_handle}: (gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential-element and all the credential-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential-elements from the input_cred_handle and the newly acquired credential-element; if NULL is specified for this parameter, the newly acquired credential-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to gss_release_cred(). @var{actual_mechs}: (Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID-set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. @var{initiator_time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required @var{acceptor_time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required Adds a credential-element to a credential. The credential-element is identified by the name of the principal to which it refers. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credential-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism-specific authentication data, rather than merely acquiring a GSS-API handle to existing data. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. This routine can be used to either compose a new credential containing all credential-elements of the original in addition to the newly-acquire credential-element, or to add the new credential- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to gss_acquire_cred(), specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to gss_add_cred(), and finally called gss_release_cred() on the first credential handle. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non-NULL output_cred_handle must be supplied. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Unavailable mechanism requested. @code{GSS_S_BAD_NAMETYPE}: Type contained within desired_name parameter is not supported. @code{GSS_S_BAD_NAME}: Value supplied for desired_name parameter is ill-formed. @code{GSS_S_DUPLICATE_ELEMENT}: The credential already contains an element for the requested mechanism with overlapping usage and validity period. @code{GSS_S_CREDENTIALS_EXPIRED}: The required credentials could not be added because they have expired. @code{GSS_S_NO_CRED}: No credentials were found for the specified name. @end deftypefun gss-1.0.2/doc/texi/gss_export_name.texi0000644000000000000000000000233511663555003015012 00000000000000@subheading gss_export_name @anchor{gss_export_name} @deftypefun {OM_uint32} {gss_export_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_buffer_t @var{exported_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The MN to be exported. @var{exported_name}: (gss_buffer_t, octet-string, modify) The canonical contiguous string form of @@input_name. Storage associated with this string must freed by the application after use with gss_release_buffer(). To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access-control list). The @@input_name parameter must specify a valid MN (i.e. an internal name generated by gss_accept_sec_context() or by gss_canonicalize_name()). Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NAME_NOT_MN}: The provided internal name was not a mechanism name. @code{GSS_S_BAD_NAME}: The provided internal name was ill-formed. @code{GSS_S_BAD_NAMETYPE}: The internal name was of a type not supported by the GSS-API implementation. @end deftypefun gss-1.0.2/doc/texi/gss_inquire_cred_by_mech.texi0000644000000000000000000000501411663554763016641 00000000000000@subheading gss_inquire_cred_by_mech @anchor{gss_inquire_cred_by_mech} @deftypefun {OM_uint32} {gss_inquire_cred_by_mech} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{cred_handle}, const gss_OID @var{mech_type}, gss_name_t * @var{name}, OM_uint32 * @var{initiator_lifetime}, OM_uint32 * @var{acceptor_lifetime}, gss_cred_usage_t * @var{cred_usage}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. @var{mech_type}: (gss_OID, read) The mechanism for which information should be returned. @var{name}: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{initiator_lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{acceptor_lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{cred_usage}: (gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. Obtains per-mechanism information about a credential. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: The referenced credentials could not be accessed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: The referenced credentials were invalid. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. @end deftypefun gss-1.0.2/doc/texi/gss_wrap.texi0000644000000000000000000000423011663554774013454 00000000000000@subheading gss_wrap @anchor{gss_wrap} @deftypefun {OM_uint32} {gss_wrap} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, int @var{conf_req_flag}, gss_qop_t @var{qop_req}, const gss_buffer_t @var{input_message_buffer}, int * @var{conf_state}, gss_buffer_t @var{output_message_buffer}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. @var{conf_req_flag}: (boolean, read) Non-zero - Both confidentiality and integrity services are requested. Zero - Only integrity service is requested. @var{qop_req}: (gss_qop_t, read, optional) Specifies required quality of protection. A mechanism-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP. @var{input_message_buffer}: (buffer, opaque, read) Message to be protected. @var{conf_state}: (boolean, modify, optional) Non-zero - Confidentiality, data origin authentication and integrity services have been applied. Zero - Integrity and data origin services only has been applied. Specify NULL if not required. @var{output_message_buffer}: (buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to gss_release_buffer(). Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping of zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun gss-1.0.2/doc/texi/gss_inquire_mechs_for_name.texi0000644000000000000000000000324611663555002017173 00000000000000@subheading gss_inquire_mechs_for_name @anchor{gss_inquire_mechs_for_name} @deftypefun {OM_uint32} {gss_inquire_mechs_for_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_OID_set * @var{mech_types}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The name to which the inquiry relates. @var{mech_types}: (gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to gss_release_oid_set(). Returns the set of mechanisms supported by the GSS-API implementation that may be able to process the specified name. Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism-independent GSS-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism-specific routine. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The input_name parameter was ill-formed. @code{GSS_S_BAD_NAMETYPE}: The input_name parameter contained an invalid or unsupported type of name. @end deftypefun gss-1.0.2/doc/texi/gss_release_buffer.texi0000644000000000000000000000171511663554771015456 00000000000000@subheading gss_release_buffer @anchor{gss_release_buffer} @deftypefun {OM_uint32} {gss_release_buffer} (OM_uint32 * @var{minor_status}, gss_buffer_t @var{buffer}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{buffer}: (buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed. Free storage associated with a buffer. The storage must have been allocated by a GSS-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer). Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.2/doc/texi/misc.c.texi0000644000000000000000000001253611663554767013015 00000000000000@subheading gss_create_empty_oid_set @anchor{gss_create_empty_oid_set} @deftypefun {OM_uint32} {gss_create_empty_oid_set} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{oid_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{oid_set}: (Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to gss_release_oid_set(). Create an object-identifier set containing no object identifiers, to which members may be subsequently added using the gss_add_oid_set_member() routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_add_oid_set_member @anchor{gss_add_oid_set_member} @deftypefun {OM_uint32} {gss_add_oid_set_member} (OM_uint32 * @var{minor_status}, const gss_OID @var{member_oid}, gss_OID_set * @var{oid_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{member_oid}: (Object ID, read) The object identifier to copied into the set. @var{oid_set}: (Set of Object ID, modify) The set in which the object identifier should be inserted. Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID-set that was created by GSS-API (e.g. a set returned by gss_create_empty_oid_set()). GSS-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_test_oid_set_member @anchor{gss_test_oid_set_member} @deftypefun {OM_uint32} {gss_test_oid_set_member} (OM_uint32 * @var{minor_status}, const gss_OID @var{member}, const gss_OID_set @var{set}, int * @var{present}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{member}: (Object ID, read) The object identifier whose presence is to be tested. @var{set}: (Set of Object ID, read) The Object Identifier set. @var{present}: (Boolean, modify) Non-zero if the specified OID is a member of the set, zero if not. Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by gss_indicate_mechs(), gss_acquire_cred(), and gss_inquire_cred(), but will also work with user-generated sets. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_release_oid_set @anchor{gss_release_oid_set} @deftypefun {OM_uint32} {gss_release_oid_set} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{set}: (Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted. Free storage associated with a GSSAPI-generated gss_OID_set object. The set parameter must refer to an OID-set that was returned from a GSS-API routine. gss_release_oid_set() will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc. The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_indicate_mechs @anchor{gss_indicate_mechs} @deftypefun {OM_uint32} {gss_indicate_mechs} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{mech_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{mech_set}: (set of Object IDs, modify) Set of implementation-supported mechanisms. The returned gss_OID_set value will be a dynamically-allocated OID set, that should be released by the caller after use with a call to gss_release_oid_set(). Allows an application to determine which underlying security mechanisms are available. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_release_buffer @anchor{gss_release_buffer} @deftypefun {OM_uint32} {gss_release_buffer} (OM_uint32 * @var{minor_status}, gss_buffer_t @var{buffer}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{buffer}: (buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed. Free storage associated with a buffer. The storage must have been allocated by a GSS-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer). Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.2/doc/texi/gss_inquire_context.texi0000644000000000000000000001234411663554754015726 00000000000000@subheading gss_inquire_context @anchor{gss_inquire_context} @deftypefun {OM_uint32} {gss_inquire_context} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, gss_name_t * @var{src_name}, gss_name_t * @var{targ_name}, OM_uint32 * @var{lifetime_rec}, gss_OID * @var{mech_type}, OM_uint32 * @var{ctx_flags}, int * @var{locally_initiated}, int * @var{open}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) A handle that refers to the security context. @var{src_name}: (gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{targ_name}: (gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. Specify NULL if not required. @var{lifetime_rec}: (Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{mech_type}: (gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read-only by the application; in particular the application should not attempt to free it. Specify NULL if not required. @var{ctx_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{locally_initiated}: (Boolean, modify) Non-zero if the invoking application is the context initiator. Specify NULL if not required. @var{open}: (Boolean, modify) Non-zero if the context is fully established; Zero if a context-establishment token is expected from the peer application. Specify NULL if not required. Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established. The @code{ctx_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Credentials were delegated from the initiator to the acceptor. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - The acceptor was authenticated to the initiator. @item False - The acceptor did not authenticate itself. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name. @item False - The initiator has been authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non-zero). @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The referenced context could not be accessed. @end deftypefun gss-1.0.2/doc/texi/error.c.texi0000644000000000000000000000646611663554764013215 00000000000000@subheading gss_display_status @anchor{gss_display_status} @deftypefun {OM_uint32} {gss_display_status} (OM_uint32 * @var{minor_status}, OM_uint32 @var{status_value}, int @var{status_type}, const gss_OID @var{mech_type}, OM_uint32 * @var{message_context}, gss_buffer_t @var{status_string}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{status_value}: (Integer, read) Status value to be converted. @var{status_type}: (Integer, read) GSS_C_GSS_CODE - status_value is a GSS status code. GSS_C_MECH_CODE - status_value is a mechanism status code. @var{mech_type}: (Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default. @var{message_context}: (Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from gss_display_status(), a non-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to gss_display_status(), passing the same status_value, status_type, mech_type, and message_context parameters. @var{status_string}: (buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to gss_release_buffer(). Allows an application to obtain a textual representation of a GSS-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non-zero value in this parameter if there are further messages to extract. The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr: @example OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string; ... message_context = 0; do @{ maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string) fprintf(stderr, "%.*s\n", (int)status_string.length, (char *)status_string.value); gss_release_buffer(&min_status, &status_string); @} while (message_context != 0); @end example Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Indicates that translation in accordance with an unsupported mechanism type was requested. @code{GSS_S_BAD_STATUS}: The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE. @end deftypefun gss-1.0.2/doc/texi/gss_inquire_cred.texi0000644000000000000000000000362411663554763015160 00000000000000@subheading gss_inquire_cred @anchor{gss_inquire_cred} @deftypefun {OM_uint32} {gss_inquire_cred} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{cred_handle}, gss_name_t * @var{name}, OM_uint32 * @var{lifetime}, gss_cred_usage_t * @var{cred_usage}, gss_OID_set * @var{mechanisms}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. @var{name}: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{cred_usage}: (gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. @var{mechanisms}: (gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. Obtains information about a credential. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: The referenced credentials could not be accessed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: The referenced credentials were invalid. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. @end deftypefun gss-1.0.2/doc/texi/gss_userok.texi0000644000000000000000000000103511663554765014013 00000000000000@subheading gss_userok @anchor{gss_userok} @deftypefun {int} {gss_userok} (const gss_name_t @var{name}, const char * @var{username}) @var{name}: (gss_name_t, read) Name to be compared. @var{username}: Zero terminated string with username. Compare the username against the output from gss_export_name() invoked on @@name, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal Return value: Returns 0 if the names match, non-0 otherwise. @end deftypefun gss-1.0.2/doc/texi/gss_context_time.texi0000644000000000000000000000147711663554754015215 00000000000000@subheading gss_context_time @anchor{gss_context_time} @deftypefun {OM_uint32} {gss_context_time} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, OM_uint32 * @var{time_rec}) @var{minor_status}: (Integer, modify) Implementation specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context to be interrogated. @var{time_rec}: (Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned. Determines the number of seconds for which the specified context will remain valid. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context @end deftypefun gss-1.0.2/doc/texi/meta.c.texi0000644000000000000000000000000011663554765012765 00000000000000gss-1.0.2/doc/texi/gss_import_sec_context.texi0000644000000000000000000000220411663554756016412 00000000000000@subheading gss_import_sec_context @anchor{gss_import_sec_context} @deftypefun {OM_uint32} {gss_import_sec_context} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{interprocess_token}, gss_ctx_id_t * @var{context_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{interprocess_token}: (buffer, opaque, modify) Token received from exporting process @var{context_handle}: (gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to gss_delete_sec_context(). Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The token did not contain a valid context reference. @code{GSS_S_DEFECTIVE_TOKEN}: The token was invalid. @code{GSS_S_UNAVAILABLE}: The operation is unavailable. @code{GSS_S_UNAUTHORIZED}: Local policy prevents the import of this context by the current process. @end deftypefun gss-1.0.2/doc/texi/gss_display_name.texi0000644000000000000000000000320511663555001015131 00000000000000@subheading gss_display_name @anchor{gss_display_name} @deftypefun {OM_uint32} {gss_display_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_buffer_t @var{output_name_buffer}, gss_OID * @var{output_name_type}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) Name to be displayed. @var{output_name_buffer}: (buffer, character-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{output_name_type}: (Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required. Allows an application to obtain a textual representation of an opaque internal-form name for display purposes. The syntax of a printable name is defined by the GSS-API implementation. If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer. If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: @@input_name was ill-formed. @end deftypefun gss-1.0.2/doc/texi/obsolete.c.texi0000644000000000000000000000000011663555003013635 00000000000000gss-1.0.2/doc/texi/gss_add_oid_set_member.texi0000644000000000000000000000242111663554770016264 00000000000000@subheading gss_add_oid_set_member @anchor{gss_add_oid_set_member} @deftypefun {OM_uint32} {gss_add_oid_set_member} (OM_uint32 * @var{minor_status}, const gss_OID @var{member_oid}, gss_OID_set * @var{oid_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{member_oid}: (Object ID, read) The object identifier to copied into the set. @var{oid_set}: (Set of Object ID, modify) The set in which the object identifier should be inserted. Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID-set that was created by GSS-API (e.g. a set returned by gss_create_empty_oid_set()). GSS-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.2/doc/texi/gss_process_context_token.texi0000644000000000000000000000316311663554753017126 00000000000000@subheading gss_process_context_token @anchor{gss_process_context_token} @deftypefun {OM_uint32} {gss_process_context_token} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{token_buffer}) @var{minor_status}: (Integer, modify) Implementation specific status code. @var{context_handle}: (gss_ctx_id_t, read) Context handle of context on which token is to be processed @var{token_buffer}: (buffer, opaque, read) Token to process. Provides a way to pass an asynchronous token to the security service. Most context-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the token failed. @code{GSS_S_NO_CONTEXT}: The context_handle did not refer to a valid context. @end deftypefun gss-1.0.2/doc/texi/gss_indicate_mechs.texi0000644000000000000000000000121611663554771015440 00000000000000@subheading gss_indicate_mechs @anchor{gss_indicate_mechs} @deftypefun {OM_uint32} {gss_indicate_mechs} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{mech_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{mech_set}: (set of Object IDs, modify) Set of implementation-supported mechanisms. The returned gss_OID_set value will be a dynamically-allocated OID set, that should be released by the caller after use with a call to gss_release_oid_set(). Allows an application to determine which underlying security mechanisms are available. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.2/doc/texi/gss_get_mic.texi0000644000000000000000000000344211663554773014115 00000000000000@subheading gss_get_mic @anchor{gss_get_mic} @deftypefun {OM_uint32} {gss_get_mic} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, gss_qop_t @var{qop_req}, const gss_buffer_t @var{message_buffer}, gss_buffer_t @var{message_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. @var{qop_req}: (gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP. @var{message_buffer}: (buffer, opaque, read) Message to be protected. @var{message_token}: (buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to gss_release_buffer(). Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support derivation of MICs from zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun gss-1.0.2/doc/texi/gss_create_empty_oid_set.texi0000644000000000000000000000147011663554767016677 00000000000000@subheading gss_create_empty_oid_set @anchor{gss_create_empty_oid_set} @deftypefun {OM_uint32} {gss_create_empty_oid_set} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{oid_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{oid_set}: (Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to gss_release_oid_set(). Create an object-identifier set containing no object identifiers, to which members may be subsequently added using the gss_add_oid_set_member() routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.2/doc/texi/gss_check_version.texi0000644000000000000000000000076411663555006015322 00000000000000@subheading gss_check_version @anchor{gss_check_version} @deftypefun {const char *} {gss_check_version} (const char * @var{req_version}) @var{req_version}: version string to compare with, or NULL Check that the version of the library is at minimum the one given as a string in @@req_version. Return value: The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned. @end deftypefun gss-1.0.2/doc/texi/gss_release_name.texi0000644000000000000000000000110611663555002015103 00000000000000@subheading gss_release_name @anchor{gss_release_name} @deftypefun {OM_uint32} {gss_release_name} (OM_uint32 * @var{minor_status}, gss_name_t * @var{name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{name}: (gss_name_t, modify) The name to be deleted. Free GSSAPI-allocated storage associated with an internal-form name. The name is set to GSS_C_NO_NAME on successful completion of this call. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The name parameter did not contain a valid name. @end deftypefun gss-1.0.2/doc/texi/ext.c.texi0000644000000000000000000000103511663554765012650 00000000000000@subheading gss_userok @anchor{gss_userok} @deftypefun {int} {gss_userok} (const gss_name_t @var{name}, const char * @var{username}) @var{name}: (gss_name_t, read) Name to be compared. @var{username}: Zero terminated string with username. Compare the username against the output from gss_export_name() invoked on @@name, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal Return value: Returns 0 if the names match, non-0 otherwise. @end deftypefun gss-1.0.2/doc/texi/gss_oid_equal.texi0000644000000000000000000000107711663555004014436 00000000000000@subheading gss_oid_equal @anchor{gss_oid_equal} @deftypefun {int} {gss_oid_equal} (gss_const_OID @var{first_oid}, gss_const_OID @var{second_oid}) @var{first_oid}: (Object ID, read) First Object identifier. @var{second_oid}: (Object ID, read) First Object identifier. Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339. Return value: Returns boolean value true when the two OIDs are equal, otherwise false. @end deftypefun gss-1.0.2/doc/texi/version.c.texi0000644000000000000000000000076411663555006013532 00000000000000@subheading gss_check_version @anchor{gss_check_version} @deftypefun {const char *} {gss_check_version} (const char * @var{req_version}) @var{req_version}: version string to compare with, or NULL Check that the version of the library is at minimum the one given as a string in @@req_version. Return value: The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned. @end deftypefun gss-1.0.2/doc/texi/gss_inquire_names_for_mech.texi0000644000000000000000000000130711663555002017167 00000000000000@subheading gss_inquire_names_for_mech @anchor{gss_inquire_names_for_mech} @deftypefun {OM_uint32} {gss_inquire_names_for_mech} (OM_uint32 * @var{minor_status}, const gss_OID @var{mechanism}, gss_OID_set * @var{name_types}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{mechanism}: (gss_OID, read) The mechanism to be interrogated. @var{name_types}: (gss_OID_set, modify) Set of name-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to gss_release_oid_set(). Returns the set of nametypes supported by the specified mechanism. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.2/doc/texi/gss_acquire_cred.texi0000644000000000000000000001121411663554761015125 00000000000000@subheading gss_acquire_cred @anchor{gss_acquire_cred} @deftypefun {OM_uint32} {gss_acquire_cred} (OM_uint32 * @var{minor_status}, const gss_name_t @var{desired_name}, OM_uint32 @var{time_req}, const gss_OID_set @var{desired_mechs}, gss_cred_usage_t @var{cred_usage}, gss_cred_id_t * @var{output_cred_handle}, gss_OID_set * @var{actual_mechs}, OM_uint32 * @var{time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{desired_name}: (gss_name_t, read) Name of principal whose credential should be acquired. @var{time_req}: (Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime. @var{desired_mechs}: (Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation-specific default. @var{cred_usage}: (gss_cred_usage_t, read) GSS_C_BOTH - Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credentials will only be used to initiate security contexts. GSS_C_ACCEPT - Credentials will only be used to accept security contexts. @var{output_cred_handle}: (gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to gss_release_cred(). @var{actual_mechs}: (Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID-set must be released by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. @var{time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Allows an application to acquire a handle for a pre-existing credential by name. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined. This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Unavailable mechanism requested. @code{GSS_S_BAD_NAMETYPE}: Type contained within desired_name parameter is not supported. @code{GSS_S_BAD_NAME}: Value supplied for desired_name parameter is ill formed. @code{GSS_S_CREDENTIALS_EXPIRED}: The credentials could not be acquired Because they have expired. @code{GSS_S_NO_CRED}: No credentials were found for the specified name. @end deftypefun gss-1.0.2/doc/texi/gss_encapsulate_token.texi0000644000000000000000000000214111663554744016203 00000000000000@subheading gss_encapsulate_token @anchor{gss_encapsulate_token} @deftypefun {extern OM_uint32} {gss_encapsulate_token} (gss_const_buffer_t @var{input_token}, gss_const_OID @var{token_oid}, gss_buffer_t @var{output_token}) @var{input_token}: (buffer, opaque, read) Buffer with GSS-API context token data. @var{token_oid}: (Object ID, read) Object identifier of token. @var{output_token}: (buffer, opaque, modify) Encapsulated token data; caller must release with gss_release_buffer(). Add the mechanism-independent token header to GSS-API context token data. This is used for the initial token of a GSS-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339. Returns: @code{GSS_S_COMPLETE}: Indicates successful completion, and that output parameters holds correct information. @code{GSS_S_FAILURE}: Indicates that encapsulation failed for reasons unspecified at the GSS-API level. @end deftypefun gss-1.0.2/doc/texi/context.c.texi0000644000000000000000000012621511663554751013537 00000000000000@subheading gss_init_sec_context @anchor{gss_init_sec_context} @deftypefun {OM_uint32} {gss_init_sec_context} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{initiator_cred_handle}, gss_ctx_id_t * @var{context_handle}, const gss_name_t @var{target_name}, const gss_OID @var{mech_type}, OM_uint32 @var{req_flags}, OM_uint32 @var{time_req}, const gss_channel_bindings_t @var{input_chan_bindings}, const gss_buffer_t @var{input_token}, gss_OID * @var{actual_mech_type}, gss_buffer_t @var{output_token}, OM_uint32 * @var{ret_flags}, OM_uint32 * @var{time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{initiator_cred_handle}: (gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED. @var{context_handle}: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context-handle must be released by the application after use with a call to gss_delete_sec_context(). @var{target_name}: (gss_name_t, read) Name of target. @var{mech_type}: (OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default. @var{req_flags}: (bit-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ORed together to form the bit-mask value. See below for the flags. @var{time_req}: (Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period. @var{input_chan_bindings}: (channel bindings, read, optional) Application-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used. @var{input_token}: (buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call. @var{actual_mech_type}: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. @var{output_token}: (buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to gss_release_buffer(). @var{ret_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{time_rec}: (Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop: @example int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token->length = 0; while (!context_established) @{ maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) @{ report_error(maj_stat, min_stat); @}; if (output_token->length != 0) @{ send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) @}; if (GSS_ERROR(maj_stat)) @{ if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; @}; if (maj_stat & GSS_S_CONTINUE_NEEDED) @{ receive_token_from_peer(input_token); @} else @{ context_established = 1; @}; @}; @end example Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: @itemize @bullet @item The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE. @item The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory). @item The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established. @item GSS-API implementations that support per-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should determine what per-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. @item All other bits within the ret_flags argument should be set to zero. @end itemize If the initial call of gss_init_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The @code{req_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Delegate credentials to remote peer. @item False - Don't delegate. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - Request that remote peer authenticate itself. @item False - Authenticate self to remote peer only. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - Enable replay detection for messages protected with gss_wrap or gss_get_mic. @item False - Don't attempt to detect replayed messages. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - Enable detection of out-of-sequence protected messages. @item False - Don't attempt to detect out-of-sequence messages. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Request that confidentiality service be made available (via gss_wrap). @item False - No per-message confidentiality service is required. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Request that integrity service be made available (via gss_wrap or gss_get_mic). @item False - No per-message integrity service is required. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - Do not reveal the initiator's identity to the acceptor. @item False - Authenticate normally. @end itemize @end table The @code{ret_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Credentials were delegated to the remote peer. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - The remote peer has authenticated itself. @item False - Remote peer has not authenticated itself. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor. @item False - The initiator's identity has been or will be authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table All other bits should be set to zero. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTINUE_NEEDED}: Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the input_token failed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: Indicates that consistency checks performed on the credential failed. @code{GSS_S_NO_CRED}: The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. @code{GSS_S_BAD_BINDINGS}: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. @code{GSS_S_BAD_SIG}: The input_token contains an invalid MIC, or a MIC that could not be verified. @code{GSS_S_OLD_TOKEN}: The input_token was too old. This is a fatal error during context establishment. @code{GSS_S_DUPLICATE_TOKEN}: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. @code{GSS_S_NO_CONTEXT}: Indicates that the supplied context handle did not refer to a valid context. @code{GSS_S_BAD_NAMETYPE}: The provided target_name parameter contained an invalid or unsupported type of name. @code{GSS_S_BAD_NAME}: The provided target_name parameter was ill-formed. @code{GSS_S_BAD_MECH}: The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation. @end deftypefun @subheading gss_accept_sec_context @anchor{gss_accept_sec_context} @deftypefun {OM_uint32} {gss_accept_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, const gss_cred_id_t @var{acceptor_cred_handle}, const gss_buffer_t @var{input_token_buffer}, const gss_channel_bindings_t @var{input_chan_bindings}, gss_name_t * @var{src_name}, gss_OID * @var{mech_type}, gss_buffer_t @var{output_token}, OM_uint32 * @var{ret_flags}, OM_uint32 * @var{time_rec}, gss_cred_id_t * @var{delegated_cred_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once gss_accept_sec_context() has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to gss_delete_sec_context(). @var{acceptor_cred_handle}: (gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned. @var{input_token_buffer}: (buffer, opaque, read) Token obtained from remote application. @var{input_chan_bindings}: (channel bindings, read, optional) Application- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS. @var{src_name}: (gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to gss_release_name(). If not required, specify NULL. @var{mech_type}: (Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read-only by the caller (in particular, it does not need to be freed). If not required, specify NULL. @var{output_token}: (buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non- zero length field is returned, the associated storage must be freed after use by the application with a call to gss_release_buffer(). @var{ret_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{time_rec}: (Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required. @var{delegated_cred_handle}: (gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, gss_accept_sec_context() will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to gss_release_cred(). Specify NULL if not required. Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop: @example gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; do @{ receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) @{ report_error(maj_stat, min_stat); @}; if (output_token->length != 0) @{ send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token); @}; if (GSS_ERROR(maj_stat)) @{ if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; @}; @} while (maj_stat & GSS_S_CONTINUE_NEEDED); @end example Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE. The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established. Although this requires that GSS-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should be prepared to use per-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context. If the initial call of gss_accept_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The @code{ret_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Delegated credentials are available via the delegated_cred_handle parameter. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - Remote peer asked for mutual authentication. @item False - Remote peer did not ask for mutual authentication. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling the gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name. @item False - The initiator has been authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table All other bits should be set to zero. Return value: @code{GSS_S_CONTINUE_NEEDED}: Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the input_token failed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: Indicates that consistency checks performed on the credential failed. @code{GSS_S_NO_CRED}: The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. @code{GSS_S_BAD_BINDINGS}: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. @code{GSS_S_NO_CONTEXT}: Indicates that the supplied context handle did not refer to a valid context. @code{GSS_S_BAD_SIG}: The input_token contains an invalid MIC. @code{GSS_S_OLD_TOKEN}: The input_token was too old. This is a fatal error during context establishment. @code{GSS_S_DUPLICATE_TOKEN}: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. @code{GSS_S_BAD_MECH}: The received token specified a mechanism that is not supported by the implementation or the provided credential. @end deftypefun @subheading gss_delete_sec_context @anchor{gss_delete_sec_context} @deftypefun {OM_uint32} {gss_delete_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, gss_buffer_t @var{output_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS-API will set this context handle to GSS_C_NO_CONTEXT. @var{output_token}: (buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer. Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle. In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half-built" security contexts resulting from an incomplete sequence of gss_init_sec_context()/gss_accept_sec_context() calls. The output_token parameter is retained for compatibility with version 1 of the GSS-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero-length token, indicating that no peer action is necessary, and that no token should be transferred by the application. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: No valid context was supplied. @end deftypefun @subheading gss_process_context_token @anchor{gss_process_context_token} @deftypefun {OM_uint32} {gss_process_context_token} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{token_buffer}) @var{minor_status}: (Integer, modify) Implementation specific status code. @var{context_handle}: (gss_ctx_id_t, read) Context handle of context on which token is to be processed @var{token_buffer}: (buffer, opaque, read) Token to process. Provides a way to pass an asynchronous token to the security service. Most context-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the token failed. @code{GSS_S_NO_CONTEXT}: The context_handle did not refer to a valid context. @end deftypefun @subheading gss_context_time @anchor{gss_context_time} @deftypefun {OM_uint32} {gss_context_time} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, OM_uint32 * @var{time_rec}) @var{minor_status}: (Integer, modify) Implementation specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context to be interrogated. @var{time_rec}: (Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned. Determines the number of seconds for which the specified context will remain valid. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context @end deftypefun @subheading gss_inquire_context @anchor{gss_inquire_context} @deftypefun {OM_uint32} {gss_inquire_context} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, gss_name_t * @var{src_name}, gss_name_t * @var{targ_name}, OM_uint32 * @var{lifetime_rec}, gss_OID * @var{mech_type}, OM_uint32 * @var{ctx_flags}, int * @var{locally_initiated}, int * @var{open}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) A handle that refers to the security context. @var{src_name}: (gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{targ_name}: (gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. Specify NULL if not required. @var{lifetime_rec}: (Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{mech_type}: (gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read-only by the application; in particular the application should not attempt to free it. Specify NULL if not required. @var{ctx_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{locally_initiated}: (Boolean, modify) Non-zero if the invoking application is the context initiator. Specify NULL if not required. @var{open}: (Boolean, modify) Non-zero if the context is fully established; Zero if a context-establishment token is expected from the peer application. Specify NULL if not required. Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established. The @code{ctx_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Credentials were delegated from the initiator to the acceptor. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - The acceptor was authenticated to the initiator. @item False - The acceptor did not authenticate itself. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name. @item False - The initiator has been authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non-zero). @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The referenced context could not be accessed. @end deftypefun @subheading gss_wrap_size_limit @anchor{gss_wrap_size_limit} @deftypefun {OM_uint32} {gss_wrap_size_limit} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, int @var{conf_req_flag}, gss_qop_t @var{qop_req}, OM_uint32 @var{req_output_size}, OM_uint32 * @var{max_input_size}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent. @var{conf_req_flag}: (Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details. @var{qop_req}: (gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details. @var{req_output_size}: (Integer, read) The desired maximum size for tokens emitted by gss_wrap. @var{max_input_size}: (Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes. Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes. This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection. GSS-API implementations are recommended but not required to detect invalid QOP values when gss_wrap_size_limit() is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection. Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The referenced context could not be accessed. @code{GSS_S_CONTEXT_EXPIRED}: The context has expired. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun @subheading gss_export_sec_context @anchor{gss_export_sec_context} @deftypefun {OM_uint32} {gss_export_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, gss_buffer_t @var{interprocess_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, modify) Context handle identifying the context to transfer. @var{interprocess_token}: (buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to gss_release_buffer(). Provided to support the sharing of work between multiple processes. This routine will typically be used by the context-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. gss_export_sec_context() deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail. The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group. The interprocess token may contain security-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object-library GSS-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy. If creation of the interprocess token is successful, the implementation shall deallocate all process-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has expired. @code{GSS_S_NO_CONTEXT}: The context was invalid. @code{GSS_S_UNAVAILABLE}: The operation is not supported. @end deftypefun @subheading gss_import_sec_context @anchor{gss_import_sec_context} @deftypefun {OM_uint32} {gss_import_sec_context} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{interprocess_token}, gss_ctx_id_t * @var{context_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{interprocess_token}: (buffer, opaque, modify) Token received from exporting process @var{context_handle}: (gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to gss_delete_sec_context(). Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The token did not contain a valid context reference. @code{GSS_S_DEFECTIVE_TOKEN}: The token was invalid. @code{GSS_S_UNAVAILABLE}: The operation is unavailable. @code{GSS_S_UNAUTHORIZED}: Local policy prevents the import of this context by the current process. @end deftypefun gss-1.0.2/doc/texi/asn1.c.texi0000644000000000000000000000435311663554743012714 00000000000000@subheading gss_encapsulate_token @anchor{gss_encapsulate_token} @deftypefun {extern OM_uint32} {gss_encapsulate_token} (gss_const_buffer_t @var{input_token}, gss_const_OID @var{token_oid}, gss_buffer_t @var{output_token}) @var{input_token}: (buffer, opaque, read) Buffer with GSS-API context token data. @var{token_oid}: (Object ID, read) Object identifier of token. @var{output_token}: (buffer, opaque, modify) Encapsulated token data; caller must release with gss_release_buffer(). Add the mechanism-independent token header to GSS-API context token data. This is used for the initial token of a GSS-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339. Returns: @code{GSS_S_COMPLETE}: Indicates successful completion, and that output parameters holds correct information. @code{GSS_S_FAILURE}: Indicates that encapsulation failed for reasons unspecified at the GSS-API level. @end deftypefun @subheading gss_decapsulate_token @anchor{gss_decapsulate_token} @deftypefun {OM_uint32} {gss_decapsulate_token} (gss_const_buffer_t @var{input_token}, gss_const_OID @var{token_oid}, gss_buffer_t @var{output_token}) @var{input_token}: (buffer, opaque, read) Buffer with GSS-API context token. @var{token_oid}: (Object ID, read) Expected object identifier of token. @var{output_token}: (buffer, opaque, modify) Decapsulated token data; caller must release with gss_release_buffer(). Remove the mechanism-independent token header from an initial GSS-API context token. Unwrap a buffer in the mechanism-independent token format. This is the reverse of gss_encapsulate_token(). The translation is loss-less, all data is preserved as is. This function is standardized in RFC 6339. Return value: @code{GSS_S_COMPLETE}: Indicates successful completion, and that output parameters holds correct information. @code{GSS_S_DEFECTIVE_TOKEN}: Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors). @code{GSS_S_FAILURE}: Indicates that decapsulation failed for reasons unspecified at the GSS-API level. @end deftypefun gss-1.0.2/doc/texi/gss_delete_sec_context.texi0000644000000000000000000000457411663554753016353 00000000000000@subheading gss_delete_sec_context @anchor{gss_delete_sec_context} @deftypefun {OM_uint32} {gss_delete_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, gss_buffer_t @var{output_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS-API will set this context handle to GSS_C_NO_CONTEXT. @var{output_token}: (buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer. Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle. In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half-built" security contexts resulting from an incomplete sequence of gss_init_sec_context()/gss_accept_sec_context() calls. The output_token parameter is retained for compatibility with version 1 of the GSS-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero-length token, indicating that no peer action is necessary, and that no token should be transferred by the application. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: No valid context was supplied. @end deftypefun gss-1.0.2/doc/texi/gss_verify_mic.texi0000644000000000000000000000410411663554774014637 00000000000000@subheading gss_verify_mic @anchor{gss_verify_mic} @deftypefun {OM_uint32} {gss_verify_mic} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{message_buffer}, const gss_buffer_t @var{token_buffer}, gss_qop_t * @var{qop_state}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message arrived. @var{message_buffer}: (buffer, opaque, read) Message to be verified. @var{token_buffer}: (buffer, opaque, read) Token associated with message. @var{qop_state}: (gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required. Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the calculation and verification of MICs over zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: The token failed consistency checks. @code{GSS_S_BAD_SIG}: The MIC was incorrect. @code{GSS_S_DUPLICATE_TOKEN}: The token was valid, and contained a correct MIC for the message, but it had already been processed. @code{GSS_S_OLD_TOKEN}: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. @code{GSS_S_UNSEQ_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. @code{GSS_S_GAP_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @end deftypefun gss-1.0.2/doc/texi/gss_export_sec_context.texi0000644000000000000000000000603711663554755016430 00000000000000@subheading gss_export_sec_context @anchor{gss_export_sec_context} @deftypefun {OM_uint32} {gss_export_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, gss_buffer_t @var{interprocess_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, modify) Context handle identifying the context to transfer. @var{interprocess_token}: (buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to gss_release_buffer(). Provided to support the sharing of work between multiple processes. This routine will typically be used by the context-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. gss_export_sec_context() deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail. The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group. The interprocess token may contain security-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object-library GSS-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy. If creation of the interprocess token is successful, the implementation shall deallocate all process-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has expired. @code{GSS_S_NO_CONTEXT}: The context was invalid. @code{GSS_S_UNAVAILABLE}: The operation is not supported. @end deftypefun gss-1.0.2/doc/texi/gss_test_oid_set_member.texi0000644000000000000000000000161511663554770016517 00000000000000@subheading gss_test_oid_set_member @anchor{gss_test_oid_set_member} @deftypefun {OM_uint32} {gss_test_oid_set_member} (OM_uint32 * @var{minor_status}, const gss_OID @var{member}, const gss_OID_set @var{set}, int * @var{present}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{member}: (Object ID, read) The object identifier whose presence is to be tested. @var{set}: (Set of Object ID, read) The Object Identifier set. @var{present}: (Boolean, modify) Non-zero if the specified OID is a member of the set, zero if not. Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by gss_indicate_mechs(), gss_acquire_cred(), and gss_inquire_cred(), but will also work with user-generated sets. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.2/doc/texi/gss_compare_name.texi0000644000000000000000000000205611663555001015115 00000000000000@subheading gss_compare_name @anchor{gss_compare_name} @deftypefun {OM_uint32} {gss_compare_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{name1}, const gss_name_t @var{name2}, int * @var{name_equal}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{name1}: (gss_name_t, read) Internal-form name. @var{name2}: (gss_name_t, read) Internal-form name. @var{name_equal}: (boolean, modify) Non-zero - names refer to same entity. Zero - names refer to different entities (strictly, the names are not known to refer to the same identity). Allows an application to compare two internal-form names to determine whether they refer to the same entity. If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAMETYPE}: The two names were of incomparable types. @code{GSS_S_BAD_NAME}: One or both of name1 or name2 was ill-formed. @end deftypefun gss-1.0.2/doc/asciidoc.conf0000644000000000000000000000633711361023201012365 00000000000000# # asciidoc.conf # # Asciidoc global configuration file. # Contains backend independent configuration settings that are applied to all # AsciiDoc documents. # [miscellaneous] tabsize=8 textwidth=70 newline=\r\n [glossary] empty= amp=& lt=< gt=> brvbar=| [titles] underlines="==","--","~~","^^","++" subs=specialcharacters,quotes,replacements,macros,glossary # The title cannot start or end with characters that could match a table ruler, # consequently the title must be 2 or more chars. blocktitle=^\.(?P[^\s\.\-~_].*[^\-~_])$ [specialcharacters] &=& <=< >=> [quotes] *=strong '=emphasis `=monospaced [specialwords] strongwords=^\s*NOTE: ^\s*TODO: ^\s*TIP: ^\s*IMPORTANT: ^\s*WARNING: [replacements] \(C\)=© \(TM\)=™ # Paragraphs. [paradef-default] delimiter=(?P<text>\S.*) section=paragraph [paradef-indented] delimiter=(?P<text>\s+.*) section=indentedparagraph presubs=specialcharacters options=listelement [macros] # Inline macros. # Note backslash prefix required for escape processing. [\\]?(?P<name>\w(\w|-)*?):(?P<target>\S*?)(\[(?P<caption>.*?)\])= # Anchor: [[id,xreflabel]] [\\]?\[\[(?P<caption>[\w"].*?)\]\]=anchor2 # Link: <<id,text>> [\\]?<<(?P<caption>[\w"].*?)>>=xref2 # Block macros. ^(?P<name>\w(\w|-)*?)::(?P<target>\S*?)(\[(?P<caption>.*?)\])$=# # Builtin macros. ^(?P<name>\w(\w|-)*?)::(?P<target>\S*?)(\[(?P<caption>.*?)\])$=+ # Delimited blocks. [blockdef-comment] delimiter=^/{3,} options=skip [blockdef-sidebar] delimiter=^\*{3,}(\[(?P<args>.*)\])?\**$ section=sidebarblock options=section,argsline [blockdef-custom] delimiter=^\+{3,}(\[(?P<args>.*)\])?\+*$ section=customblock presubs=macros,glossary [blockdef-verbatim] delimiter=^-{3,}(\[(?P<args>.*)\])?-*$ section=verbatimblock presubs=specialcharacters [blockdef-indented] delimiter=^\.{3,}(\[(?P<args>.*)\])?\.*$ section=indentedblock presubs=specialcharacters [blockdef-quote] delimiter=^_{3,}(\[(?P<args>.*)\])?_*$ section=quoteblock options=section,argsline # Lists. [listdef-itemized] type=simple delimiter=^\s*- {1,}(?P<text>.+)$ listtag=ilist itemtag=ilistitem texttag=ilisttext [listdef-ordered] type=simple delimiter=^\s*\d*\. {1,}(?P<text>.+)$ listtag=olist itemtag=olistitem texttag=olisttext [listdef-variable] type=variable delimiter=^\s*(?P<text>[\S].*)::$ listtag=vlist itemtag=vlistitem texttag=vlisttext entrytag=vlistentry termtag=vlistterm [listdef-qanda] # Question and Answer list. type=variable delimiter=^\s*(?P<text>[\S].*)\?\?$ listtag=qlist itemtag=qlistitem texttag=qlisttext entrytag=qlistentry termtag=qlistterm # Bibliography list. [listdef-bibliography] type=simple delimiter=^\+ {1,}(?P<text>.+)$ listtag=blist itemtag=blistitem texttag=blisttext # Glossary list. [listdef-glossary] type=variable delimiter=^(?P<text>[\S].*):-$ listtag=glist itemtag=glistitem texttag=glisttext entrytag=glistentry termtag=glistterm # Alternative list syntaxes. [listdef-itemized2] type=simple delimiter=^\s*\* {1,}(?P<text>.+)$ listtag=ilist itemtag=ilistitem texttag=ilisttext [listdef-ordered2] type=simple delimiter=^\s*[.a-z]\. {1,}(?P<text>.+)$ listtag=olist2 itemtag=olistitem texttag=olisttext # Tables. [tabledef-default] fillchar=- format=fixed [tabledef-csv] fillchar=~ format=csv [tabledef-dsv] fillchar=_ format=dsv �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/����������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�11663555057�010612� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_release_buffer.3��������������������������������������������������������������0000644�0000000�0000000�00000003374�11663555007�014445� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_release_buffer" 3 "1.0.2" "gss" "gss" .SH NAME gss_release_buffer \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_release_buffer(OM_uint32 * " minor_status ", gss_buffer_t " buffer ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "gss_buffer_t buffer" 12 (buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed. .SH "DESCRIPTION" Free storage associated with a buffer. The storage must have been allocated by a GSS\-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS\-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer). .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_userok.3����������������������������������������������������������������������0000644�0000000�0000000�00000002702�11663555007�012776� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_userok" 3 "1.0.2" "gss" "gss" .SH NAME gss_userok \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "int gss_userok(const gss_name_t " name ", const char * " username ");" .SH ARGUMENTS .IP "const gss_name_t name" 12 (gss_name_t, read) Name to be compared. .IP "const char * username" 12 Zero terminated string with username. .SH "DESCRIPTION" Compare the username against the output from \fBgss_export_name()\fP invoked on \fIname\fP, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal .SH "WARNING" This function is a GNU GSS specific extension, and is not part of the official GSS API. .SH "RETURN VALUE" Returns 0 if the names match, non\-0 otherwise. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ��������������������������������������������������������������gss-1.0.2/doc/man/gss_add_cred.3��������������������������������������������������������������������0000644�0000000�0000000�00000020653�11663555007�013220� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_add_cred" 3 "1.0.2" "gss" "gss" .SH NAME gss_add_cred \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_add_cred(OM_uint32 * " minor_status ", const gss_cred_id_t " input_cred_handle ", const gss_name_t " desired_name ", const gss_OID " desired_mech ", gss_cred_usage_t " cred_usage ", OM_uint32 " initiator_time_req ", OM_uint32 " acceptor_time_req ", gss_cred_id_t * " output_cred_handle ", gss_OID_set * " actual_mechs ", OM_uint32 * " initiator_time_rec ", OM_uint32 * " acceptor_time_rec ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_cred_id_t input_cred_handle" 12 (gss_cred_id_t, read, optional) The credential to which a credential\-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential\-handle is not modified by \fBgss_add_cred()\fP, the underlying credential will be modified if output_credential_handle is NULL. .IP "const gss_name_t desired_name" 12 (gss_name_t, read.) Name of principal whose credential should be acquired. .IP "const gss_OID desired_mech" 12 (Object ID, read) Underlying security mechanism with which the credential may be used. .IP "gss_cred_usage_t cred_usage" 12 (gss_cred_usage_t, read) GSS_C_BOTH \- Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE \- Credential will only be used to initiate security contexts. GSS_C_ACCEPT \- Credential will only be used to accept security contexts. .IP "OM_uint32 initiator_time_req" 12 (Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. .IP "OM_uint32 acceptor_time_req" 12 (Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. .IP "gss_cred_id_t * output_cred_handle" 12 (gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential\-element and all the credential\-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential\-elements from the input_cred_handle and the newly acquired credential\-element; if NULL is specified for this parameter, the newly acquired credential\-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to \fBgss_release_cred()\fP. .IP "gss_OID_set * actual_mechs" 12 (Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID\-set must be freed by the application after use with a call to \fBgss_release_oid_set()\fP. Specify NULL if not required. .IP "OM_uint32 * initiator_time_rec" 12 (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required .IP "OM_uint32 * acceptor_time_rec" 12 (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required .SH "DESCRIPTION" Adds a credential\-element to a credential. The credential\-element is identified by the name of the principal to which it refers. GSS\-API implementations must impose a local access\-control policy on callers of this routine to prevent unauthorized callers from acquiring credential\-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism\-specific authentication data, rather than merely acquiring a GSS\-API handle to existing data. Such functions, if required, should be defined in implementation\-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to \fBgss_init_sec_context()\fP (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or \fBgss_accept_sec_context()\fP (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism\-specific ways of obtaining GSS\-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time\-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism\-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. This routine can be used to either compose a new credential containing all credential\-elements of the original in addition to the newly\-acquire credential\-element, or to add the new credential\- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential\-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to \fBgss_acquire_cred()\fP, specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to \fBgss_add_cred()\fP, and finally called \fBgss_release_cred()\fP on the first credential handle. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non\-NULL output_cred_handle must be supplied. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: Unavailable mechanism requested. `GSS_S_BAD_NAMETYPE`: Type contained within desired_name parameter is not supported. `GSS_S_BAD_NAME`: Value supplied for desired_name parameter is ill\-formed. `GSS_S_DUPLICATE_ELEMENT`: The credential already contains an element for the requested mechanism with overlapping usage and validity period. `GSS_S_CREDENTIALS_EXPIRED`: The required credentials could not be added because they have expired. `GSS_S_NO_CRED`: No credentials were found for the specified name. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_accept_sec_context.3����������������������������������������������������������0000644�0000000�0000000�00000031242�11663555007�015324� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_accept_sec_context" 3 "1.0.2" "gss" "gss" .SH NAME gss_accept_sec_context \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_accept_sec_context(OM_uint32 * " minor_status ", gss_ctx_id_t * " context_handle ", const gss_cred_id_t " acceptor_cred_handle ", const gss_buffer_t " input_token_buffer ", const gss_channel_bindings_t " input_chan_bindings ", gss_name_t * " src_name ", gss_OID * " mech_type ", gss_buffer_t " output_token ", OM_uint32 * " ret_flags ", OM_uint32 * " time_rec ", gss_cred_id_t * " delegated_cred_handle ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "gss_ctx_id_t * context_handle" 12 (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once \fBgss_accept_sec_context()\fP has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to \fBgss_delete_sec_context()\fP. .IP "const gss_cred_id_t acceptor_cred_handle" 12 (gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned. .IP "const gss_buffer_t input_token_buffer" 12 (buffer, opaque, read) Token obtained from remote application. .IP "const gss_channel_bindings_t input_chan_bindings" 12 (channel bindings, read, optional) Application\- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS. .IP "gss_name_t * src_name" 12 (gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to \fBgss_release_name()\fP. If not required, specify NULL. .IP "gss_OID * mech_type" 12 (Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read\-only by the caller (in particular, it does not need to be freed). If not required, specify NULL. .IP "gss_buffer_t output_token" 12 (buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non\- zero length field is returned, the associated storage must be freed after use by the application with a call to \fBgss_release_buffer()\fP. .IP "OM_uint32 * ret_flags" 12 (bit\-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically\-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. .IP "OM_uint32 * time_rec" 12 (Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required. .IP "gss_cred_id_t * delegated_cred_handle" 12 (gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, \fBgss_accept_sec_context()\fP will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to \fBgss_release_cred()\fP. Specify NULL if not required. .SH "DESCRIPTION" Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop: \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; do { receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token\->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token); }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; }; } while (maj_stat & GSS_S_CONTINUE_NEEDED); \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per\-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE. The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established. Although this requires that GSS\-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS\-API. Instead, applications should be prepared to use per\-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context. If the initial call of \fBgss_accept_sec_context()\fP fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half\-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS\-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS\-API specification, so applications that wish to run over version 1 implementations must special\-case these codes. The `ret_flags` values: `GSS_C_DELEG_FLAG`:: \- True \- Delegated credentials are available via the delegated_cred_handle parameter. \- False \- No credentials were delegated. `GSS_C_MUTUAL_FLAG`:: \- True \- Remote peer asked for mutual authentication. \- False \- Remote peer did not ask for mutual authentication. `GSS_C_REPLAY_FLAG`:: \- True \- replay of protected messages will be detected. \- False \- replayed messages will not be detected. `GSS_C_SEQUENCE_FLAG`:: \- True \- out\-of\-sequence protected messages will be detected. \- False \- out\-of\-sequence messages will not be detected. `GSS_C_CONF_FLAG`:: \- True \- Confidentiality service may be invoked by calling the gss_wrap routine. \- False \- No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data\-origin authentication and integrity services only. `GSS_C_INTEG_FLAG`:: \- True \- Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. \- False \- Per\-message integrity service unavailable. `GSS_C_ANON_FLAG`:: \- True \- The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name. \- False \- The initiator has been authenticated normally. `GSS_C_PROT_READY_FLAG`:: \- True \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. \- False \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. `GSS_C_TRANS_FLAG`:: \- True \- The resultant security context may be transferred to other processes via a call to \fBgss_export_sec_context()\fP. \- False \- The security context is not transferable. All other bits should be set to zero. .SH "RETURN VALUE" `GSS_S_CONTINUE_NEEDED`: Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token. `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks performed on the input_token failed. `GSS_S_DEFECTIVE_CREDENTIAL`: Indicates that consistency checks performed on the credential failed. `GSS_S_NO_CRED`: The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. `GSS_S_BAD_BINDINGS`: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. `GSS_S_NO_CONTEXT`: Indicates that the supplied context handle did not refer to a valid context. `GSS_S_BAD_SIG`: The input_token contains an invalid MIC. `GSS_S_OLD_TOKEN`: The input_token was too old. This is a fatal error during context establishment. `GSS_S_DUPLICATE_TOKEN`: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. `GSS_S_BAD_MECH`: The received token specified a mechanism that is not supported by the implementation or the provided credential. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_oid_equal.3�������������������������������������������������������������������0000644�0000000�0000000�00000002561�11663555007�013433� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_oid_equal" 3 "1.0.2" "gss" "gss" .SH NAME gss_oid_equal \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "int gss_oid_equal(gss_const_OID " first_oid ", gss_const_OID " second_oid ");" .SH ARGUMENTS .IP "gss_const_OID first_oid" 12 (Object ID, read) First Object identifier. .IP "gss_const_OID second_oid" 12 (Object ID, read) First Object identifier. .SH "DESCRIPTION" Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339. .SH "RETURN VALUE" Returns boolean value true when the two OIDs are equal, otherwise false. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_acquire_cred.3����������������������������������������������������������������0000644�0000000�0000000�00000013067�11663555007�014122� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_acquire_cred" 3 "1.0.2" "gss" "gss" .SH NAME gss_acquire_cred \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_acquire_cred(OM_uint32 * " minor_status ", const gss_name_t " desired_name ", OM_uint32 " time_req ", const gss_OID_set " desired_mechs ", gss_cred_usage_t " cred_usage ", gss_cred_id_t * " output_cred_handle ", gss_OID_set * " actual_mechs ", OM_uint32 * " time_rec ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_name_t desired_name" 12 (gss_name_t, read) Name of principal whose credential should be acquired. .IP "OM_uint32 time_req" 12 (Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime. .IP "const gss_OID_set desired_mechs" 12 (Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation\-specific default. .IP "gss_cred_usage_t cred_usage" 12 (gss_cred_usage_t, read) GSS_C_BOTH \- Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE \- Credentials will only be used to initiate security contexts. GSS_C_ACCEPT \- Credentials will only be used to accept security contexts. .IP "gss_cred_id_t * output_cred_handle" 12 (gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to \fBgss_release_cred()\fP. .IP "gss_OID_set * actual_mechs" 12 (Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID\-set must be released by the application after use with a call to \fBgss_release_oid_set()\fP. Specify NULL if not required. .IP "OM_uint32 * time_rec" 12 (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .SH "DESCRIPTION" Allows an application to acquire a handle for a pre\-existing credential by name. GSS\-API implementations must impose a local access\-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation\-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to \fBgss_init_sec_context()\fP (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or \fBgss_accept_sec_context()\fP (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined. This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism\-specific ways of obtaining GSS\-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time\-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism\-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: Unavailable mechanism requested. `GSS_S_BAD_NAMETYPE`: Type contained within desired_name parameter is not supported. `GSS_S_BAD_NAME`: Value supplied for desired_name parameter is ill formed. `GSS_S_CREDENTIALS_EXPIRED`: The credentials could not be acquired Because they have expired. `GSS_S_NO_CRED`: No credentials were found for the specified name. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_export_name.3�����������������������������������������������������������������0000644�0000000�0000000�00000004050�11663555007�014005� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_export_name" 3 "1.0.2" "gss" "gss" .SH NAME gss_export_name \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_export_name(OM_uint32 * " minor_status ", const gss_name_t " input_name ", gss_buffer_t " exported_name ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t input_name" 12 (gss_name_t, read) The MN to be exported. .IP "gss_buffer_t exported_name" 12 (gss_buffer_t, octet\-string, modify) The canonical contiguous string form of \fIinput_name\fP. Storage associated with this string must freed by the application after use with \fBgss_release_buffer()\fP. .SH "DESCRIPTION" To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access\-control list). The \fIinput_name\fP parameter must specify a valid MN (i.e. an internal name generated by \fBgss_accept_sec_context()\fP or by \fBgss_canonicalize_name()\fP). .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NAME_NOT_MN`: The provided internal name was not a mechanism name. `GSS_S_BAD_NAME`: The provided internal name was ill\-formed. `GSS_S_BAD_NAMETYPE`: The internal name was of a type not supported by the GSS\-API implementation. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_unwrap.3����������������������������������������������������������������������0000644�0000000�0000000�00000006444�11663555007�013011� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_unwrap" 3 "1.0.2" "gss" "gss" .SH NAME gss_unwrap \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_unwrap(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", const gss_buffer_t " input_message_buffer ", gss_buffer_t " output_message_buffer ", int * " conf_state ", gss_qop_t * " qop_state ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Identifies the context on which the message arrived. .IP "const gss_buffer_t input_message_buffer" 12 (buffer, opaque, read) Protected message. .IP "gss_buffer_t output_message_buffer" 12 (buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to \fBgss_release_buffer()\fP. .IP "int * conf_state" 12 (boolean, modify, optional) Non\-zero \- Confidentiality and integrity protection were used. Zero \- Integrity service only was used. Specify NULL if not required. .IP "gss_qop_t * qop_state" 12 (gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required. .SH "DESCRIPTION" Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services. Since some application\-level protocols may wish to use tokens emitted by \fBgss_wrap()\fP to provide "secure framing", implementations must support the wrapping and unwrapping of zero\-length messages. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_DEFECTIVE_TOKEN`: The token failed consistency checks. `GSS_S_BAD_SIG`: The MIC was incorrect. `GSS_S_DUPLICATE_TOKEN`: The token was valid, and contained a correct MIC for the message, but it had already been processed. `GSS_S_OLD_TOKEN`: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. `GSS_S_UNSEQ_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. `GSS_S_GAP_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_delete_sec_context.3����������������������������������������������������������0000644�0000000�0000000�00000006320�11663555007�015326� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_delete_sec_context" 3 "1.0.2" "gss" "gss" .SH NAME gss_delete_sec_context \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_delete_sec_context(OM_uint32 * " minor_status ", gss_ctx_id_t * " context_handle ", gss_buffer_t " output_token ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "gss_ctx_id_t * context_handle" 12 (gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS\-API will set this context handle to GSS_C_NO_CONTEXT. .IP "gss_buffer_t output_token" 12 (buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer. .SH "DESCRIPTION" Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS\-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle. In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half\-built" security contexts resulting from an incomplete sequence of \fBgss_init_sec_context()\fP/\fBgss_accept_sec_context()\fP calls. The output_token parameter is retained for compatibility with version 1 of the GSS\-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero\-length token, indicating that no peer action is necessary, and that no token should be transferred by the application. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: No valid context was supplied. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_release_cred.3����������������������������������������������������������������0000644�0000000�0000000�00000003110�11663555007�014075� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_release_cred" 3 "1.0.2" "gss" "gss" .SH NAME gss_release_cred \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_release_cred(OM_uint32 * " minor_status ", gss_cred_id_t * " cred_handle ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "gss_cred_id_t * cred_handle" 12 (gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing. .SH "DESCRIPTION" Informs GSS\-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CRED`: Credentials could not be accessed. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_context_time.3����������������������������������������������������������������0000644�0000000�0000000�00000003165�11663555007�014174� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_context_time" 3 "1.0.2" "gss" "gss" .SH NAME gss_context_time \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_context_time(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", OM_uint32 * " time_rec ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Implementation specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Identifies the context to be interrogated. .IP "OM_uint32 * time_rec" 12 (Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned. .SH "DESCRIPTION" Determines the number of seconds for which the specified context will remain valid. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_import_name.3�����������������������������������������������������������������0000644�0000000�0000000�00000004761�11663555007�014007� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_import_name" 3 "1.0.2" "gss" "gss" .SH NAME gss_import_name \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_import_name(OM_uint32 * " minor_status ", const gss_buffer_t " input_name_buffer ", const gss_OID " input_name_type ", gss_name_t * " output_name ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_buffer_t input_name_buffer" 12 (buffer, octet\-string, read) Buffer containing contiguous string name to convert. .IP "const gss_OID input_name_type" 12 (Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism\-specific default printable syntax, or an OID recognized by the GSS\-API implementation to name a specific namespace. .IP "gss_name_t * output_name" 12 (gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. .SH "DESCRIPTION" Convert a contiguous string name to internal form. In general, the internal name returned (via the \fIoutput_name\fP parameter) will not be an MN; the exception to this is if the \fIinput_name_type\fP indicates that the contiguous string provided via the \fIinput_name_buffer\fP parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAMETYPE`: The input_name_type was unrecognized. `GSS_S_BAD_NAME`: The input_name parameter could not be interpreted as a name of the specified type. `GSS_S_BAD_MECH`: The input name\-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input\-name is not supported. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ���������������gss-1.0.2/doc/man/gss_wrap_size_limit.3�������������������������������������������������������������0000644�0000000�0000000�00000006546�11663555007�014701� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_wrap_size_limit" 3 "1.0.2" "gss" "gss" .SH NAME gss_wrap_size_limit \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_wrap_size_limit(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", int " conf_req_flag ", gss_qop_t " qop_req ", OM_uint32 " req_output_size ", OM_uint32 * " max_input_size ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent. .IP "int conf_req_flag" 12 (Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details. .IP "gss_qop_t qop_req" 12 (gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details. .IP "OM_uint32 req_output_size" 12 (Integer, read) The desired maximum size for tokens emitted by gss_wrap. .IP "OM_uint32 * max_input_size" 12 (Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes. .SH "DESCRIPTION" Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes. This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection. GSS\-API implementations are recommended but not required to detect invalid QOP values when \fBgss_wrap_size_limit()\fP is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection. Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: The referenced context could not be accessed. `GSS_S_CONTEXT_EXPIRED`: The context has expired. `GSS_S_BAD_QOP`: The specified QOP is not supported by the mechanism. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_verify_mic.3������������������������������������������������������������������0000644�0000000�0000000�00000005577�11663555007�013637� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_verify_mic" 3 "1.0.2" "gss" "gss" .SH NAME gss_verify_mic \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_verify_mic(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", const gss_buffer_t " message_buffer ", const gss_buffer_t " token_buffer ", gss_qop_t * " qop_state ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Identifies the context on which the message arrived. .IP "const gss_buffer_t message_buffer" 12 (buffer, opaque, read) Message to be verified. .IP "const gss_buffer_t token_buffer" 12 (buffer, opaque, read) Token associated with message. .IP "gss_qop_t * qop_state" 12 (gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required. .SH "DESCRIPTION" Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message. Since some application\-level protocols may wish to use tokens emitted by \fBgss_wrap()\fP to provide "secure framing", implementations must support the calculation and verification of MICs over zero\-length messages. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_DEFECTIVE_TOKEN`: The token failed consistency checks. `GSS_S_BAD_SIG`: The MIC was incorrect. `GSS_S_DUPLICATE_TOKEN`: The token was valid, and contained a correct MIC for the message, but it had already been processed. `GSS_S_OLD_TOKEN`: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. `GSS_S_UNSEQ_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. `GSS_S_GAP_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ���������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_indicate_mechs.3��������������������������������������������������������������0000644�0000000�0000000�00000002710�11663555007�014424� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_indicate_mechs" 3 "1.0.2" "gss" "gss" .SH NAME gss_indicate_mechs \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_indicate_mechs(OM_uint32 * " minor_status ", gss_OID_set * " mech_set ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "gss_OID_set * mech_set" 12 (set of Object IDs, modify) Set of implementation\-supported mechanisms. The returned gss_OID_set value will be a dynamically\-allocated OID set, that should be released by the caller after use with a call to \fBgss_release_oid_set()\fP. .SH "DESCRIPTION" Allows an application to determine which underlying security mechanisms are available. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ��������������������������������������������������������gss-1.0.2/doc/man/gss_inquire_context.3�������������������������������������������������������������0000644�0000000�0000000�00000013356�11663555007�014715� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_context" 3 "1.0.2" "gss" "gss" .SH NAME gss_inquire_context \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_inquire_context(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", gss_name_t * " src_name ", gss_name_t * " targ_name ", OM_uint32 * " lifetime_rec ", gss_OID * " mech_type ", OM_uint32 * " ctx_flags ", int * " locally_initiated ", int * " open ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) A handle that refers to the security context. .IP "gss_name_t * src_name" 12 (gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. Specify NULL if not required. .IP "gss_name_t * targ_name" 12 (gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to \fBgss_init_sec_context()\fP, the value GSS_C_NO_NAME will be returned. Specify NULL if not required. .IP "OM_uint32 * lifetime_rec" 12 (Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .IP "gss_OID * mech_type" 12 (gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read\-only by the application; in particular the application should not attempt to free it. Specify NULL if not required. .IP "OM_uint32 * ctx_flags" 12 (bit\-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically\-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. .IP "int * locally_initiated" 12 (Boolean, modify) Non\-zero if the invoking application is the context initiator. Specify NULL if not required. .IP "int * open" 12 (Boolean, modify) Non\-zero if the context is fully established; Zero if a context\-establishment token is expected from the peer application. Specify NULL if not required. .SH "DESCRIPTION" Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established. The `ctx_flags` values: `GSS_C_DELEG_FLAG`:: \- True \- Credentials were delegated from the initiator to the acceptor. \- False \- No credentials were delegated. `GSS_C_MUTUAL_FLAG`:: \- True \- The acceptor was authenticated to the initiator. \- False \- The acceptor did not authenticate itself. `GSS_C_REPLAY_FLAG`:: \- True \- replay of protected messages will be detected. \- False \- replayed messages will not be detected. `GSS_C_SEQUENCE_FLAG`:: \- True \- out\-of\-sequence protected messages will be detected. \- False \- out\-of\-sequence messages will not be detected. `GSS_C_CONF_FLAG`:: \- True \- Confidentiality service may be invoked by calling gss_wrap routine. \- False \- No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data\-origin authentication and integrity services only. `GSS_C_INTEG_FLAG`:: \- True \- Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. \- False \- Per\-message integrity service unavailable. `GSS_C_ANON_FLAG`:: \- True \- The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name. \- False \- The initiator has been authenticated normally. `GSS_C_PROT_READY_FLAG`:: \- True \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. \- False \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non\-zero). `GSS_C_TRANS_FLAG`:: \- True \- The resultant security context may be transferred to other processes via a call to \fBgss_export_sec_context()\fP. \- False \- The security context is not transferable. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: The referenced context could not be accessed. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_import_sec_context.3����������������������������������������������������������0000644�0000000�0000000�00000003667�11663555007�015411� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_import_sec_context" 3 "1.0.2" "gss" "gss" .SH NAME gss_import_sec_context \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_import_sec_context(OM_uint32 * " minor_status ", const gss_buffer_t " interprocess_token ", gss_ctx_id_t * " context_handle ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_buffer_t interprocess_token" 12 (buffer, opaque, modify) Token received from exporting process .IP "gss_ctx_id_t * context_handle" 12 (gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to \fBgss_delete_sec_context()\fP. .SH "DESCRIPTION" Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: The token did not contain a valid context reference. `GSS_S_DEFECTIVE_TOKEN`: The token was invalid. `GSS_S_UNAVAILABLE`: The operation is unavailable. `GSS_S_UNAUTHORIZED`: Local policy prevents the import of this context by the current process. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �������������������������������������������������������������������������gss-1.0.2/doc/man/gss_export_sec_context.3����������������������������������������������������������0000644�0000000�0000000�00000007533�11663555007�015414� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_export_sec_context" 3 "1.0.2" "gss" "gss" .SH NAME gss_export_sec_context \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_export_sec_context(OM_uint32 * " minor_status ", gss_ctx_id_t * " context_handle ", gss_buffer_t " interprocess_token ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "gss_ctx_id_t * context_handle" 12 (gss_ctx_id_t, modify) Context handle identifying the context to transfer. .IP "gss_buffer_t interprocess_token" 12 (buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Provided to support the sharing of work between multiple processes. This routine will typically be used by the context\-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. \fBgss_export_sec_context()\fP deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re\-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail. The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group. The interprocess token may contain security\-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object\-library GSS\-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy. If creation of the interprocess token is successful, the implementation shall deallocate all process\-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has expired. `GSS_S_NO_CONTEXT`: The context was invalid. `GSS_S_UNAVAILABLE`: The operation is not supported. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_get_mic.3���������������������������������������������������������������������0000644�0000000�0000000�00000005205�11663555007�013076� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_get_mic" 3 "1.0.2" "gss" "gss" .SH NAME gss_get_mic \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_get_mic(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", gss_qop_t " qop_req ", const gss_buffer_t " message_buffer ", gss_buffer_t " message_token ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Identifies the context on which the message will be sent. .IP "gss_qop_t qop_req" 12 (gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP. .IP "const gss_buffer_t message_buffer" 12 (buffer, opaque, read) Message to be protected. .IP "gss_buffer_t message_token" 12 (buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application\-level protocols may wish to use tokens emitted by \fBgss_wrap()\fP to provide "secure framing", implementations must support derivation of MICs from zero\-length messages. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context. `GSS_S_BAD_QOP`: The specified QOP is not supported by the mechanism. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_display_name.3����������������������������������������������������������������0000644�0000000�0000000�00000004735�11663555007�014143� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_display_name" 3 "1.0.2" "gss" "gss" .SH NAME gss_display_name \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_display_name(OM_uint32 * " minor_status ", const gss_name_t " input_name ", gss_buffer_t " output_name_buffer ", gss_OID * " output_name_type ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t input_name" 12 (gss_name_t, read) Name to be displayed. .IP "gss_buffer_t output_name_buffer" 12 (buffer, character\-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to \fBgss_release_buffer()\fP. .IP "gss_OID * output_name_type" 12 (Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read\-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required. .SH "DESCRIPTION" Allows an application to obtain a textual representation of an opaque internal\-form name for display purposes. The syntax of a printable name is defined by the GSS\-API implementation. If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer. If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name\-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: \fIinput_name\fP was ill\-formed. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �����������������������������������gss-1.0.2/doc/man/gss_wrap.3������������������������������������������������������������������������0000644�0000000�0000000�00000006024�11663555007�012440� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_wrap" 3 "1.0.2" "gss" "gss" .SH NAME gss_wrap \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_wrap(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", int " conf_req_flag ", gss_qop_t " qop_req ", const gss_buffer_t " input_message_buffer ", int * " conf_state ", gss_buffer_t " output_message_buffer ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Identifies the context on which the message will be sent. .IP "int conf_req_flag" 12 (boolean, read) Non\-zero \- Both confidentiality and integrity services are requested. Zero \- Only integrity service is requested. .IP "gss_qop_t qop_req" 12 (gss_qop_t, read, optional) Specifies required quality of protection. A mechanism\-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP. .IP "const gss_buffer_t input_message_buffer" 12 (buffer, opaque, read) Message to be protected. .IP "int * conf_state" 12 (boolean, modify, optional) Non\-zero \- Confidentiality, data origin authentication and integrity services have been applied. Zero \- Integrity and data origin services only has been applied. Specify NULL if not required. .IP "gss_buffer_t output_message_buffer" 12 (buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application\-level protocols may wish to use tokens emitted by \fBgss_wrap()\fP to provide "secure framing", implementations must support the wrapping of zero\-length messages. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context. `GSS_S_BAD_QOP`: The specified QOP is not supported by the mechanism. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_check_version.3���������������������������������������������������������������0000644�0000000�0000000�00000002602�11663555007�014307� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_check_version" 3 "1.0.2" "gss" "gss" .SH NAME gss_check_version \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "const char * gss_check_version(const char * " req_version ");" .SH ARGUMENTS .IP "const char * req_version" 12 version string to compare with, or NULL .SH "DESCRIPTION" Check that the version of the library is at minimum the one given as a string in \fIreq_version\fP. .SH "WARNING" This function is a GNU GSS specific extension, and is not part of the official GSS API. .SH "RETURN VALUE" The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_release_name.3����������������������������������������������������������������0000644�0000000�0000000�00000002553�11663555007�014112� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_release_name" 3 "1.0.2" "gss" "gss" .SH NAME gss_release_name \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_release_name(OM_uint32 * " minor_status ", gss_name_t * " name ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "gss_name_t * name" 12 (gss_name_t, modify) The name to be deleted. .SH "DESCRIPTION" Free GSSAPI\-allocated storage associated with an internal\-form name. The name is set to GSS_C_NO_NAME on successful completion of this call. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: The name parameter did not contain a valid name. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_add_oid_set_member.3����������������������������������������������������������0000644�0000000�0000000�00000004126�11663555007�015255� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_add_oid_set_member" 3 "1.0.2" "gss" "gss" .SH NAME gss_add_oid_set_member \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_add_oid_set_member(OM_uint32 * " minor_status ", const gss_OID " member_oid ", gss_OID_set * " oid_set ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_OID member_oid" 12 (Object ID, read) The object identifier to copied into the set. .IP "gss_OID_set * oid_set" 12 (Set of Object ID, modify) The set in which the object identifier should be inserted. .SH "DESCRIPTION" Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID\-set that was created by GSS\-API (e.g. a set returned by \fBgss_create_empty_oid_set()\fP). GSS\-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID\-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_inquire_mechs_for_name.3������������������������������������������������������0000644�0000000�0000000�00000004744�11663555007�016177� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_mechs_for_name" 3 "1.0.2" "gss" "gss" .SH NAME gss_inquire_mechs_for_name \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_inquire_mechs_for_name(OM_uint32 * " minor_status ", const gss_name_t " input_name ", gss_OID_set * " mech_types ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t input_name" 12 (gss_name_t, read) The name to which the inquiry relates. .IP "gss_OID_set * mech_types" 12 (gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to \fBgss_release_oid_set()\fP. .SH "DESCRIPTION" Returns the set of mechanisms supported by the GSS\-API implementation that may be able to process the specified name. Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism\-independent GSS\-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism\-specific routine. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: The input_name parameter was ill\-formed. `GSS_S_BAD_NAMETYPE`: The input_name parameter contained an invalid or unsupported type of name. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ����������������������������gss-1.0.2/doc/man/gss_inquire_names_for_mech.3������������������������������������������������������0000644�0000000�0000000�00000003011�11663555007�016161� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_names_for_mech" 3 "1.0.2" "gss" "gss" .SH NAME gss_inquire_names_for_mech \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_inquire_names_for_mech(OM_uint32 * " minor_status ", const gss_OID " mechanism ", gss_OID_set * " name_types ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_OID mechanism" 12 (gss_OID, read) The mechanism to be interrogated. .IP "gss_OID_set * name_types" 12 (gss_OID_set, modify) Set of name\-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to \fBgss_release_oid_set()\fP. .SH "DESCRIPTION" Returns the set of nametypes supported by the specified mechanism. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_compare_name.3����������������������������������������������������������������0000644�0000000�0000000�00000003556�11663555007�014124� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_compare_name" 3 "1.0.2" "gss" "gss" .SH NAME gss_compare_name \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_compare_name(OM_uint32 * " minor_status ", const gss_name_t " name1 ", const gss_name_t " name2 ", int * " name_equal ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t name1" 12 (gss_name_t, read) Internal\-form name. .IP "const gss_name_t name2" 12 (gss_name_t, read) Internal\-form name. .IP "int * name_equal" 12 (boolean, modify) Non\-zero \- names refer to same entity. Zero \- names refer to different entities (strictly, the names are not known to refer to the same identity). .SH "DESCRIPTION" Allows an application to compare two internal\-form names to determine whether they refer to the same entity. If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAMETYPE`: The two names were of incomparable types. `GSS_S_BAD_NAME`: One or both of name1 or name2 was ill\-formed. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ��������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_create_empty_oid_set.3��������������������������������������������������������0000644�0000000�0000000�00000003165�11663555007�015661� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_create_empty_oid_set" 3 "1.0.2" "gss" "gss" .SH NAME gss_create_empty_oid_set \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_create_empty_oid_set(OM_uint32 * " minor_status ", gss_OID_set * " oid_set ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "gss_OID_set * oid_set" 12 (Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to \fBgss_release_oid_set()\fP. .SH "DESCRIPTION" Create an object\-identifier set containing no object identifiers, to which members may be subsequently added using the \fBgss_add_oid_set_member()\fP routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_inquire_cred_by_mech.3��������������������������������������������������������0000644�0000000�0000000�00000006637�11663555007�015640� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_cred_by_mech" 3 "1.0.2" "gss" "gss" .SH NAME gss_inquire_cred_by_mech \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_inquire_cred_by_mech(OM_uint32 * " minor_status ", const gss_cred_id_t " cred_handle ", const gss_OID " mech_type ", gss_name_t * " name ", OM_uint32 * " initiator_lifetime ", OM_uint32 * " acceptor_lifetime ", gss_cred_usage_t * " cred_usage ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_cred_id_t cred_handle" 12 (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. .IP "const gss_OID mech_type" 12 (gss_OID, read) The mechanism for which information should be returned. .IP "gss_name_t * name" 12 (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. Specify NULL if not required. .IP "OM_uint32 * initiator_lifetime" 12 (Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .IP "OM_uint32 * acceptor_lifetime" 12 (Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .IP "gss_cred_usage_t * cred_usage" 12 (gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. .SH "DESCRIPTION" Obtains per\-mechanism information about a credential. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CRED`: The referenced credentials could not be accessed. `GSS_S_DEFECTIVE_CREDENTIAL`: The referenced credentials were invalid. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_init_sec_context.3������������������������������������������������������������0000644�0000000�0000000�00000035535�11663555007�015041� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_init_sec_context" 3 "1.0.2" "gss" "gss" .SH NAME gss_init_sec_context \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_init_sec_context(OM_uint32 * " minor_status ", const gss_cred_id_t " initiator_cred_handle ", gss_ctx_id_t * " context_handle ", const gss_name_t " target_name ", const gss_OID " mech_type ", OM_uint32 " req_flags ", OM_uint32 " time_req ", const gss_channel_bindings_t " input_chan_bindings ", const gss_buffer_t " input_token ", gss_OID * " actual_mech_type ", gss_buffer_t " output_token ", OM_uint32 * " ret_flags ", OM_uint32 * " time_rec ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_cred_id_t initiator_cred_handle" 12 (gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED. .IP "gss_ctx_id_t * context_handle" 12 (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context\-handle must be released by the application after use with a call to \fBgss_delete_sec_context()\fP. .IP "const gss_name_t target_name" 12 (gss_name_t, read) Name of target. .IP "const gss_OID mech_type" 12 (OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default. .IP "OM_uint32 req_flags" 12 (bit\-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically\-ORed together to form the bit\-mask value. See below for the flags. .IP "OM_uint32 time_req" 12 (Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period. .IP "const gss_channel_bindings_t input_chan_bindings" 12 (channel bindings, read, optional) Application\-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used. .IP "const gss_buffer_t input_token" 12 (buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call. .IP "gss_OID * actual_mech_type" 12 (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read\-only; In particular the application should not attempt to free it. Specify NULL if not required. .IP "gss_buffer_t output_token" 12 (buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to \fBgss_release_buffer()\fP. .IP "OM_uint32 * ret_flags" 12 (bit\-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically\-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. .IP "OM_uint32 * time_rec" 12 (Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .SH "DESCRIPTION" Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop: \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token\->length = 0; while (!context_established) { maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token\->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; }; if (maj_stat & GSS_S_CONTINUE_NEEDED) { receive_token_from_peer(input_token); } else { context_established = 1; }; }; \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: \- The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per\-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE. \- The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory). \- The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established. \- GSS\-API implementations that support per\-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS\-API. Instead, applications should determine what per\-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. \- All other bits within the ret_flags argument should be set to zero. If the initial call of \fBgss_init_sec_context()\fP fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half\-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS\-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS\-API specification, so applications that wish to run over version 1 implementations must special\-case these codes. The `req_flags` values: `GSS_C_DELEG_FLAG`:: \- True \- Delegate credentials to remote peer. \- False \- Don't delegate. `GSS_C_MUTUAL_FLAG`:: \- True \- Request that remote peer authenticate itself. \- False \- Authenticate self to remote peer only. `GSS_C_REPLAY_FLAG`:: \- True \- Enable replay detection for messages protected with gss_wrap or gss_get_mic. \- False \- Don't attempt to detect replayed messages. `GSS_C_SEQUENCE_FLAG`:: \- True \- Enable detection of out\-of\-sequence protected messages. \- False \- Don't attempt to detect out\-of\-sequence messages. `GSS_C_CONF_FLAG`:: \- True \- Request that confidentiality service be made available (via gss_wrap). \- False \- No per\-message confidentiality service is required. `GSS_C_INTEG_FLAG`:: \- True \- Request that integrity service be made available (via gss_wrap or gss_get_mic). \- False \- No per\-message integrity service is required. `GSS_C_ANON_FLAG`:: \- True \- Do not reveal the initiator's identity to the acceptor. \- False \- Authenticate normally. The `ret_flags` values: `GSS_C_DELEG_FLAG`:: \- True \- Credentials were delegated to the remote peer. \- False \- No credentials were delegated. `GSS_C_MUTUAL_FLAG`:: \- True \- The remote peer has authenticated itself. \- False \- Remote peer has not authenticated itself. `GSS_C_REPLAY_FLAG`:: \- True \- replay of protected messages will be detected. \- False \- replayed messages will not be detected. `GSS_C_SEQUENCE_FLAG`:: \- True \- out\-of\-sequence protected messages will be detected. \- False \- out\-of\-sequence messages will not be detected. `GSS_C_CONF_FLAG`:: \- True \- Confidentiality service may be invoked by calling gss_wrap routine. \- False \- No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data\-origin authentication and integrity services only. `GSS_C_INTEG_FLAG`:: \- True \- Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. \- False \- Per\-message integrity service unavailable. `GSS_C_ANON_FLAG`:: \- True \- The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor. \- False \- The initiator's identity has been or will be authenticated normally. `GSS_C_PROT_READY_FLAG`:: \- True \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. \- False \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. `GSS_C_TRANS_FLAG`:: \- True \- The resultant security context may be transferred to other processes via a call to \fBgss_export_sec_context()\fP. \- False \- The security context is not transferable. All other bits should be set to zero. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTINUE_NEEDED`: Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token. `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks performed on the input_token failed. `GSS_S_DEFECTIVE_CREDENTIAL`: Indicates that consistency checks performed on the credential failed. `GSS_S_NO_CRED`: The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. `GSS_S_BAD_BINDINGS`: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. `GSS_S_BAD_SIG`: The input_token contains an invalid MIC, or a MIC that could not be verified. `GSS_S_OLD_TOKEN`: The input_token was too old. This is a fatal error during context establishment. `GSS_S_DUPLICATE_TOKEN`: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. `GSS_S_NO_CONTEXT`: Indicates that the supplied context handle did not refer to a valid context. `GSS_S_BAD_NAMETYPE`: The provided target_name parameter contained an invalid or unsupported type of name. `GSS_S_BAD_NAME`: The provided target_name parameter was ill\-formed. `GSS_S_BAD_MECH`: The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_inquire_cred.3����������������������������������������������������������������0000644�0000000�0000000�00000005420�11663555007�014137� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_cred" 3 "1.0.2" "gss" "gss" .SH NAME gss_inquire_cred \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_inquire_cred(OM_uint32 * " minor_status ", const gss_cred_id_t " cred_handle ", gss_name_t * " name ", OM_uint32 * " lifetime ", gss_cred_usage_t * " cred_usage ", gss_OID_set * " mechanisms ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_cred_id_t cred_handle" 12 (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. .IP "gss_name_t * name" 12 (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to \fBgss_release_name()\fP. Specify NULL if not required. .IP "OM_uint32 * lifetime" 12 (Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .IP "gss_cred_usage_t * cred_usage" 12 (gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. .IP "gss_OID_set * mechanisms" 12 (gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to \fBgss_release_oid_set()\fP. Specify NULL if not required. .SH "DESCRIPTION" Obtains information about a credential. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CRED`: The referenced credentials could not be accessed. `GSS_S_DEFECTIVE_CREDENTIAL`: The referenced credentials were invalid. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_test_oid_set_member.3���������������������������������������������������������0000644�0000000�0000000�00000003345�11663555007�015506� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_test_oid_set_member" 3 "1.0.2" "gss" "gss" .SH NAME gss_test_oid_set_member \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_test_oid_set_member(OM_uint32 * " minor_status ", const gss_OID " member ", const gss_OID_set " set ", int * " present ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_OID member" 12 (Object ID, read) The object identifier whose presence is to be tested. .IP "const gss_OID_set set" 12 (Set of Object ID, read) The Object Identifier set. .IP "int * present" 12 (Boolean, modify) Non\-zero if the specified OID is a member of the set, zero if not. .SH "DESCRIPTION" Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by \fBgss_indicate_mechs()\fP, \fBgss_acquire_cred()\fP, and \fBgss_inquire_cred()\fP, but will also work with user\-generated sets. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_process_context_token.3�������������������������������������������������������0000644�0000000�0000000�00000004654�11663555007�016120� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_process_context_token" 3 "1.0.2" "gss" "gss" .SH NAME gss_process_context_token \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_process_context_token(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", const gss_buffer_t " token_buffer ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Implementation specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Context handle of context on which token is to be processed .IP "const gss_buffer_t token_buffer" 12 (buffer, opaque, read) Token to process. .SH "DESCRIPTION" Provides a way to pass an asynchronous token to the security service. Most context\-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context\-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks performed on the token failed. `GSS_S_NO_CONTEXT`: The context_handle did not refer to a valid context. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_encapsulate_token.3�����������������������������������������������������������0000644�0000000�0000000�00000003646�11663555006�015201� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_encapsulate_token" 3 "1.0.2" "gss" "gss" .SH NAME gss_encapsulate_token \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "extern OM_uint32 gss_encapsulate_token(gss_const_buffer_t " input_token ", gss_const_OID " token_oid ", gss_buffer_t " output_token ");" .SH ARGUMENTS .IP "gss_const_buffer_t input_token" 12 (buffer, opaque, read) Buffer with GSS\-API context token data. .IP "gss_const_OID token_oid" 12 (Object ID, read) Object identifier of token. .IP "gss_buffer_t output_token" 12 (buffer, opaque, modify) Encapsulated token data; caller must release with \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Add the mechanism\-independent token header to GSS\-API context token data. This is used for the initial token of a GSS\-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS\-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339. .SH "RETURNS" `GSS_S_COMPLETE`: Indicates successful completion, and that output parameters holds correct information. `GSS_S_FAILURE`: Indicates that encapsulation failed for reasons unspecified at the GSS\-API level. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_canonicalize_name.3�����������������������������������������������������������0000644�0000000�0000000�00000004172�11663555007�015130� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_canonicalize_name" 3 "1.0.2" "gss" "gss" .SH NAME gss_canonicalize_name \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_canonicalize_name(OM_uint32 * " minor_status ", const gss_name_t " input_name ", const gss_OID " mech_type ", gss_name_t * " output_name ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t input_name" 12 (gss_name_t, read) The name for which a canonical form is desired. .IP "const gss_OID mech_type" 12 (Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided. .IP "gss_name_t * output_name" 12 (gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. .SH "DESCRIPTION" Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing \fImech_type\fP as its only member, followed by a call to \fBgss_init_sec_context()\fP, specifying \fImech_type\fP as the authentication mechanism. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_release_oid_set.3�������������������������������������������������������������0000644�0000000�0000000�00000003141�11663555007�014612� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_release_oid_set" 3 "1.0.2" "gss" "gss" .SH NAME gss_release_oid_set \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_release_oid_set(OM_uint32 * " minor_status ", gss_OID_set * " set ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "gss_OID_set * set" 12 (Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted. .SH "DESCRIPTION" Free storage associated with a GSSAPI\-generated gss_OID_set object. The set parameter must refer to an OID\-set that was returned from a GSS\-API routine. \fBgss_release_oid_set()\fP will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc. The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_decapsulate_token.3�����������������������������������������������������������0000644�0000000�0000000�00000003717�11663555006�015166� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_decapsulate_token" 3 "1.0.2" "gss" "gss" .SH NAME gss_decapsulate_token \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_decapsulate_token(gss_const_buffer_t " input_token ", gss_const_OID " token_oid ", gss_buffer_t " output_token ");" .SH ARGUMENTS .IP "gss_const_buffer_t input_token" 12 (buffer, opaque, read) Buffer with GSS\-API context token. .IP "gss_const_OID token_oid" 12 (Object ID, read) Expected object identifier of token. .IP "gss_buffer_t output_token" 12 (buffer, opaque, modify) Decapsulated token data; caller must release with \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Remove the mechanism\-independent token header from an initial GSS\-API context token. Unwrap a buffer in the mechanism\-independent token format. This is the reverse of \fBgss_encapsulate_token()\fP. The translation is loss\-less, all data is preserved as is. This function is standardized in RFC 6339. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Indicates successful completion, and that output parameters holds correct information. `GSS_S_DEFECTIVE_TOKEN`: Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors). `GSS_S_FAILURE`: Indicates that decapsulation failed for reasons unspecified at the GSS\-API level. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. �������������������������������������������������gss-1.0.2/doc/man/gss_duplicate_name.3��������������������������������������������������������������0000644�0000000�0000000�00000003343�11663555007�014442� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_duplicate_name" 3 "1.0.2" "gss" "gss" .SH NAME gss_duplicate_name \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_duplicate_name(OM_uint32 * " minor_status ", const gss_name_t " src_name ", gss_name_t * " dest_name ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t src_name" 12 (gss_name_t, read) Internal name to be duplicated. .IP "gss_name_t * dest_name" 12 (gss_name_t, modify) The resultant copy of \fIsrc_name\fP. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. .SH "DESCRIPTION" Create an exact duplicate of the existing internal name \fIsrc_name\fP. The new \fIdest_name\fP will be independent of src_name (i.e. \fIsrc_name\fP and \fIdest_name\fP must both be released, and the release of one shall not affect the validity of the other). .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: The src_name parameter was ill\-formed. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_inquire_saslname_for_mech.3���������������������������������������������������0000644�0000000�0000000�00000004340�11663555007�016667� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_saslname_for_mech" 3 "1.0.2" "gss" "gss" .SH NAME gss_inquire_saslname_for_mech \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_inquire_saslname_for_mech(OM_uint32 * " minor_status ", const gss_OID " desired_mech ", gss_buffer_t " sasl_mech_name ", gss_buffer_t " mech_name ", gss_buffer_t " mech_description ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_OID desired_mech" 12 (OID, read) Identifies the GSS\-API mechanism to query. .IP "gss_buffer_t sasl_mech_name" 12 (buffer, character\-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to \fBgss_release_buffer()\fP. .IP "gss_buffer_t mech_name" 12 (buffer, character\-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to \fBgss_release_buffer()\fP. .IP "gss_buffer_t mech_description" 12 (buffer, character\-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Output the SASL mechanism name of a GSS\-API mechanism. It also returns a name and description of the mechanism in a user friendly form. .SH "RETURNS" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: The \fIdesired_mech\fP OID is unsupported. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_inquire_mech_for_saslname.3���������������������������������������������������0000644�0000000�0000000�00000003321�11663555007�016665� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_mech_for_saslname" 3 "1.0.2" "gss" "gss" .SH NAME gss_inquire_mech_for_saslname \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_inquire_mech_for_saslname(OM_uint32 * " minor_status ", const gss_buffer_t " sasl_mech_name ", gss_OID * " mech_type ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_buffer_t sasl_mech_name" 12 (buffer, character\-string, read) Buffer with SASL mechanism name. .IP "gss_OID * mech_type" 12 (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read\-only; In particular the application should not attempt to free it. Specify NULL if not required. .SH "DESCRIPTION" Output GSS\-API mechanism OID of mechanism associated with given \fIsasl_mech_name\fP. .SH "RETURNS" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: There is no GSS\-API mechanism known as \fIsasl_mech_name\fP. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/man/gss_display_status.3��������������������������������������������������������������0000644�0000000�0000000�00000010540�11663555007�014535� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_display_status" 3 "1.0.2" "gss" "gss" .SH NAME gss_display_status \- API function .SH SYNOPSIS .B #include <gss.h> .sp .BI "OM_uint32 gss_display_status(OM_uint32 * " minor_status ", OM_uint32 " status_value ", int " status_type ", const gss_OID " mech_type ", OM_uint32 * " message_context ", gss_buffer_t " status_string ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "OM_uint32 status_value" 12 (Integer, read) Status value to be converted. .IP "int status_type" 12 (Integer, read) GSS_C_GSS_CODE \- status_value is a GSS status code. GSS_C_MECH_CODE \- status_value is a mechanism status code. .IP "const gss_OID mech_type" 12 (Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default. .IP "OM_uint32 * message_context" 12 (Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from \fBgss_display_status()\fP, a non\-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to \fBgss_display_status()\fP, passing the same status_value, status_type, mech_type, and message_context parameters. .IP "gss_buffer_t status_string" 12 (buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Allows an application to obtain a textual representation of a GSS\-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non\-zero value in this parameter if there are further messages to extract. The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non\-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr: \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string; ... message_context = 0; do { maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string) fprintf(stderr, "%.*s\n", (int)status_string.length, (char *)status_string.value); gss_release_buffer(&min_status, &status_string); } while (message_context != 0); \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: Indicates that translation in accordance with an unsupported mechanism type was requested. `GSS_S_BAD_STATUS`: The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE. .SH "REPORTING BUGS" Report bugs to <bug-gss@gnu.org>. GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2011 Simon Josefsson. .br Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/gss.info������������������������������������������������������������������������������0000644�0000000�0000000�00000726420�11663555006�011435� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gss.info, produced by makeinfo version 4.13 from gss.texi. This manual is last updated 21 November 2011 for version 1.0.2 of GNU GSS. Copyright (C) 2003-2011 Simon Josefsson. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION GNU Libraries START-INFO-DIR-ENTRY * gss: (gss). Generic Security Service API Library END-INFO-DIR-ENTRY  File: gss.info, Node: Top, Next: Introduction, Up: (dir) GNU Generic Security Service Library ************************************ This manual is last updated 21 November 2011 for version 1.0.2 of GNU GSS. Copyright (C) 2003-2011 Simon Josefsson. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". * Menu: * Introduction:: How to use this manual. * Preparation:: What you should do before using the library. * Standard GSS API:: Reference documentation for the Standard API. * Extended GSS API:: Non-standard functions. * Invoking gss:: Command line interface to the library. * Acknowledgements:: Whom to blame. Appendices * Criticism of GSS:: Why you maybe shouldn't use GSS. * Copying Information:: How you can copy and share GSS. Indices * Concept Index:: Index of concepts and programs. * API Index:: Index of functions, variables and data types.  File: gss.info, Node: Introduction, Next: Preparation, Prev: Top, Up: Top 1 Introduction ************** GSS is an implementation of the Generic Security Service Application Program Interface (GSS-API). GSS-API is used by network servers to provide security services, e.g., to authenticate SMTP/IMAP clients against SMTP/IMAP servers. GSS consists of a library and a manual. GSS is developed for the GNU/Linux system, but runs on over 20 platforms including most major Unix platforms and Windows, and many kind of devices including iPAQ handhelds and S/390 mainframes. GSS is a GNU project, and is licensed under the GNU General Public License version 3 or later. * Menu: * Getting Started:: * Features:: * GSS-API Overview:: * Supported Platforms:: * Commercial Support:: * Downloading and Installing:: * Bug Reports:: * Contributing:: * Planned Features::  File: gss.info, Node: Getting Started, Next: Features, Up: Introduction 1.1 Getting Started =================== This manual documents the GSS programming interface. All functions and data types provided by the library are explained. The reader is assumed to possess basic familiarity with GSS-API and network programming in C or C++. For general GSS-API information, and some programming examples, there is a guide available online at `http://docs.sun.com/db/doc/816-1331'. This manual can be used in several ways. If read from the beginning to the end, it gives a good introduction into the library and how it can be used in an application. Forward references are included where necessary. Later on, the manual can be used as a reference manual to get just the information needed about any particular interface of the library. Experienced programmers might want to start looking at the examples at the end of the manual, and then only read up those parts of the interface which are unclear.  File: gss.info, Node: Features, Next: GSS-API Overview, Prev: Getting Started, Up: Introduction 1.2 Features ============ GSS might have a couple of advantages over other libraries doing a similar job. It's Free Software Anybody can use, modify, and redistribute it under the terms of the GNU General Public License version 3 or later. It's thread-safe No global variables are used and multiple library handles and session handles may be used in parallell. It's internationalized It handles non-ASCII names and user visible strings used in the library (e.g., error messages) can be translated into the users' language. It's portable It should work on all Unix like operating systems, including Windows.  File: gss.info, Node: GSS-API Overview, Next: Supported Platforms, Prev: Features, Up: Introduction 1.3 GSS-API Overview ==================== This section describes GSS-API from a protocol point of view. The Generic Security Service Application Programming Interface provides security services to calling applications. It allows a communicating application to authenticate the user associated with another application, to delegate rights to another application, and to apply security services such as confidentiality and integrity on a per-message basis. There are four stages to using the GSS-API: 1. The application acquires a set of credentials with which it may prove its identity to other processes. The application's credentials vouch for its global identity, which may or may not be related to any local username under which it may be running. 2. A pair of communicating applications establish a joint security context using their credentials. The security context is a pair of GSS-API data structures that contain shared state information, which is required in order that per-message security services may be provided. Examples of state that might be shared between applications as part of a security context are cryptographic keys, and message sequence numbers. As part of the establishment of a security context, the context initiator is authenticated to the responder, and may require that the responder is authenticated in turn. The initiator may optionally give the responder the right to initiate further security contexts, acting as an agent or delegate of the initiator. This transfer of rights is termed delegation, and is achieved by creating a set of credentials, similar to those used by the initiating application, but which may be used by the responder. To establish and maintain the shared information that makes up the security context, certain GSS-API calls will return a token data structure, which is an opaque data type that may contain cryptographically protected data. The caller of such a GSS-API routine is responsible for transferring the token to the peer application, encapsulated if necessary in an application- application protocol. On receipt of such a token, the peer application should pass it to a corresponding GSS-API routine which will decode the token and extract the information, updating the security context state information accordingly. 3. Per-message services are invoked to apply either: integrity and data origin authentication, or confidentiality, integrity and data origin authentication to application data, which are treated by GSS-API as arbitrary octet-strings. An application transmitting a message that it wishes to protect will call the appropriate GSS-API routine (gss_get_mic or gss_wrap) to apply protection, specifying the appropriate security context, and send the resulting token to the receiving application. The receiver will pass the received token (and, in the case of data protected by gss_get_mic, the accompanying message-data) to the corresponding decoding routine (gss_verify_mic or gss_unwrap) to remove the protection and validate the data. 4. At the completion of a communications session (which may extend across several transport connections), each application calls a GSS-API routine to delete the security context. Multiple contexts may also be used (either successively or simultaneously) within a single communications association, at the option of the applications.  File: gss.info, Node: Supported Platforms, Next: Commercial Support, Prev: GSS-API Overview, Up: Introduction 1.4 Supported Platforms ======================= GSS has at some point in time been tested on the following platforms. 1. Debian GNU/Linux 3.0 (Woody) GCC 2.95.4 and GNU Make. This is the main development platform. `alphaev67-unknown-linux-gnu', `alphaev6-unknown-linux-gnu', `arm-unknown-linux-gnu', `hppa-unknown-linux-gnu', `hppa64-unknown-linux-gnu', `i686-pc-linux-gnu', `ia64-unknown-linux-gnu', `m68k-unknown-linux-gnu', `mips-unknown-linux-gnu', `mipsel-unknown-linux-gnu', `powerpc-unknown-linux-gnu', `s390-ibm-linux-gnu', `sparc-unknown-linux-gnu'. 2. Debian GNU/Linux 2.1 GCC 2.95.1 and GNU Make. `armv4l-unknown-linux-gnu'. 3. Tru64 UNIX Tru64 UNIX C compiler and Tru64 Make. `alphaev67-dec-osf5.1', `alphaev68-dec-osf5.1'. 4. SuSE Linux 7.1 GCC 2.96 and GNU Make. `alphaev6-unknown-linux-gnu', `alphaev67-unknown-linux-gnu'. 5. SuSE Linux 7.2a GCC 3.0 and GNU Make. `ia64-unknown-linux-gnu'. 6. RedHat Linux 7.2 GCC 2.96 and GNU Make. `alphaev6-unknown-linux-gnu', `alphaev67-unknown-linux-gnu', `ia64-unknown-linux-gnu'. 7. RedHat Linux 8.0 GCC 3.2 and GNU Make. `i686-pc-linux-gnu'. 8. RedHat Advanced Server 2.1 GCC 2.96 and GNU Make. `i686-pc-linux-gnu'. 9. Slackware Linux 8.0.01 GCC 2.95.3 and GNU Make. `i686-pc-linux-gnu'. 10. Mandrake Linux 9.0 GCC 3.2 and GNU Make. `i686-pc-linux-gnu'. 11. IRIX 6.5 MIPS C compiler, IRIX Make. `mips-sgi-irix6.5'. 12. AIX 4.3.2 IBM C for AIX compiler, AIX Make. `rs6000-ibm-aix4.3.2.0'. 13. Microsoft Windows 2000 (Cygwin) GCC 3.2, GNU make. `i686-pc-cygwin'. 14. HP-UX 11 HP-UX C compiler and HP Make. `ia64-hp-hpux11.22', `hppa2.0w-hp-hpux11.11'. 15. SUN Solaris 2.8 Sun WorkShop Compiler C 6.0 and SUN Make. `sparc-sun-solaris2.8'. 16. NetBSD 1.6 GCC 2.95.3 and GNU Make. `alpha-unknown-netbsd1.6', `i386-unknown-netbsdelf1.6'. 17. OpenBSD 3.1 and 3.2 GCC 2.95.3 and GNU Make. `alpha-unknown-openbsd3.1', `i386-unknown-openbsd3.1'. 18. FreeBSD 4.7 GCC 2.95.4 and GNU Make. `alpha-unknown-freebsd4.7', `i386-unknown-freebsd4.7'. 19. Cross compiled to uClinux/uClibc on Motorola Coldfire. GCC 3.4 and GNU Make `m68k-uclinux-elf'. If you use GSS on, or port GSS to, a new platform please report it to the author.  File: gss.info, Node: Commercial Support, Next: Downloading and Installing, Prev: Supported Platforms, Up: Introduction 1.5 Commercial Support ====================== Commercial support is available for users of GNU GSS. The kind of support that can be purchased may include: * Implement new features. Such as a new GSS-API mechanism. * Port GSS to new platforms. This could include porting to an embedded platforms that may need memory or size optimization. * Integrating GSS as a security environment in your existing project. * System design of components related to GSS-API. If you are interested, please write to: Simon Josefsson Datakonsult AB Hagagatan 24 113 47 Stockholm Sweden E-mail: simon@josefsson.org If your company provides support related to GNU GSS and would like to be mentioned here, contact the author (*note Bug Reports::).  File: gss.info, Node: Downloading and Installing, Next: Bug Reports, Prev: Commercial Support, Up: Introduction 1.6 Downloading and Installing ============================== The package can be downloaded from several places, including: `ftp://ftp.gnu.org/gnu/gss/' The latest version is stored in a file, e.g., `gss-1.0.2.tar.gz' where the `1.0.2' indicate the highest version number. The package is then extracted, configured and built like many other packages that use Autoconf. For detailed information on configuring and building it, refer to the `INSTALL' file that is part of the distribution archive. Here is an example terminal session that downloads, configures, builds and installs the package. You will need a few basic tools, such as `sh', `make' and `cc'. $ wget -q ftp://ftp.gnu.org/gnu/gss/gss-1.0.2.tar.gz $ tar xfz gss-1.0.2.tar.gz $ cd gss-1.0.2/ $ ./configure ... $ make ... $ make install ... After that GSS should be properly installed and ready for use.  File: gss.info, Node: Bug Reports, Next: Contributing, Prev: Downloading and Installing, Up: Introduction 1.7 Bug Reports =============== If you think you have found a bug in GSS, please investigate it and report it. * Please make sure that the bug is really in GSS, and preferably also check that it hasn't already been fixed in the latest version. * You have to send us a test case that makes it possible for us to reproduce the bug. * You also have to explain what is wrong; if you get a crash, or if the results printed are not good and in that case, in what way. Make sure that the bug report includes all information you would need to fix this kind of bug for someone else. Please make an effort to produce a self-contained report, with something definite that can be tested or debugged. Vague queries or piecemeal messages are difficult to act on and don't help the development effort. If your bug report is good, we will do our best to help you to get a corrected version of the software; if the bug report is poor, we won't do anything about it (apart from asking you to send better bug reports). If you think something in this manual is unclear, or downright incorrect, or if the language needs to be improved, please also send a note. Send your bug report to: `bug-gss@gnu.org'  File: gss.info, Node: Contributing, Next: Planned Features, Prev: Bug Reports, Up: Introduction 1.8 Contributing ================ If you want to submit a patch for inclusion - from solve a typo you discovered, up to adding support for a new feature - you should submit it as a bug report (*note Bug Reports::). There are some things that you can do to increase the chances for it to be included in the official package. Unless your patch is very small (say, under 10 lines) we require that you assign the copyright of your work to the Free Software Foundation. This is to protect the freedom of the project. If you have not already signed papers, we will send you the necessary information when you submit your contribution. For contributions that doesn't consist of actual programming code, the only guidelines are common sense. Use it. For code contributions, a number of style guides will help you: * Coding Style. Follow the GNU Standards document (*note GNU Coding Standards: (standards)top.). If you normally code using another coding standard, there is no problem, but you should use `indent' to reformat the code (*note GNU Indent: (indent)top.) before submitting your work. * Use the unified diff format `diff -u'. * Return errors. No reason whatsoever should abort the execution of the library. Even memory allocation errors, e.g. when malloc return NULL, should work although result in an error code. * Design with thread safety in mind. Don't use global variables. Don't even write to per-handle global variables unless the documented behaviour of the function you write is to write to the per-handle global variable. * Avoid using the C math library. It causes problems for embedded implementations, and in most situations it is very easy to avoid using it. * Document your functions. Use comments before each function headers, that, if properly formatted, are extracted into Texinfo manuals and GTK-DOC web pages. * Supply a ChangeLog and NEWS entries, where appropriate.  File: gss.info, Node: Planned Features, Prev: Contributing, Up: Introduction 1.9 Planned Features ==================== This is also known as the "todo list". If you like to start working on anything, please let me know so work duplication can be avoided. * Support non-blocking mode. This would be an API extension. It could work by forking a process and interface to it, or by using a user-specific daemon. E.g., h = START(accept_sec_context(...)), FINISHED(h), ret = FINISH(h), ABORT(h). * Support loadable modules via dlopen, a'la Solaris GSS. * Port to Cyclone? CCured?  File: gss.info, Node: Preparation, Next: Standard GSS API, Prev: Introduction, Up: Top 2 Preparation ************* To use GSS, you have to perform some changes to your sources and the build system. The necessary changes are small and explained in the following sections. At the end of this chapter, it is described how the library is initialized, and how the requirements of the library are verified. A faster way to find out how to adapt your application for use with GSS may be to look at the examples at the end of this manual. * Menu: * Header:: * Initialization:: * Version Check:: * Building the source:: * Out of Memory handling::  File: gss.info, Node: Header, Next: Initialization, Up: Preparation 2.1 Header ========== All standard interfaces (data types and functions) of the official GSS API are defined in the header file `gss/api.h'. The file is taken verbatim from the RFC (after correcting a few typos) where it is known as `gssapi.h'. However, to be able to co-exist gracefully with other GSS-API implementation, the name `gssapi.h' was changed. The header file `gss.h' includes `gss/api.h', and declares a few non-standard extensions (by including `gss/ext.h'), takes care of including header files related to all supported mechanisms (e.g., `gss/krb5.h') and finally adds C++ namespace protection of all definitions. Therefore, including `gss.h' in your project is recommended over `gss/api.h'. If using `gss.h' instead of `gss/api.h' causes problems, it should be regarded a bug. You must include either file in all programs using the library, either directly or through some other header file, like this: #include <gss.h> The name space of GSS is `gss_*' for function names, `gss_*' for data types and `GSS_*' for other symbols. In addition the same name prefixes with one prepended underscore are reserved for internal use and should never be used by an application. Each supported GSS mechanism may want to expose mechanism specific functionality, and can do so through one or more header files under the `gss/' directory. The Kerberos 5 mechanism uses the file `gss/krb5.h', but again, it is included (with C++ namespace fixes) from `gss.h'.  File: gss.info, Node: Initialization, Next: Version Check, Prev: Header, Up: Preparation 2.2 Initialization ================== GSS does not need to be initialized before it can be used. In order to take advantage of the internationalisation features in GSS, e.g. translated error messages, the application must set the current locale using `setlocale()' before calling, e.g., `gss_display_status()'. This is typically done in `main()' as in the following example. #include <gss.h> #include <locale.h> ... setlocale (LC_ALL, "");  File: gss.info, Node: Version Check, Next: Building the source, Prev: Initialization, Up: Preparation 2.3 Version Check ================= It is often desirable to check that the version of GSS used is indeed one which fits all requirements. Even with binary compatibility new features may have been introduced but due to problem with the dynamic linker an old version is actually used. So you may want to check that the version is okay right after program startup. The function is called `gss_check_version()' and is described formally in *Note Extended GSS API::. The normal way to use the function is to put something similar to the following early in your `main()': #include <gss.h> ... if (!gss_check_version (GSS_VERSION)) { printf ("gss_check_version() failed:\n" "Header file incompatible with shared library.\n"); exit(EXIT_FAILURE); }  File: gss.info, Node: Building the source, Next: Out of Memory handling, Prev: Version Check, Up: Preparation 2.4 Building the source ======================= If you want to compile a source file that includes the `gss.h' header file, you must make sure that the compiler can find it in the directory hierarchy. This is accomplished by adding the path to the directory in which the header file is located to the compilers include file search path (via the `-I' option). However, the path to the include file is determined at the time the source is configured. To solve this problem, GSS uses the external package `pkg-config' that knows the path to the include file and other configuration options. The options that need to be added to the compiler invocation at compile time are output by the `--cflags' option to `pkg-config gss'. The following example shows how it can be used at the command line: gcc -c foo.c `pkg-config gss --cflags` Adding the output of `pkg-config gss --cflags' to the compilers command line will ensure that the compiler can find the `gss.h' header file. A similar problem occurs when linking the program with the library. Again, the compiler has to find the library files. For this to work, the path to the library files has to be added to the library search path (via the `-L' option). For this, the option `--libs' to `pkg-config gss' can be used. For convenience, this option also outputs all other options that are required to link the program with the GSS libarary (for instance, the `-lshishi' option). The example shows how to link `foo.o' with GSS into a program `foo'. gcc -o foo foo.o `pkg-config gss --libs` Of course you can also combine both examples to a single command by specifying both options to `pkg-config': gcc -o foo foo.c `pkg-config gss --cflags --libs`  File: gss.info, Node: Out of Memory handling, Prev: Building the source, Up: Preparation 2.5 Out of Memory handling ========================== The GSS API does not have a standard error code for the out of memory error condition. This library will return `GSS_S_FAILURE' and set `minor_status' to ENOMEM.  File: gss.info, Node: Standard GSS API, Next: Extended GSS API, Prev: Preparation, Up: Top 3 Standard GSS API ****************** * Menu: * Simple Data Types:: About integers, strings, OIDs, and OID sets. * Complex Data Types:: About credentials, contexts, names, etc. * Optional Parameters:: What value to use when you don't want one. * Error Handling:: How errors in GSS are reported and handled. * Credential Management:: Standard GSS credential functions. * Context-Level Routines:: Standard GSS context functions. * Per-Message Routines:: Standard GSS per-message functions. * Name Manipulation:: Standard GSS name manipulation functions. * Miscellaneous Routines:: Standard miscellaneous functions. * SASL GS2 Routines:: Standard SASL GS2 related functions.  File: gss.info, Node: Simple Data Types, Next: Complex Data Types, Up: Standard GSS API 3.1 Simple Data Types ===================== The following conventions are used by the GSS-API C-language bindings: 3.1.1 Integer types ------------------- GSS-API uses the following integer data type: OM_uint32 32-bit unsigned integer 3.1.2 String and similar data ----------------------------- Many of the GSS-API routines take arguments and return values that describe contiguous octet-strings. All such data is passed between the GSS-API and the caller using the `gss_buffer_t' data type. This data type is a pointer to a buffer descriptor, which consists of a length field that contains the total number of bytes in the datum, and a value field which contains a pointer to the actual datum: typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t; Storage for data returned to the application by a GSS-API routine using the `gss_buffer_t' conventions is allocated by the GSS-API routine. The application may free this storage by invoking the `gss_release_buffer' routine. Allocation of the `gss_buffer_desc' object is always the responsibility of the application; unused `gss_buffer_desc' objects may be initialized to the value `GSS_C_EMPTY_BUFFER'. 3.1.2.1 Opaque data types ......................... Certain multiple-word data items are considered opaque data types at the GSS-API, because their internal structure has no significance either to the GSS-API or to the caller. Examples of such opaque data types are the input_token parameter to `gss_init_sec_context' (which is opaque to the caller), and the input_message parameter to `gss_wrap' (which is opaque to the GSS-API). Opaque data is passed between the GSS-API and the application using the `gss_buffer_t' datatype. 3.1.2.2 Character strings ......................... Certain multiple-word data items may be regarded as simple ISO Latin-1 character strings. Examples are the printable strings passed to `gss_import_name' via the input_name_buffer parameter. Some GSS-API routines also return character strings. All such character strings are passed between the application and the GSS-API implementation using the `gss_buffer_t' datatype, which is a pointer to a `gss_buffer_desc' object. When a `gss_buffer_desc' object describes a printable string, the length field of the `gss_buffer_desc' should only count printable characters within the string. In particular, a trailing NUL character should NOT be included in the length count, nor should either the GSS-API implementation or the application assume the presence of an uncounted trailing NUL. 3.1.3 Object Identifiers ------------------------ Certain GSS-API procedures take parameters of the type `gss_OID', or Object identifier. This is a type containing ISO-defined tree- structured values, and is used by the GSS-API caller to select an underlying security mechanism and to specify namespaces. A value of type `gss_OID' has the following structure: typedef struct gss_OID_desc_struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID; The elements field of this structure points to the first byte of an octet string containing the ASN.1 BER encoding of the value portion of the normal BER TLV encoding of the `gss_OID'. The length field contains the number of bytes in this value. For example, the `gss_OID' value corresponding to `iso(1) identified-organization(3) icd-ecma(12) member-company(2) dec(1011) cryptoAlgorithms(7) DASS(5)', meaning the DASS X.509 authentication mechanism, has a length field of 7 and an elements field pointing to seven octets containing the following octal values: 53,14,2,207,163,7,5. GSS-API implementations should provide constant `gss_OID' values to allow applications to request any supported mechanism, although applications are encouraged on portability grounds to accept the default mechanism. `gss_OID' values should also be provided to allow applications to specify particular name types (see section 3.10). Applications should treat `gss_OID_desc' values returned by GSS-API routines as read-only. In particular, the application should not attempt to deallocate them with free(). 3.1.4 Object Identifier Sets ---------------------------- Certain GSS-API procedures take parameters of the type `gss_OID_set'. This type represents one or more object identifiers (*note Object Identifiers::). A `gss_OID_set' object has the following structure: typedef struct gss_OID_set_desc_struct { size_t count; gss_OID elements; } gss_OID_set_desc, *gss_OID_set; The count field contains the number of OIDs within the set. The elements field is a pointer to an array of `gss_OID_desc' objects, each of which describes a single OID. `gss_OID_set' values are used to name the available mechanisms supported by the GSS-API, to request the use of specific mechanisms, and to indicate which mechanisms a given credential supports. All OID sets returned to the application by GSS-API are dynamic objects (the `gss_OID_set_desc', the "elements" array of the set, and the "elements" array of each member OID are all dynamically allocated), and this storage must be deallocated by the application using the `gss_release_oid_set' routine.  File: gss.info, Node: Complex Data Types, Next: Optional Parameters, Prev: Simple Data Types, Up: Standard GSS API 3.2 Complex Data Types ====================== 3.2.1 Credentials ----------------- A credential handle is a caller-opaque atomic datum that identifies a GSS-API credential data structure. It is represented by the caller- opaque type `gss_cred_id_t'. GSS-API credentials can contain mechanism-specific principal authentication data for multiple mechanisms. A GSS-API credential is composed of a set of credential-elements, each of which is applicable to a single mechanism. A credential may contain at most one credential-element for each supported mechanism. A credential-element identifies the data needed by a single mechanism to authenticate a single principal, and conceptually contains two credential-references that describe the actual mechanism-specific authentication data, one to be used by GSS-API for initiating contexts, and one to be used for accepting contexts. For mechanisms that do not distinguish between acceptor and initiator credentials, both references would point to the same underlying mechanism-specific authentication data. Credentials describe a set of mechanism-specific principals, and give their holder the ability to act as any of those principals. All principal identities asserted by a single GSS-API credential should belong to the same entity, although enforcement of this property is an implementation-specific matter. The GSS-API does not make the actual credentials available to applications; instead a credential handle is used to identify a particular credential, held internally by GSS-API. The combination of GSS-API credential handle and mechanism identifies the principal whose identity will be asserted by the credential when used with that mechanism. The `gss_init_sec_context' and `gss_accept_sec_context' routines allow the value `GSS_C_NO_CREDENTIAL' to be specified as their credential handle parameter. This special credential-handle indicates a desire by the application to act as a default principal. 3.2.2 Contexts -------------- The `gss_ctx_id_t' data type contains a caller-opaque atomic value that identifies one end of a GSS-API security context. The security context holds state information about each end of a peer communication, including cryptographic state information. 3.2.3 Authentication tokens --------------------------- A token is a caller-opaque type that GSS-API uses to maintain synchronization between the context data structures at each end of a GSS-API security context. The token is a cryptographically protected octet-string, generated by the underlying mechanism at one end of a GSS-API security context for use by the peer mechanism at the other end. Encapsulation (if required) and transfer of the token are the responsibility of the peer applications. A token is passed between the GSS-API and the application using the `gss_buffer_t' conventions. 3.2.4 Interprocess tokens ------------------------- Certain GSS-API routines are intended to transfer data between processes in multi-process programs. These routines use a caller-opaque octet-string, generated by the GSS-API in one process for use by the GSS-API in another process. The calling application is responsible for transferring such tokens between processes in an OS-specific manner. Note that, while GSS-API implementors are encouraged to avoid placing sensitive information within interprocess tokens, or to cryptographically protect them, many implementations will be unable to avoid placing key material or other sensitive data within them. It is the application's responsibility to ensure that interprocess tokens are protected in transit, and transferred only to processes that are trustworthy. An interprocess token is passed between the GSS-API and the application using the `gss_buffer_t' conventions. 3.2.5 Names ----------- A name is used to identify a person or entity. GSS-API authenticates the relationship between a name and the entity claiming the name. Since different authentication mechanisms may employ different namespaces for identifying their principals, GSSAPI's naming support is necessarily complex in multi-mechanism environments (or even in some single-mechanism environments where the underlying mechanism supports multiple namespaces). Two distinct representations are defined for names: * An internal form. This is the GSS-API "native" format for names, represented by the implementation-specific `gss_name_t' type. It is opaque to GSS-API callers. A single `gss_name_t' object may contain multiple names from different namespaces, but all names should refer to the same entity. An example of such an internal name would be the name returned from a call to the `gss_inquire_cred' routine, when applied to a credential containing credential elements for multiple authentication mechanisms employing different namespaces. This `gss_name_t' object will contain a distinct name for the entity for each authentication mechanism. For GSS-API implementations supporting multiple namespaces, objects of type `gss_name_t' must contain sufficient information to determine the namespace to which each primitive name belongs. * Mechanism-specific contiguous octet-string forms. A format capable of containing a single name (from a single namespace). Contiguous string names are always accompanied by an object identifier specifying the namespace to which the name belongs, and their format is dependent on the authentication mechanism that employs the name. Many, but not all, contiguous string names will be printable, and may therefore be used by GSS-API applications for communication with their users. Routines (`gss_import_name' and `gss_display_name') are provided to convert names between contiguous string representations and the internal `gss_name_t' type. `gss_import_name' may support multiple syntaxes for each supported namespace, allowing users the freedom to choose a preferred name representation. `gss_display_name' should use an implementation-chosen printable syntax for each supported name-type. If an application calls `gss_display_name', passing the internal name resulting from a call to `gss_import_name', there is no guarantee the resulting contiguous string name will be the same as the original imported string name. Nor do name-space identifiers necessarily survive unchanged after a journey through the internal name-form. An example of this might be a mechanism that authenticates X.500 names, but provides an algorithmic mapping of Internet DNS names into X.500. That mechanism's implementation of `gss_import_name' might, when presented with a DNS name, generate an internal name that contained both the original DNS name and the equivalent X.500 name. Alternatively, it might only store the X.500 name. In the latter case, `gss_display_name' would most likely generate a printable X.500 name, rather than the original DNS name. The process of authentication delivers to the context acceptor an internal name. Since this name has been authenticated by a single mechanism, it contains only a single name (even if the internal name presented by the context initiator to `gss_init_sec_context' had multiple components). Such names are termed internal mechanism names, or "MN"s and the names emitted by `gss_accept_sec_context' are always of this type. Since some applications may require MNs without wanting to incur the overhead of an authentication operation, a second function, `gss_canonicalize_name', is provided to convert a general internal name into an MN. Comparison of internal-form names may be accomplished via the `gss_compare_name' routine, which returns true if the two names being compared refer to the same entity. This removes the need for the application program to understand the syntaxes of the various printable names that a given GSS-API implementation may support. Since GSS-API assumes that all primitive names contained within a given internal name refer to the same entity, `gss_compare_name' can return true if the two names have at least one primitive name in common. If the implementation embodies knowledge of equivalence relationships between names taken from different namespaces, this knowledge may also allow successful comparison of internal names containing no overlapping primitive elements. When used in large access control lists, the overhead of invoking `gss_import_name' and `gss_compare_name' on each name from the ACL may be prohibitive. As an alternative way of supporting this case, GSS-API defines a special form of the contiguous string name which may be compared directly (e.g. with memcmp()). Contiguous names suitable for comparison are generated by the `gss_export_name' routine, which requires an MN as input. Exported names may be re- imported by the `gss_import_name' routine, and the resulting internal name will also be an MN. The `gss_OID' constant `GSS_C_NT_EXPORT_NAME' indentifies the "export name" type, and the value of this constant is given in Appendix A. Structurally, an exported name object consists of a header containing an OID identifying the mechanism that authenticated the name, and a trailer containing the name itself, where the syntax of the trailer is defined by the individual mechanism specification. The precise format of an export name is defined in the language-independent GSS-API specification [GSSAPI]. Note that the results obtained by using `gss_compare_name' will in general be different from those obtained by invoking `gss_canonicalize_name' and `gss_export_name', and then comparing the exported names. The first series of operation determines whether two (unauthenticated) names identify the same principal; the second whether a particular mechanism would authenticate them as the same principal. These two operations will in general give the same results only for MNs. The `gss_name_t' datatype should be implemented as a pointer type. To allow the compiler to aid the application programmer by performing type-checking, the use of (void *) is discouraged. A pointer to an implementation-defined type is the preferred choice. Storage is allocated by routines that return `gss_name_t' values. A procedure, `gss_release_name', is provided to free storage associated with an internal-form name. 3.2.6 Channel Bindings ---------------------- GSS-API supports the use of user-specified tags to identify a given context to the peer application. These tags are intended to be used to identify the particular communications channel that carries the context. Channel bindings are communicated to the GSS-API using the following structure: typedef struct gss_channel_bindings_struct { OM_uint32 initiator_addrtype; gss_buffer_desc initiator_address; OM_uint32 acceptor_addrtype; gss_buffer_desc acceptor_address; gss_buffer_desc application_data; } *gss_channel_bindings_t; The initiator_addrtype and acceptor_addrtype fields denote the type of addresses contained in the initiator_address and acceptor_address buffers. The address type should be one of the following: GSS_C_AF_UNSPEC Unspecified address type GSS_C_AF_LOCAL Host-local address type GSS_C_AF_INET Internet address type (e.g. IP) GSS_C_AF_IMPLINK ARPAnet IMP address type GSS_C_AF_PUP pup protocols (eg BSP) address type GSS_C_AF_CHAOS MIT CHAOS protocol address type GSS_C_AF_NS XEROX NS address type GSS_C_AF_NBS nbs address type GSS_C_AF_ECMA ECMA address type GSS_C_AF_DATAKIT datakit protocols address type GSS_C_AF_CCITT CCITT protocols GSS_C_AF_SNA IBM SNA address type GSS_C_AF_DECnet DECnet address type GSS_C_AF_DLI Direct data link interface address type GSS_C_AF_LAT LAT address type GSS_C_AF_HYLINK NSC Hyperchannel address type GSS_C_AF_APPLETALK AppleTalk address type GSS_C_AF_BSC BISYNC 2780/3780 address type GSS_C_AF_DSS Distributed system services address type GSS_C_AF_OSI OSI TP4 address type GSS_C_AF_X25 X.25 GSS_C_AF_NULLADDR No address specified Note that these symbols name address families rather than specific addressing formats. For address families that contain several alternative address forms, the initiator_address and acceptor_address fields must contain sufficient information to determine which address form is used. When not otherwise specified, addresses should be specified in network byte-order (that is, native byte-ordering for the address family). Conceptually, the GSS-API concatenates the initiator_addrtype, initiator_address, acceptor_addrtype, acceptor_address and application_data to form an octet string. The mechanism calculates a MIC over this octet string, and binds the MIC to the context establishment token emitted by `gss_init_sec_context'. The same bindings are presented by the context acceptor to `gss_accept_sec_context', and a MIC is calculated in the same way. The calculated MIC is compared with that found in the token, and if the MICs differ, `gss_accept_sec_context' will return a `GSS_S_BAD_BINDINGS' error, and the context will not be established. Some mechanisms may include the actual channel binding data in the token (rather than just a MIC); applications should therefore not use confidential data as channel-binding components. Individual mechanisms may impose additional constraints on addresses and address types that may appear in channel bindings. For example, a mechanism may verify that the initiator_address field of the channel bindings presented to `gss_init_sec_context' contains the correct network address of the host system. Portable applications should therefore ensure that they either provide correct information for the address fields, or omit addressing information, specifying `GSS_C_AF_NULLADDR' as the address-types.  File: gss.info, Node: Optional Parameters, Next: Error Handling, Prev: Complex Data Types, Up: Standard GSS API 3.3 Optional Parameters ======================= Various parameters are described as optional. This means that they follow a convention whereby a default value may be requested. The following conventions are used for omitted parameters. These conventions apply only to those parameters that are explicitly documented as optional. * gss_buffer_t types. Specify GSS_C_NO_BUFFER as a value. For an input parameter this signifies that default behavior is requested, while for an output parameter it indicates that the information that would be returned via the parameter is not required by the application. * Integer types (input). Individual parameter documentation lists values to be used to indicate default actions. * Integer types (output). Specify NULL as the value for the pointer. * Pointer types. Specify NULL as the value. * Object IDs. Specify GSS_C_NO_OID as the value. * Object ID Sets. Specify GSS_C_NO_OID_SET as the value. * Channel Bindings. Specify GSS_C_NO_CHANNEL_BINDINGS to indicate that channel bindings are not to be used.  File: gss.info, Node: Error Handling, Next: Credential Management, Prev: Optional Parameters, Up: Standard GSS API 3.4 Error Handling ================== Every GSS-API routine returns two distinct values to report status information to the caller: GSS status codes and Mechanism status codes. 3.4.1 GSS status codes ---------------------- GSS-API routines return GSS status codes as their `OM_uint32' function value. These codes indicate errors that are independent of the underlying mechanism(s) used to provide the security service. The errors that can be indicated via a GSS status code are either generic API routine errors (errors that are defined in the GSS-API specification) or calling errors (errors that are specific to these language bindings). A GSS status code can indicate a single fatal generic API error from the routine and a single calling error. In addition, supplementary status information may be indicated via the setting of bits in the supplementary info field of a GSS status code. These errors are encoded into the 32-bit GSS status code as follows: MSB LSB |------------------------------------------------------------| | Calling Error | Routine Error | Supplementary Info | |------------------------------------------------------------| Bit 31 24 23 16 15 0 Hence if a GSS-API routine returns a GSS status code whose upper 16 bits contain a non-zero value, the call failed. If the calling error field is non-zero, the invoking application's call of the routine was erroneous. Calling errors are defined in table 3-1. If the routine error field is non-zero, the routine failed for one of the routine- specific reasons listed below in table 3-2. Whether or not the upper 16 bits indicate a failure or a success, the routine may indicate additional information by setting bits in the supplementary info field of the status code. The meaning of individual bits is listed below in table 3-3. Table 3-1 Calling Errors Name Value in field Meaning ---- -------------- ------- GSS_S_CALL_INACCESSIBLE_READ 1 A required input parameter could not be read GSS_S_CALL_INACCESSIBLE_WRITE 2 A required output parameter could not be written. GSS_S_CALL_BAD_STRUCTURE 3 A parameter was malformed Table 3-2 Routine Errors Name Value in field Meaning ---- -------------- ------- GSS_S_BAD_MECH 1 An unsupported mechanism was requested GSS_S_BAD_NAME 2 An invalid name was supplied GSS_S_BAD_NAMETYPE 3 A supplied name was of an unsupported type GSS_S_BAD_BINDINGS 4 Incorrect channel bindings were supplied GSS_S_BAD_STATUS 5 An invalid status code was supplied GSS_S_BAD_MIC GSS_S_BAD_SIG 6 A token had an invalid MIC GSS_S_NO_CRED 7 No credentials were supplied, or the credentials were unavailable or inaccessible. GSS_S_NO_CONTEXT 8 No context has been established GSS_S_DEFECTIVE_TOKEN 9 A token was invalid GSS_S_DEFECTIVE_CREDENTIAL 10 A credential was invalid GSS_S_CREDENTIALS_EXPIRED 11 The referenced credentials have expired GSS_S_CONTEXT_EXPIRED 12 The context has expired GSS_S_FAILURE 13 Miscellaneous failure (see text) GSS_S_BAD_QOP 14 The quality-of-protection requested could not be provided GSS_S_UNAUTHORIZED 15 The operation is forbidden by local security policy GSS_S_UNAVAILABLE 16 The operation or option is unavailable GSS_S_DUPLICATE_ELEMENT 17 The requested credential element already exists GSS_S_NAME_NOT_MN 18 The provided name was not a mechanism name Table 3-3 Supplementary Status Bits Name Bit Number Meaning ---- ---------- ------- GSS_S_CONTINUE_NEEDED 0 (LSB) Returned only by gss_init_sec_context or gss_accept_sec_context. The routine must be called again to complete its function. See routine documentation for detailed description GSS_S_DUPLICATE_TOKEN 1 The token was a duplicate of an earlier token GSS_S_OLD_TOKEN 2 The token's validity period has expired GSS_S_UNSEQ_TOKEN 3 A later token has already been processed GSS_S_GAP_TOKEN 4 An expected per-message token was not received The routine documentation also uses the name GSS_S_COMPLETE, which is a zero value, to indicate an absence of any API errors or supplementary information bits. All GSS_S_xxx symbols equate to complete `OM_uint32' status codes, rather than to bitfield values. For example, the actual value of the symbol `GSS_S_BAD_NAMETYPE' (value 3 in the routine error field) is 3<<16. The macros `GSS_CALLING_ERROR', `GSS_ROUTINE_ERROR' and `GSS_SUPPLEMENTARY_INFO' are provided, each of which takes a GSS status code and removes all but the relevant field. For example, the value obtained by applying `GSS_ROUTINE_ERROR' to a status code removes the calling errors and supplementary info fields, leaving only the routine errors field. The values delivered by these macros may be directly compared with a `GSS_S_xxx' symbol of the appropriate type. The macro `GSS_ERROR' is also provided, which when applied to a GSS status code returns a non-zero value if the status code indicated a calling or routine error, and a zero value otherwise. All macros defined by GSS-API evaluate their argument(s) exactly once. A GSS-API implementation may choose to signal calling errors in a platform-specific manner instead of, or in addition to the routine value; routine errors and supplementary info should be returned via major status values only. The GSS major status code `GSS_S_FAILURE' is used to indicate that the underlying mechanism detected an error for which no specific GSS status code is defined. The mechanism-specific status code will provide more details about the error. In addition to the explicit major status codes for each API function, the code `GSS_S_FAILURE' may be returned by any routine, indicating an implementation-specific or mechanism-specific error condition, further details of which are reported via the `minor_status' parameter. 3.4.2 Mechanism-specific status codes ------------------------------------- GSS-API routines return a minor_status parameter, which is used to indicate specialized errors from the underlying security mechanism. This parameter may contain a single mechanism-specific error, indicated by a `OM_uint32' value. The minor_status parameter will always be set by a GSS-API routine, even if it returns a calling error or one of the generic API errors indicated above as fatal, although most other output parameters may remain unset in such cases. However, output parameters that are expected to return pointers to storage allocated by a routine must always be set by the routine, even in the event of an error, although in such cases the GSS-API routine may elect to set the returned parameter value to NULL to indicate that no storage was actually allocated. Any length field associated with such pointers (as in a `gss_buffer_desc' structure) should also be set to zero in such cases.  File: gss.info, Node: Credential Management, Next: Context-Level Routines, Prev: Error Handling, Up: Standard GSS API 3.5 Credential Management ========================= GSS-API Credential-management Routines Routine Function ------- -------- gss_acquire_cred Assume a global identity; Obtain a GSS-API credential handle for pre-existing credentials. gss_add_cred Construct credentials incrementally. gss_inquire_cred Obtain information about a credential. gss_inquire_cred_by_mech Obtain per-mechanism information about a credential. gss_release_cred Discard a credential handle. gss_acquire_cred ---------------- -- Function: OM_uint32 gss_acquire_cred (OM_uint32 * MINOR_STATUS, const gss_name_t DESIRED_NAME, OM_uint32 TIME_REQ, const gss_OID_set DESIRED_MECHS, gss_cred_usage_t CRED_USAGE, gss_cred_id_t * OUTPUT_CRED_HANDLE, gss_OID_set * ACTUAL_MECHS, OM_uint32 * TIME_REC) MINOR_STATUS: (integer, modify) Mechanism specific status code. DESIRED_NAME: (gss_name_t, read) Name of principal whose credential should be acquired. TIME_REQ: (Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime. DESIRED_MECHS: (Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation-specific default. CRED_USAGE: (gss_cred_usage_t, read) GSS_C_BOTH - Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credentials will only be used to initiate security contexts. GSS_C_ACCEPT - Credentials will only be used to accept security contexts. OUTPUT_CRED_HANDLE: (gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to gss_release_cred(). ACTUAL_MECHS: (Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID-set must be released by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. TIME_REC: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Allows an application to acquire a handle for a pre-existing credential by name. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined. This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_MECH': Unavailable mechanism requested. `GSS_S_BAD_NAMETYPE': Type contained within desired_name parameter is not supported. `GSS_S_BAD_NAME': Value supplied for desired_name parameter is ill formed. `GSS_S_CREDENTIALS_EXPIRED': The credentials could not be acquired Because they have expired. `GSS_S_NO_CRED': No credentials were found for the specified name. gss_add_cred ------------ -- Function: OM_uint32 gss_add_cred (OM_uint32 * MINOR_STATUS, const gss_cred_id_t INPUT_CRED_HANDLE, const gss_name_t DESIRED_NAME, const gss_OID DESIRED_MECH, gss_cred_usage_t CRED_USAGE, OM_uint32 INITIATOR_TIME_REQ, OM_uint32 ACCEPTOR_TIME_REQ, gss_cred_id_t * OUTPUT_CRED_HANDLE, gss_OID_set * ACTUAL_MECHS, OM_uint32 * INITIATOR_TIME_REC, OM_uint32 * ACCEPTOR_TIME_REC) MINOR_STATUS: (integer, modify) Mechanism specific status code. INPUT_CRED_HANDLE: (gss_cred_id_t, read, optional) The credential to which a credential-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential-handle is not modified by gss_add_cred(), the underlying credential will be modified if output_credential_handle is NULL. DESIRED_NAME: (gss_name_t, read.) Name of principal whose credential should be acquired. DESIRED_MECH: (Object ID, read) Underlying security mechanism with which the credential may be used. CRED_USAGE: (gss_cred_usage_t, read) GSS_C_BOTH - Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credential will only be used to initiate security contexts. GSS_C_ACCEPT - Credential will only be used to accept security contexts. INITIATOR_TIME_REQ: (Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. ACCEPTOR_TIME_REQ: (Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. OUTPUT_CRED_HANDLE: (gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential-element and all the credential-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential-elements from the input_cred_handle and the newly acquired credential-element; if NULL is specified for this parameter, the newly acquired credential-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to gss_release_cred(). ACTUAL_MECHS: (Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID-set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. INITIATOR_TIME_REC: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required ACCEPTOR_TIME_REC: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required Adds a credential-element to a credential. The credential-element is identified by the name of the principal to which it refers. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credential-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism-specific authentication data, rather than merely acquiring a GSS-API handle to existing data. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. This routine can be used to either compose a new credential containing all credential-elements of the original in addition to the newly-acquire credential-element, or to add the new credential- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to gss_acquire_cred(), specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to gss_add_cred(), and finally called gss_release_cred() on the first credential handle. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non-NULL output_cred_handle must be supplied. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_MECH': Unavailable mechanism requested. `GSS_S_BAD_NAMETYPE': Type contained within desired_name parameter is not supported. `GSS_S_BAD_NAME': Value supplied for desired_name parameter is ill-formed. `GSS_S_DUPLICATE_ELEMENT': The credential already contains an element for the requested mechanism with overlapping usage and validity period. `GSS_S_CREDENTIALS_EXPIRED': The required credentials could not be added because they have expired. `GSS_S_NO_CRED': No credentials were found for the specified name. gss_inquire_cred ---------------- -- Function: OM_uint32 gss_inquire_cred (OM_uint32 * MINOR_STATUS, const gss_cred_id_t CRED_HANDLE, gss_name_t * NAME, OM_uint32 * LIFETIME, gss_cred_usage_t * CRED_USAGE, gss_OID_set * MECHANISMS) MINOR_STATUS: (integer, modify) Mechanism specific status code. CRED_HANDLE: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. NAME: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. LIFETIME: (Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. CRED_USAGE: (gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. MECHANISMS: (gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. Obtains information about a credential. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_NO_CRED': The referenced credentials could not be accessed. `GSS_S_DEFECTIVE_CREDENTIAL': The referenced credentials were invalid. `GSS_S_CREDENTIALS_EXPIRED': The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. gss_inquire_cred_by_mech ------------------------ -- Function: OM_uint32 gss_inquire_cred_by_mech (OM_uint32 * MINOR_STATUS, const gss_cred_id_t CRED_HANDLE, const gss_OID MECH_TYPE, gss_name_t * NAME, OM_uint32 * INITIATOR_LIFETIME, OM_uint32 * ACCEPTOR_LIFETIME, gss_cred_usage_t * CRED_USAGE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CRED_HANDLE: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. MECH_TYPE: (gss_OID, read) The mechanism for which information should be returned. NAME: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. INITIATOR_LIFETIME: (Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. ACCEPTOR_LIFETIME: (Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. CRED_USAGE: (gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. Obtains per-mechanism information about a credential. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_NO_CRED': The referenced credentials could not be accessed. `GSS_S_DEFECTIVE_CREDENTIAL': The referenced credentials were invalid. `GSS_S_CREDENTIALS_EXPIRED': The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. gss_release_cred ---------------- -- Function: OM_uint32 gss_release_cred (OM_uint32 * MINOR_STATUS, gss_cred_id_t * CRED_HANDLE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CRED_HANDLE: (gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing. Informs GSS-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_NO_CRED': Credentials could not be accessed.  File: gss.info, Node: Context-Level Routines, Next: Per-Message Routines, Prev: Credential Management, Up: Standard GSS API 3.6 Context-Level Routines ========================== GSS-API Context-Level Routines Routine Function ------- -------- gss_init_sec_context Initiate a security context with a peer application. gss_accept_sec_context Accept a security context initiated by a peer application. gss_delete_sec_context Discard a security context. gss_process_context_token Process a token on a security context from a peer application. gss_context_time Determine for how long a context will remain valid. gss_inquire_context Obtain information about a security context. gss_wrap_size_limit Determine token-size limit for gss_wrap on a context. gss_export_sec_context Transfer a security context to another process. gss_import_sec_context Import a transferred context. gss_init_sec_context -------------------- -- Function: OM_uint32 gss_init_sec_context (OM_uint32 * MINOR_STATUS, const gss_cred_id_t INITIATOR_CRED_HANDLE, gss_ctx_id_t * CONTEXT_HANDLE, const gss_name_t TARGET_NAME, const gss_OID MECH_TYPE, OM_uint32 REQ_FLAGS, OM_uint32 TIME_REQ, const gss_channel_bindings_t INPUT_CHAN_BINDINGS, const gss_buffer_t INPUT_TOKEN, gss_OID * ACTUAL_MECH_TYPE, gss_buffer_t OUTPUT_TOKEN, OM_uint32 * RET_FLAGS, OM_uint32 * TIME_REC) MINOR_STATUS: (integer, modify) Mechanism specific status code. INITIATOR_CRED_HANDLE: (gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED. CONTEXT_HANDLE: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context-handle must be released by the application after use with a call to gss_delete_sec_context(). TARGET_NAME: (gss_name_t, read) Name of target. MECH_TYPE: (OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default. REQ_FLAGS: (bit-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ORed together to form the bit-mask value. See below for the flags. TIME_REQ: (Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period. INPUT_CHAN_BINDINGS: (channel bindings, read, optional) Application-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used. INPUT_TOKEN: (buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call. ACTUAL_MECH_TYPE: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. OUTPUT_TOKEN: (buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to gss_release_buffer(). RET_FLAGS: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. TIME_REC: (Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop: int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token->length = 0; while (!context_established) { maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; }; if (maj_stat & GSS_S_CONTINUE_NEEDED) { receive_token_from_peer(input_token); } else { context_established = 1; }; }; Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: * The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE. * The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory). * The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established. * GSS-API implementations that support per-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should determine what per-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. * All other bits within the ret_flags argument should be set to zero. If the initial call of gss_init_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The `req_flags' values: `GSS_C_DELEG_FLAG' * True - Delegate credentials to remote peer. * False - Don't delegate. `GSS_C_MUTUAL_FLAG' * True - Request that remote peer authenticate itself. * False - Authenticate self to remote peer only. `GSS_C_REPLAY_FLAG' * True - Enable replay detection for messages protected with gss_wrap or gss_get_mic. * False - Don't attempt to detect replayed messages. `GSS_C_SEQUENCE_FLAG' * True - Enable detection of out-of-sequence protected messages. * False - Don't attempt to detect out-of-sequence messages. `GSS_C_CONF_FLAG' * True - Request that confidentiality service be made available (via gss_wrap). * False - No per-message confidentiality service is required. `GSS_C_INTEG_FLAG' * True - Request that integrity service be made available (via gss_wrap or gss_get_mic). * False - No per-message integrity service is required. `GSS_C_ANON_FLAG' * True - Do not reveal the initiator's identity to the acceptor. * False - Authenticate normally. The `ret_flags' values: `GSS_C_DELEG_FLAG' * True - Credentials were delegated to the remote peer. * False - No credentials were delegated. `GSS_C_MUTUAL_FLAG' * True - The remote peer has authenticated itself. * False - Remote peer has not authenticated itself. `GSS_C_REPLAY_FLAG' * True - replay of protected messages will be detected. * False - replayed messages will not be detected. `GSS_C_SEQUENCE_FLAG' * True - out-of-sequence protected messages will be detected. * False - out-of-sequence messages will not be detected. `GSS_C_CONF_FLAG' * True - Confidentiality service may be invoked by calling gss_wrap routine. * False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. `GSS_C_INTEG_FLAG' * True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. * False - Per-message integrity service unavailable. `GSS_C_ANON_FLAG' * True - The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor. * False - The initiator's identity has been or will be authenticated normally. `GSS_C_PROT_READY_FLAG' * True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. * False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. `GSS_C_TRANS_FLAG' * True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). * False - The security context is not transferable. All other bits should be set to zero. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_CONTINUE_NEEDED': Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token. `GSS_S_DEFECTIVE_TOKEN': Indicates that consistency checks performed on the input_token failed. `GSS_S_DEFECTIVE_CREDENTIAL': Indicates that consistency checks performed on the credential failed. `GSS_S_NO_CRED': The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials. `GSS_S_CREDENTIALS_EXPIRED': The referenced credentials have expired. `GSS_S_BAD_BINDINGS': The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. `GSS_S_BAD_SIG': The input_token contains an invalid MIC, or a MIC that could not be verified. `GSS_S_OLD_TOKEN': The input_token was too old. This is a fatal error during context establishment. `GSS_S_DUPLICATE_TOKEN': The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. `GSS_S_NO_CONTEXT': Indicates that the supplied context handle did not refer to a valid context. `GSS_S_BAD_NAMETYPE': The provided target_name parameter contained an invalid or unsupported type of name. `GSS_S_BAD_NAME': The provided target_name parameter was ill-formed. `GSS_S_BAD_MECH': The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation. gss_accept_sec_context ---------------------- -- Function: OM_uint32 gss_accept_sec_context (OM_uint32 * MINOR_STATUS, gss_ctx_id_t * CONTEXT_HANDLE, const gss_cred_id_t ACCEPTOR_CRED_HANDLE, const gss_buffer_t INPUT_TOKEN_BUFFER, const gss_channel_bindings_t INPUT_CHAN_BINDINGS, gss_name_t * SRC_NAME, gss_OID * MECH_TYPE, gss_buffer_t OUTPUT_TOKEN, OM_uint32 * RET_FLAGS, OM_uint32 * TIME_REC, gss_cred_id_t * DELEGATED_CRED_HANDLE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once gss_accept_sec_context() has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to gss_delete_sec_context(). ACCEPTOR_CRED_HANDLE: (gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned. INPUT_TOKEN_BUFFER: (buffer, opaque, read) Token obtained from remote application. INPUT_CHAN_BINDINGS: (channel bindings, read, optional) Application- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS. SRC_NAME: (gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to gss_release_name(). If not required, specify NULL. MECH_TYPE: (Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read-only by the caller (in particular, it does not need to be freed). If not required, specify NULL. OUTPUT_TOKEN: (buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non- zero length field is returned, the associated storage must be freed after use by the application with a call to gss_release_buffer(). RET_FLAGS: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. TIME_REC: (Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required. DELEGATED_CRED_HANDLE: (gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, gss_accept_sec_context() will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to gss_release_cred(). Specify NULL if not required. Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop: gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; do { receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token); }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; }; } while (maj_stat & GSS_S_CONTINUE_NEEDED); Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE. The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established. Although this requires that GSS-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should be prepared to use per-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context. If the initial call of gss_accept_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The `ret_flags' values: `GSS_C_DELEG_FLAG' * True - Delegated credentials are available via the delegated_cred_handle parameter. * False - No credentials were delegated. `GSS_C_MUTUAL_FLAG' * True - Remote peer asked for mutual authentication. * False - Remote peer did not ask for mutual authentication. `GSS_C_REPLAY_FLAG' * True - replay of protected messages will be detected. * False - replayed messages will not be detected. `GSS_C_SEQUENCE_FLAG' * True - out-of-sequence protected messages will be detected. * False - out-of-sequence messages will not be detected. `GSS_C_CONF_FLAG' * True - Confidentiality service may be invoked by calling the gss_wrap routine. * False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. `GSS_C_INTEG_FLAG' * True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. * False - Per-message integrity service unavailable. `GSS_C_ANON_FLAG' * True - The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name. * False - The initiator has been authenticated normally. `GSS_C_PROT_READY_FLAG' * True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. * False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. `GSS_C_TRANS_FLAG' * True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). * False - The security context is not transferable. All other bits should be set to zero. Return value: `GSS_S_CONTINUE_NEEDED': Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token. `GSS_S_DEFECTIVE_TOKEN': Indicates that consistency checks performed on the input_token failed. `GSS_S_DEFECTIVE_CREDENTIAL': Indicates that consistency checks performed on the credential failed. `GSS_S_NO_CRED': The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials. `GSS_S_CREDENTIALS_EXPIRED': The referenced credentials have expired. `GSS_S_BAD_BINDINGS': The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. `GSS_S_NO_CONTEXT': Indicates that the supplied context handle did not refer to a valid context. `GSS_S_BAD_SIG': The input_token contains an invalid MIC. `GSS_S_OLD_TOKEN': The input_token was too old. This is a fatal error during context establishment. `GSS_S_DUPLICATE_TOKEN': The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. `GSS_S_BAD_MECH': The received token specified a mechanism that is not supported by the implementation or the provided credential. gss_delete_sec_context ---------------------- -- Function: OM_uint32 gss_delete_sec_context (OM_uint32 * MINOR_STATUS, gss_ctx_id_t * CONTEXT_HANDLE, gss_buffer_t OUTPUT_TOKEN) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS-API will set this context handle to GSS_C_NO_CONTEXT. OUTPUT_TOKEN: (buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer. Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle. In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half-built" security contexts resulting from an incomplete sequence of gss_init_sec_context()/gss_accept_sec_context() calls. The output_token parameter is retained for compatibility with version 1 of the GSS-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero-length token, indicating that no peer action is necessary, and that no token should be transferred by the application. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_NO_CONTEXT': No valid context was supplied. gss_process_context_token ------------------------- -- Function: OM_uint32 gss_process_context_token (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, const gss_buffer_t TOKEN_BUFFER) MINOR_STATUS: (Integer, modify) Implementation specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Context handle of context on which token is to be processed TOKEN_BUFFER: (buffer, opaque, read) Token to process. Provides a way to pass an asynchronous token to the security service. Most context-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_DEFECTIVE_TOKEN': Indicates that consistency checks performed on the token failed. `GSS_S_NO_CONTEXT': The context_handle did not refer to a valid context. gss_context_time ---------------- -- Function: OM_uint32 gss_context_time (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, OM_uint32 * TIME_REC) MINOR_STATUS: (Integer, modify) Implementation specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Identifies the context to be interrogated. TIME_REC: (Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned. Determines the number of seconds for which the specified context will remain valid. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_CONTEXT_EXPIRED': The context has already expired. `GSS_S_NO_CONTEXT': The context_handle parameter did not identify a valid context gss_inquire_context ------------------- -- Function: OM_uint32 gss_inquire_context (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, gss_name_t * SRC_NAME, gss_name_t * TARG_NAME, OM_uint32 * LIFETIME_REC, gss_OID * MECH_TYPE, OM_uint32 * CTX_FLAGS, int * LOCALLY_INITIATED, int * OPEN) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) A handle that refers to the security context. SRC_NAME: (gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. TARG_NAME: (gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. Specify NULL if not required. LIFETIME_REC: (Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. MECH_TYPE: (gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read-only by the application; in particular the application should not attempt to free it. Specify NULL if not required. CTX_FLAGS: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. LOCALLY_INITIATED: (Boolean, modify) Non-zero if the invoking application is the context initiator. Specify NULL if not required. OPEN: (Boolean, modify) Non-zero if the context is fully established; Zero if a context-establishment token is expected from the peer application. Specify NULL if not required. Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established. The `ctx_flags' values: `GSS_C_DELEG_FLAG' * True - Credentials were delegated from the initiator to the acceptor. * False - No credentials were delegated. `GSS_C_MUTUAL_FLAG' * True - The acceptor was authenticated to the initiator. * False - The acceptor did not authenticate itself. `GSS_C_REPLAY_FLAG' * True - replay of protected messages will be detected. * False - replayed messages will not be detected. `GSS_C_SEQUENCE_FLAG' * True - out-of-sequence protected messages will be detected. * False - out-of-sequence messages will not be detected. `GSS_C_CONF_FLAG' * True - Confidentiality service may be invoked by calling gss_wrap routine. * False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. `GSS_C_INTEG_FLAG' * True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. * False - Per-message integrity service unavailable. `GSS_C_ANON_FLAG' * True - The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name. * False - The initiator has been authenticated normally. `GSS_C_PROT_READY_FLAG' * True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. * False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non-zero). `GSS_C_TRANS_FLAG' * True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). * False - The security context is not transferable. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_NO_CONTEXT': The referenced context could not be accessed. gss_wrap_size_limit ------------------- -- Function: OM_uint32 gss_wrap_size_limit (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, int CONF_REQ_FLAG, gss_qop_t QOP_REQ, OM_uint32 REQ_OUTPUT_SIZE, OM_uint32 * MAX_INPUT_SIZE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent. CONF_REQ_FLAG: (Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details. QOP_REQ: (gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details. REQ_OUTPUT_SIZE: (Integer, read) The desired maximum size for tokens emitted by gss_wrap. MAX_INPUT_SIZE: (Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes. Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes. This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection. GSS-API implementations are recommended but not required to detect invalid QOP values when gss_wrap_size_limit() is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection. Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_NO_CONTEXT': The referenced context could not be accessed. `GSS_S_CONTEXT_EXPIRED': The context has expired. `GSS_S_BAD_QOP': The specified QOP is not supported by the mechanism. gss_export_sec_context ---------------------- -- Function: OM_uint32 gss_export_sec_context (OM_uint32 * MINOR_STATUS, gss_ctx_id_t * CONTEXT_HANDLE, gss_buffer_t INTERPROCESS_TOKEN) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, modify) Context handle identifying the context to transfer. INTERPROCESS_TOKEN: (buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to gss_release_buffer(). Provided to support the sharing of work between multiple processes. This routine will typically be used by the context-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. gss_export_sec_context() deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail. The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group. The interprocess token may contain security-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object-library GSS-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy. If creation of the interprocess token is successful, the implementation shall deallocate all process-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_CONTEXT_EXPIRED': The context has expired. `GSS_S_NO_CONTEXT': The context was invalid. `GSS_S_UNAVAILABLE': The operation is not supported. gss_import_sec_context ---------------------- -- Function: OM_uint32 gss_import_sec_context (OM_uint32 * MINOR_STATUS, const gss_buffer_t INTERPROCESS_TOKEN, gss_ctx_id_t * CONTEXT_HANDLE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INTERPROCESS_TOKEN: (buffer, opaque, modify) Token received from exporting process CONTEXT_HANDLE: (gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to gss_delete_sec_context(). Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_NO_CONTEXT': The token did not contain a valid context reference. `GSS_S_DEFECTIVE_TOKEN': The token was invalid. `GSS_S_UNAVAILABLE': The operation is unavailable. `GSS_S_UNAUTHORIZED': Local policy prevents the import of this context by the current process.  File: gss.info, Node: Per-Message Routines, Next: Name Manipulation, Prev: Context-Level Routines, Up: Standard GSS API 3.7 Per-Message Routines ======================== GSS-API Per-message Routines Routine Function ------- -------- gss_get_mic Calculate a cryptographic message integrity code (MIC) for a message; integrity service. gss_verify_mic Check a MIC against a message; verify integrity of a received message. gss_wrap Attach a MIC to a message, and optionally encrypt the message content. confidentiality service gss_unwrap Verify a message with attached MIC, and decrypt message content if necessary. gss_get_mic ----------- -- Function: OM_uint32 gss_get_mic (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, gss_qop_t QOP_REQ, const gss_buffer_t MESSAGE_BUFFER, gss_buffer_t MESSAGE_TOKEN) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. QOP_REQ: (gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP. MESSAGE_BUFFER: (buffer, opaque, read) Message to be protected. MESSAGE_TOKEN: (buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to gss_release_buffer(). Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support derivation of MICs from zero-length messages. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_CONTEXT_EXPIRED': The context has already expired. `GSS_S_NO_CONTEXT': The context_handle parameter did not identify a valid context. `GSS_S_BAD_QOP': The specified QOP is not supported by the mechanism. gss_verify_mic -------------- -- Function: OM_uint32 gss_verify_mic (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, const gss_buffer_t MESSAGE_BUFFER, const gss_buffer_t TOKEN_BUFFER, gss_qop_t * QOP_STATE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Identifies the context on which the message arrived. MESSAGE_BUFFER: (buffer, opaque, read) Message to be verified. TOKEN_BUFFER: (buffer, opaque, read) Token associated with message. QOP_STATE: (gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required. Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the calculation and verification of MICs over zero-length messages. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_DEFECTIVE_TOKEN': The token failed consistency checks. `GSS_S_BAD_SIG': The MIC was incorrect. `GSS_S_DUPLICATE_TOKEN': The token was valid, and contained a correct MIC for the message, but it had already been processed. `GSS_S_OLD_TOKEN': The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. `GSS_S_UNSEQ_TOKEN': The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. `GSS_S_GAP_TOKEN': The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. `GSS_S_CONTEXT_EXPIRED': The context has already expired. `GSS_S_NO_CONTEXT': The context_handle parameter did not identify a valid context. gss_wrap -------- -- Function: OM_uint32 gss_wrap (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, int CONF_REQ_FLAG, gss_qop_t QOP_REQ, const gss_buffer_t INPUT_MESSAGE_BUFFER, int * CONF_STATE, gss_buffer_t OUTPUT_MESSAGE_BUFFER) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. CONF_REQ_FLAG: (boolean, read) Non-zero - Both confidentiality and integrity services are requested. Zero - Only integrity service is requested. QOP_REQ: (gss_qop_t, read, optional) Specifies required quality of protection. A mechanism-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP. INPUT_MESSAGE_BUFFER: (buffer, opaque, read) Message to be protected. CONF_STATE: (boolean, modify, optional) Non-zero - Confidentiality, data origin authentication and integrity services have been applied. Zero - Integrity and data origin services only has been applied. Specify NULL if not required. OUTPUT_MESSAGE_BUFFER: (buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to gss_release_buffer(). Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping of zero-length messages. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_CONTEXT_EXPIRED': The context has already expired. `GSS_S_NO_CONTEXT': The context_handle parameter did not identify a valid context. `GSS_S_BAD_QOP': The specified QOP is not supported by the mechanism. gss_unwrap ---------- -- Function: OM_uint32 gss_unwrap (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, const gss_buffer_t INPUT_MESSAGE_BUFFER, gss_buffer_t OUTPUT_MESSAGE_BUFFER, int * CONF_STATE, gss_qop_t * QOP_STATE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Identifies the context on which the message arrived. INPUT_MESSAGE_BUFFER: (buffer, opaque, read) Protected message. OUTPUT_MESSAGE_BUFFER: (buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to gss_release_buffer(). CONF_STATE: (boolean, modify, optional) Non-zero - Confidentiality and integrity protection were used. Zero - Integrity service only was used. Specify NULL if not required. QOP_STATE: (gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required. Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping and unwrapping of zero-length messages. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_DEFECTIVE_TOKEN': The token failed consistency checks. `GSS_S_BAD_SIG': The MIC was incorrect. `GSS_S_DUPLICATE_TOKEN': The token was valid, and contained a correct MIC for the message, but it had already been processed. `GSS_S_OLD_TOKEN': The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. `GSS_S_UNSEQ_TOKEN': The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. `GSS_S_GAP_TOKEN': The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. `GSS_S_CONTEXT_EXPIRED': The context has already expired. `GSS_S_NO_CONTEXT': The context_handle parameter did not identify a valid context.  File: gss.info, Node: Name Manipulation, Next: Miscellaneous Routines, Prev: Per-Message Routines, Up: Standard GSS API 3.8 Name Manipulation ===================== GSS-API Name manipulation Routines Routine Function ------- -------- gss_import_name Convert a contiguous string name to internal-form. gss_display_name Convert internal-form name to text. gss_compare_name Compare two internal-form names. gss_release_name Discard an internal-form name. gss_inquire_names_for_mech List the name-types supported by. the specified mechanism. gss_inquire_mechs_for_name List mechanisms that support the specified name-type. gss_canonicalize_name Convert an internal name to an MN. gss_export_name Convert an MN to export form. gss_duplicate_name Create a copy of an internal name. gss_import_name --------------- -- Function: OM_uint32 gss_import_name (OM_uint32 * MINOR_STATUS, const gss_buffer_t INPUT_NAME_BUFFER, const gss_OID INPUT_NAME_TYPE, gss_name_t * OUTPUT_NAME) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INPUT_NAME_BUFFER: (buffer, octet-string, read) Buffer containing contiguous string name to convert. INPUT_NAME_TYPE: (Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism-specific default printable syntax, or an OID recognized by the GSS-API implementation to name a specific namespace. OUTPUT_NAME: (gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Convert a contiguous string name to internal form. In general, the internal name returned (via the @output_name parameter) will not be an MN; the exception to this is if the @input_name_type indicates that the contiguous string provided via the @input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_NAMETYPE': The input_name_type was unrecognized. `GSS_S_BAD_NAME': The input_name parameter could not be interpreted as a name of the specified type. `GSS_S_BAD_MECH': The input name-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input-name is not supported. gss_display_name ---------------- -- Function: OM_uint32 gss_display_name (OM_uint32 * MINOR_STATUS, const gss_name_t INPUT_NAME, gss_buffer_t OUTPUT_NAME_BUFFER, gss_OID * OUTPUT_NAME_TYPE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INPUT_NAME: (gss_name_t, read) Name to be displayed. OUTPUT_NAME_BUFFER: (buffer, character-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to gss_release_buffer(). OUTPUT_NAME_TYPE: (Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required. Allows an application to obtain a textual representation of an opaque internal-form name for display purposes. The syntax of a printable name is defined by the GSS-API implementation. If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer. If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_NAME': @input_name was ill-formed. gss_compare_name ---------------- -- Function: OM_uint32 gss_compare_name (OM_uint32 * MINOR_STATUS, const gss_name_t NAME1, const gss_name_t NAME2, int * NAME_EQUAL) MINOR_STATUS: (Integer, modify) Mechanism specific status code. NAME1: (gss_name_t, read) Internal-form name. NAME2: (gss_name_t, read) Internal-form name. NAME_EQUAL: (boolean, modify) Non-zero - names refer to same entity. Zero - names refer to different entities (strictly, the names are not known to refer to the same identity). Allows an application to compare two internal-form names to determine whether they refer to the same entity. If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_NAMETYPE': The two names were of incomparable types. `GSS_S_BAD_NAME': One or both of name1 or name2 was ill-formed. gss_release_name ---------------- -- Function: OM_uint32 gss_release_name (OM_uint32 * MINOR_STATUS, gss_name_t * NAME) MINOR_STATUS: (Integer, modify) Mechanism specific status code. NAME: (gss_name_t, modify) The name to be deleted. Free GSSAPI-allocated storage associated with an internal-form name. The name is set to GSS_C_NO_NAME on successful completion of this call. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_NAME': The name parameter did not contain a valid name. gss_inquire_names_for_mech -------------------------- -- Function: OM_uint32 gss_inquire_names_for_mech (OM_uint32 * MINOR_STATUS, const gss_OID MECHANISM, gss_OID_set * NAME_TYPES) MINOR_STATUS: (Integer, modify) Mechanism specific status code. MECHANISM: (gss_OID, read) The mechanism to be interrogated. NAME_TYPES: (gss_OID_set, modify) Set of name-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to gss_release_oid_set(). Returns the set of nametypes supported by the specified mechanism. Return value: `GSS_S_COMPLETE': Successful completion. gss_inquire_mechs_for_name -------------------------- -- Function: OM_uint32 gss_inquire_mechs_for_name (OM_uint32 * MINOR_STATUS, const gss_name_t INPUT_NAME, gss_OID_set * MECH_TYPES) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INPUT_NAME: (gss_name_t, read) The name to which the inquiry relates. MECH_TYPES: (gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to gss_release_oid_set(). Returns the set of mechanisms supported by the GSS-API implementation that may be able to process the specified name. Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism-independent GSS-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism-specific routine. Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_NAME': The input_name parameter was ill-formed. `GSS_S_BAD_NAMETYPE': The input_name parameter contained an invalid or unsupported type of name. gss_canonicalize_name --------------------- -- Function: OM_uint32 gss_canonicalize_name (OM_uint32 * MINOR_STATUS, const gss_name_t INPUT_NAME, const gss_OID MECH_TYPE, gss_name_t * OUTPUT_NAME) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INPUT_NAME: (gss_name_t, read) The name for which a canonical form is desired. MECH_TYPE: (Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided. OUTPUT_NAME: (gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing @mech_type as its only member, followed by a call to gss_init_sec_context(), specifying @mech_type as the authentication mechanism. Return value: `GSS_S_COMPLETE': Successful completion. gss_export_name --------------- -- Function: OM_uint32 gss_export_name (OM_uint32 * MINOR_STATUS, const gss_name_t INPUT_NAME, gss_buffer_t EXPORTED_NAME) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INPUT_NAME: (gss_name_t, read) The MN to be exported. EXPORTED_NAME: (gss_buffer_t, octet-string, modify) The canonical contiguous string form of @input_name. Storage associated with this string must freed by the application after use with gss_release_buffer(). To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access-control list). The @input_name parameter must specify a valid MN (i.e. an internal name generated by gss_accept_sec_context() or by gss_canonicalize_name()). Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_NAME_NOT_MN': The provided internal name was not a mechanism name. `GSS_S_BAD_NAME': The provided internal name was ill-formed. `GSS_S_BAD_NAMETYPE': The internal name was of a type not supported by the GSS-API implementation. gss_duplicate_name ------------------ -- Function: OM_uint32 gss_duplicate_name (OM_uint32 * MINOR_STATUS, const gss_name_t SRC_NAME, gss_name_t * DEST_NAME) MINOR_STATUS: (Integer, modify) Mechanism specific status code. SRC_NAME: (gss_name_t, read) Internal name to be duplicated. DEST_NAME: (gss_name_t, modify) The resultant copy of @src_name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Create an exact duplicate of the existing internal name @src_name. The new @dest_name will be independent of src_name (i.e. @src_name and @dest_name must both be released, and the release of one shall not affect the validity of the other). Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_NAME': The src_name parameter was ill-formed.  File: gss.info, Node: Miscellaneous Routines, Next: SASL GS2 Routines, Prev: Name Manipulation, Up: Standard GSS API 3.9 Miscellaneous Routines ========================== GSS-API Miscellaneous Routines Routine Function ------- -------- gss_add_oid_set_member Add an object identifier to a set. gss_display_status Convert a GSS-API status code to text. gss_indicate_mechs Determine available underlying authentication mechanisms. gss_release_buffer Discard a buffer. gss_release_oid_set Discard a set of object identifiers. gss_create_empty_oid_set Create a set containing no object identifiers. gss_test_oid_set_member Determines whether an object identifier is a member of a set. gss_encapsulate_token Encapsulate a context token. gss_decapsulate_token Decapsulate a context token. gss_oid_equal Compare two OIDs for equality. gss_add_oid_set_member ---------------------- -- Function: OM_uint32 gss_add_oid_set_member (OM_uint32 * MINOR_STATUS, const gss_OID MEMBER_OID, gss_OID_set * OID_SET) MINOR_STATUS: (integer, modify) Mechanism specific status code. MEMBER_OID: (Object ID, read) The object identifier to copied into the set. OID_SET: (Set of Object ID, modify) The set in which the object identifier should be inserted. Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID-set that was created by GSS-API (e.g. a set returned by gss_create_empty_oid_set()). GSS-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged. Return value: `GSS_S_COMPLETE': Successful completion. gss_display_status ------------------ -- Function: OM_uint32 gss_display_status (OM_uint32 * MINOR_STATUS, OM_uint32 STATUS_VALUE, int STATUS_TYPE, const gss_OID MECH_TYPE, OM_uint32 * MESSAGE_CONTEXT, gss_buffer_t STATUS_STRING) MINOR_STATUS: (integer, modify) Mechanism specific status code. STATUS_VALUE: (Integer, read) Status value to be converted. STATUS_TYPE: (Integer, read) GSS_C_GSS_CODE - status_value is a GSS status code. GSS_C_MECH_CODE - status_value is a mechanism status code. MECH_TYPE: (Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default. MESSAGE_CONTEXT: (Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from gss_display_status(), a non-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to gss_display_status(), passing the same status_value, status_type, mech_type, and message_context parameters. STATUS_STRING: (buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to gss_release_buffer(). Allows an application to obtain a textual representation of a GSS-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non-zero value in this parameter if there are further messages to extract. The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr: OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string; ... message_context = 0; do { maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string) fprintf(stderr, "%.*s\n", (int)status_string.length, (char *)status_string.value); gss_release_buffer(&min_status, &status_string); } while (message_context != 0); Return value: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_MECH': Indicates that translation in accordance with an unsupported mechanism type was requested. `GSS_S_BAD_STATUS': The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE. gss_indicate_mechs ------------------ -- Function: OM_uint32 gss_indicate_mechs (OM_uint32 * MINOR_STATUS, gss_OID_set * MECH_SET) MINOR_STATUS: (integer, modify) Mechanism specific status code. MECH_SET: (set of Object IDs, modify) Set of implementation-supported mechanisms. The returned gss_OID_set value will be a dynamically-allocated OID set, that should be released by the caller after use with a call to gss_release_oid_set(). Allows an application to determine which underlying security mechanisms are available. Return value: `GSS_S_COMPLETE': Successful completion. gss_release_buffer ------------------ -- Function: OM_uint32 gss_release_buffer (OM_uint32 * MINOR_STATUS, gss_buffer_t BUFFER) MINOR_STATUS: (integer, modify) Mechanism specific status code. BUFFER: (buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed. Free storage associated with a buffer. The storage must have been allocated by a GSS-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer). Return value: `GSS_S_COMPLETE': Successful completion. gss_release_oid_set ------------------- -- Function: OM_uint32 gss_release_oid_set (OM_uint32 * MINOR_STATUS, gss_OID_set * SET) MINOR_STATUS: (integer, modify) Mechanism specific status code. SET: (Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted. Free storage associated with a GSSAPI-generated gss_OID_set object. The set parameter must refer to an OID-set that was returned from a GSS-API routine. gss_release_oid_set() will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc. The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine. Return value: `GSS_S_COMPLETE': Successful completion. gss_create_empty_oid_set ------------------------ -- Function: OM_uint32 gss_create_empty_oid_set (OM_uint32 * MINOR_STATUS, gss_OID_set * OID_SET) MINOR_STATUS: (integer, modify) Mechanism specific status code. OID_SET: (Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to gss_release_oid_set(). Create an object-identifier set containing no object identifiers, to which members may be subsequently added using the gss_add_oid_set_member() routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred. Return value: `GSS_S_COMPLETE': Successful completion. gss_test_oid_set_member ----------------------- -- Function: OM_uint32 gss_test_oid_set_member (OM_uint32 * MINOR_STATUS, const gss_OID MEMBER, const gss_OID_set SET, int * PRESENT) MINOR_STATUS: (integer, modify) Mechanism specific status code. MEMBER: (Object ID, read) The object identifier whose presence is to be tested. SET: (Set of Object ID, read) The Object Identifier set. PRESENT: (Boolean, modify) Non-zero if the specified OID is a member of the set, zero if not. Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by gss_indicate_mechs(), gss_acquire_cred(), and gss_inquire_cred(), but will also work with user-generated sets. Return value: `GSS_S_COMPLETE': Successful completion. gss_encapsulate_token --------------------- -- Function: extern OM_uint32 gss_encapsulate_token (gss_const_buffer_t INPUT_TOKEN, gss_const_OID TOKEN_OID, gss_buffer_t OUTPUT_TOKEN) INPUT_TOKEN: (buffer, opaque, read) Buffer with GSS-API context token data. TOKEN_OID: (Object ID, read) Object identifier of token. OUTPUT_TOKEN: (buffer, opaque, modify) Encapsulated token data; caller must release with gss_release_buffer(). Add the mechanism-independent token header to GSS-API context token data. This is used for the initial token of a GSS-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339. Returns: `GSS_S_COMPLETE': Indicates successful completion, and that output parameters holds correct information. `GSS_S_FAILURE': Indicates that encapsulation failed for reasons unspecified at the GSS-API level. gss_decapsulate_token --------------------- -- Function: OM_uint32 gss_decapsulate_token (gss_const_buffer_t INPUT_TOKEN, gss_const_OID TOKEN_OID, gss_buffer_t OUTPUT_TOKEN) INPUT_TOKEN: (buffer, opaque, read) Buffer with GSS-API context token. TOKEN_OID: (Object ID, read) Expected object identifier of token. OUTPUT_TOKEN: (buffer, opaque, modify) Decapsulated token data; caller must release with gss_release_buffer(). Remove the mechanism-independent token header from an initial GSS-API context token. Unwrap a buffer in the mechanism-independent token format. This is the reverse of gss_encapsulate_token(). The translation is loss-less, all data is preserved as is. This function is standardized in RFC 6339. Return value: `GSS_S_COMPLETE': Indicates successful completion, and that output parameters holds correct information. `GSS_S_DEFECTIVE_TOKEN': Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors). `GSS_S_FAILURE': Indicates that decapsulation failed for reasons unspecified at the GSS-API level. gss_oid_equal ------------- -- Function: int gss_oid_equal (gss_const_OID FIRST_OID, gss_const_OID SECOND_OID) FIRST_OID: (Object ID, read) First Object identifier. SECOND_OID: (Object ID, read) First Object identifier. Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339. Return value: Returns boolean value true when the two OIDs are equal, otherwise false.  File: gss.info, Node: SASL GS2 Routines, Prev: Miscellaneous Routines, Up: Standard GSS API 3.10 SASL GS2 Routines ====================== gss_inquire_mech_for_saslname ----------------------------- -- Function: OM_uint32 gss_inquire_mech_for_saslname (OM_uint32 * MINOR_STATUS, const gss_buffer_t SASL_MECH_NAME, gss_OID * MECH_TYPE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. SASL_MECH_NAME: (buffer, character-string, read) Buffer with SASL mechanism name. MECH_TYPE: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. Output GSS-API mechanism OID of mechanism associated with given @sasl_mech_name. Returns: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_MECH': There is no GSS-API mechanism known as @sasl_mech_name. gss_inquire_saslname_for_mech ----------------------------- -- Function: OM_uint32 gss_inquire_saslname_for_mech (OM_uint32 * MINOR_STATUS, const gss_OID DESIRED_MECH, gss_buffer_t SASL_MECH_NAME, gss_buffer_t MECH_NAME, gss_buffer_t MECH_DESCRIPTION) MINOR_STATUS: (Integer, modify) Mechanism specific status code. DESIRED_MECH: (OID, read) Identifies the GSS-API mechanism to query. SASL_MECH_NAME: (buffer, character-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). MECH_NAME: (buffer, character-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). MECH_DESCRIPTION: (buffer, character-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to gss_release_buffer(). Output the SASL mechanism name of a GSS-API mechanism. It also returns a name and description of the mechanism in a user friendly form. Returns: `GSS_S_COMPLETE': Successful completion. `GSS_S_BAD_MECH': The @desired_mech OID is unsupported.  File: gss.info, Node: Extended GSS API, Next: Invoking gss, Prev: Standard GSS API, Up: Top 4 Extended GSS API ****************** None of the following functions are standard GSS API functions. As such, they are not declared in `gss/api.h', but rather in `gss/ext.h' (which is included from `gss.h'). *Note Header::. gss_check_version ----------------- -- Function: const char * gss_check_version (const char * REQ_VERSION) REQ_VERSION: version string to compare with, or NULL Check that the version of the library is at minimum the one given as a string in @req_version. Return value: The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned. gss_userok ---------- -- Function: int gss_userok (const gss_name_t NAME, const char * USERNAME) NAME: (gss_name_t, read) Name to be compared. USERNAME: Zero terminated string with username. Compare the username against the output from gss_export_name() invoked on @name, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal Return value: Returns 0 if the names match, non-0 otherwise.  File: gss.info, Node: Invoking gss, Next: Acknowledgements, Prev: Extended GSS API, Up: Top 5 Invoking gss ************** Name **** GNU GSS (gss) - Command line interface to the GSS Library. Description *********** `gss' is the main program of GNU GSS. Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. Commands ******** `gss' recognizes these commands: -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. Other Options ************* These are some standard parameters. -h, --help Print help and exit -V, --version Print version and exit -q, --quiet Silent operation (default=off) Examples ******** -h, --help Print help and exit -V, --version Print version and exit -q, --quiet Silent operation (default=off)  File: gss.info, Node: Acknowledgements, Next: Criticism of GSS, Prev: Invoking gss, Up: Top 6 Acknowledgements ****************** This manual borrows text from RFC 2743 and RFC 2744 that describe GSS API formally.  File: gss.info, Node: Criticism of GSS, Next: Copying Information, Prev: Acknowledgements, Up: Top Appendix A Criticism of GSS *************************** The author has doubts whether GSS is the best solution for free software projects looking for a implementation agnostic security framework. We express these doubts in this section, so that the reader can judge for herself if any of the potential problems discussed here are relevant for their project, or if the benefit outweigh the problems. We are aware that some of the opinions are highly subjective, but we offer them in the hope they can serve as anecdotal evidence. GSS can be criticized on several levels. We start with the actual implementation. GSS does not appear to be designed by experienced C programmers. While generally this may be a good thing (C is not the best language), but since they defined the API in C, it is unfortunate. The primary evidence of this is the major_status and minor_status error code solution. It is a complicated way to describe error conditions, but what makes matters worse, the error condition is separated; half of the error condition is in the function return value and the other half is in the first argument to the function, which is always a pointer to an integer. (The pointer is not even allowed to be `NULL', if the application doesn't care about the minor error code.) This makes the API unreadable, and difficult to use. A better solutions would be to return a struct containing the entire error condition, which can be accessed using macros, although we acknowledge that the C language used at the time GSS was designed may not have allowed this (this may in fact be the reason the awkward solution was chosen). Instead, the return value could have been passed back to callers using a pointer to a struct, accessible using various macros, and the function could have a void prototype. The fact that minor_status is placed first in the parameter list increases the pain it is to use the API. Important parameters should be placed first. A better place for minor_status (if it must be present at all) would have been last in the prototypes. Another evidence of the C inexperience are the memory management issues; GSS provides functions to deallocate data stored within, e.g., `gss_buffer_t' but the caller is responsible of deallocating the structure pointed at by the `gss_buffer_t' (i.e., the `gss_buffer_desc') itself. Memory management issues are error prone, and this division easily leads to memory leaks (or worse). Instead, the API should be the sole owner of all `gss_ctx_id_t', `gss_cred_id_t', and `gss_buffer_t' structures: they should be allocated by the library, and deallocated (using the utility functions defined for this purpose) by the library. TBA: specification is unclear how memory for OIDs are managed. For example, who is responsible for deallocate potentially newly allocated OIDs returned as `actual_mechs' in `gss_acquire_cred'? Further, are OIDs deeply copied into OID sets? In other words, if I add an OID into an OID set, and modify the original OID, will the OID in the OID set be modified too? Another illustrating example is the sample GSS header file given in the RFC, which contains: /* * We have included the xom.h header file. Verify that OM_uint32 * is defined correctly. */ #if sizeof(gss_uint32) != sizeof(OM_uint32) #error Incompatible definition of OM_uint32 from xom.h #endif The C pre-processor does not know about the `sizeof' function, so it is treated as an identifier, which maps to 0. Thus, the expression does not check that the size of `OM_uint32' is correct. It checks whether the expression `0 != 0' holds. TBA: thread issues TBA: multiple mechanisms in a GSS library TBA: high-level design criticism. TBA: no credential forwarding. TBA: internationalization TBA: dynamically generated OIDs and memory deallocation issue. I.e., should gss_import_name or gss_duplicate_name allocate memory and copy the OID provided, or simply copy the pointer? If the former, who would deallocate that memory? If the latter, the application may deallocate or modify the OID, which seem unwanted. TBA: krb5: no way to access authorization-data TBA: krb5: firewall/pre-IP: iakerb status? TBA: krb5: single-DES only TBA: the API may block, unusable in select() based servers. Especially if the servers contacted is decided by the, yet unauthenticated, remote client. TBA: krb5: no support for GSS_C_PROT_READY_FLAG. We support it anyway, though. TBA: krb5: gssapi-cfx differ from rfc 1964 in the reply token in that the latter require presence of sequence numbers whereas the former doesn't. Finally we note that few free security applications uses GSS, perhaps the only major exception to this are Kerberos 5 implementations. While not substantial evidence, this do suggest that the GSS may not be the simplest solution available to solve actual problems, since otherwise more projects would have chosen to take advantage of the work that went into GSS instead of using another framework (or designing their own solution). Our conclusion is that free software projects that are looking for a security framework should evaluate carefully whether GSS actually is the best solution before using it. In particular it is recommended to compare GSS with the Simple Authentication and Security Layer (SASL) framework, which in several situations provide the same feature as GSS does. The most compelling argument for SASL over GSS is, as its acronym suggest, Simple, whereas GSS is far from it. However, that said, for free software projects that wants to support Kerberos 5, we do acknowledge that no other framework provides a more portable and interoperable interface into the Kerberos 5 system. If your project needs to use Kerberos 5 specifically, we do recommend you to use GSS instead of the Kerberos 5 implementation specific APIs.  File: gss.info, Node: Copying Information, Next: Concept Index, Prev: Criticism of GSS, Up: Top Appendix B Copying Information ****************************** * Menu: * GNU Free Documentation License:: License for copying this manual. * GNU GPL:: License for copying the programs.  File: gss.info, Node: GNU Free Documentation License, Next: GNU GPL, Up: Copying Information B.1 GNU Free Documentation License ================================== Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. `http://fsf.org/' Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See `http://www.gnu.org/copyleft/'. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  File: gss.info, Node: GNU GPL, Prev: GNU Free Documentation License, Up: Copying Information B.2 GNU General Public License ============================== Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble ======== The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS ==================== 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a. The work must carry prominent notices stating that you modified it, and giving a relevant date. b. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d. Limiting the use for publicity purposes of names of licensors or authors of the material; or e. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS =========================== How to Apply These Terms to Your New Programs ============================================= If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. Copyright (C) YEAR NAME OF AUTHOR This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see `http://www.gnu.org/licenses/'. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: PROGRAM Copyright (C) YEAR NAME OF AUTHOR This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see `http://www.gnu.org/licenses/'. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.  File: gss.info, Node: Concept Index, Next: API Index, Prev: Copying Information, Up: Top Concept Index ************* �[index�] * Menu: * AIX: Supported Platforms. (line 62) * command line: Invoking gss. (line 6) * Compiling your application: Building the source. (line 6) * Contributing: Contributing. (line 7) * Debian: Supported Platforms. (line 8) * Download: Downloading and Installing. (line 6) * FDL, GNU Free Documentation License: GNU Free Documentation License. (line 6) * FreeBSD: Supported Platforms. (line 89) * Future goals: Planned Features. (line 6) * GPL, GNU General Public License: GNU GPL. (line 6) * Hacking: Contributing. (line 7) * Header files: Header. (line 6) * HP-UX: Supported Platforms. (line 70) * Installation: Downloading and Installing. (line 6) * invoking gss: Invoking gss. (line 6) * IRIX: Supported Platforms. (line 58) * License, GNU GPL: GNU GPL. (line 6) * Mandrake: Supported Platforms. (line 54) * mechanism status codes: Error Handling. (line 6) * Memory allocation failure: Out of Memory handling. (line 6) * Motorola Coldfire: Supported Platforms. (line 94) * NetBSD: Supported Platforms. (line 79) * OpenBSD: Supported Platforms. (line 84) * Out of Memory handling: Out of Memory handling. (line 6) * RedHat: Supported Platforms. (line 37) * RedHat Advanced Server: Supported Platforms. (line 46) * Reporting Bugs: Bug Reports. (line 6) * Solaris: Supported Platforms. (line 75) * status codes: Error Handling. (line 6) * SuSE: Supported Platforms. (line 28) * SuSE Linux: Supported Platforms. (line 33) * Todo list: Planned Features. (line 6) * Tru64: Supported Platforms. (line 23) * uClibc: Supported Platforms. (line 94) * uClinux: Supported Platforms. (line 94) * Windows: Supported Platforms. (line 66)  File: gss.info, Node: API Index, Prev: Concept Index, Up: Top API Index ********* �[index�] * Menu: * gss: Invoking gss. (line 6) * gss_accept_sec_context: Context-Level Routines. (line 445) * gss_acquire_cred: Credential Management. (line 29) * gss_add_cred: Credential Management. (line 134) * gss_add_oid_set_member: Miscellaneous Routines. (line 32) * GSS_CALLING_ERROR: Error Handling. (line 119) * gss_canonicalize_name: Name Manipulation. (line 222) * gss_check_version: Extended GSS API. (line 14) * gss_compare_name: Name Manipulation. (line 112) * gss_context_time: Context-Level Routines. (line 840) * gss_create_empty_oid_set: Miscellaneous Routines. (line 219) * gss_decapsulate_token: Miscellaneous Routines. (line 297) * gss_delete_sec_context: Context-Level Routines. (line 749) * gss_display_name: Name Manipulation. (line 71) * gss_display_status: Miscellaneous Routines. (line 64) * gss_duplicate_name: Name Manipulation. (line 285) * gss_encapsulate_token: Miscellaneous Routines. (line 268) * GSS_ERROR: Error Handling. (line 119) * gss_export_name: Name Manipulation. (line 252) * gss_export_sec_context: Context-Level Routines. (line 1086) * gss_get_mic: Per-Message Routines. (line 30) * gss_import_name: Name Manipulation. (line 30) * gss_import_sec_context: Context-Level Routines. (line 1153) * gss_indicate_mechs: Miscellaneous Routines. (line 152) * gss_init_sec_context: Context-Level Routines. (line 38) * gss_inquire_context: Context-Level Routines. (line 870) * gss_inquire_cred: Credential Management. (line 288) * gss_inquire_cred_by_mech: Credential Management. (line 336) * gss_inquire_mech_for_saslname: SASL GS2 Routines. (line 12) * gss_inquire_mechs_for_name: Name Manipulation. (line 182) * gss_inquire_names_for_mech: Name Manipulation. (line 162) * gss_inquire_saslname_for_mech: SASL GS2 Routines. (line 39) * gss_oid_equal: Miscellaneous Routines. (line 327) * gss_process_context_token: Context-Level Routines. (line 801) * gss_release_buffer: Miscellaneous Routines. (line 172) * gss_release_cred: Credential Management. (line 393) * gss_release_name: Name Manipulation. (line 142) * gss_release_oid_set: Miscellaneous Routines. (line 196) * GSS_ROUTINE_ERROR: Error Handling. (line 119) * GSS_S_...: Error Handling. (line 44) * GSS_SUPPLEMENTARY_INFO: Error Handling. (line 119) * gss_test_oid_set_member: Miscellaneous Routines. (line 242) * gss_unwrap: Per-Message Routines. (line 188) * gss_userok: Extended GSS API. (line 28) * gss_verify_mic: Per-Message Routines. (line 76) * gss_wrap: Per-Message Routines. (line 132) * gss_wrap_size_limit: Context-Level Routines. (line 1025)  Tag Table: Node: Top713 Node: Introduction2061 Node: Getting Started2939 Node: Features3953 Node: GSS-API Overview4715 Node: Supported Platforms8424 Node: Commercial Support10970 Node: Downloading and Installing11859 Node: Bug Reports12912 Node: Contributing14292 Node: Planned Features16404 Node: Preparation17018 Node: Header17673 Node: Initialization19236 Node: Version Check19802 Node: Building the source20739 Node: Out of Memory handling22594 Node: Standard GSS API22908 Node: Simple Data Types23694 Ref: Object Identifiers26461 Node: Complex Data Types29067 Node: Optional Parameters43220 Node: Error Handling44452 Node: Credential Management53250 Ref: gss_acquire_cred54194 Ref: gss_add_cred59175 Ref: gss_inquire_cred67190 Ref: gss_inquire_cred_by_mech69186 Ref: gss_release_cred71820 Node: Context-Level Routines72575 Ref: gss_init_sec_context73920 Ref: gss_accept_sec_context89939 Ref: gss_delete_sec_context103044 Ref: gss_process_context_token105594 Ref: gss_context_time107284 Ref: gss_inquire_context108108 Ref: gss_wrap_size_limit113653 Ref: gss_export_sec_context116330 Ref: gss_import_sec_context119596 Node: Per-Message Routines120709 Ref: gss_get_mic121822 Ref: gss_verify_mic123684 Ref: gss_wrap125824 Ref: gss_unwrap128084 Node: Name Manipulation130635 Ref: gss_import_name131787 Ref: gss_display_name133506 Ref: gss_compare_name135218 Ref: gss_release_name136277 Ref: gss_inquire_names_for_mech136854 Ref: gss_inquire_mechs_for_name137544 Ref: gss_canonicalize_name139287 Ref: gss_export_name140592 Ref: gss_duplicate_name141847 Node: Miscellaneous Routines142699 Ref: gss_add_oid_set_member143976 Ref: gss_display_status145289 Ref: gss_indicate_mechs148972 Ref: gss_release_buffer149617 Ref: gss_release_oid_set150603 Ref: gss_create_empty_oid_set151426 Ref: gss_test_oid_set_member152249 Ref: gss_encapsulate_token153146 Ref: gss_decapsulate_token154280 Ref: gss_oid_equal155438 Node: SASL GS2 Routines155964 Ref: gss_inquire_mech_for_saslname156170 Ref: gss_inquire_saslname_for_mech157071 Node: Extended GSS API158420 Ref: gss_check_version158785 Ref: gss_userok159246 Node: Invoking gss159745 Node: Acknowledgements160742 Node: Criticism of GSS160965 Node: Copying Information167001 Node: GNU Free Documentation License167318 Node: GNU GPL192464 Node: Concept Index230027 Node: API Index233143  End Tag Table ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/Makefile.am���������������������������������������������������������������������������0000644�0000000�0000000�00000003443�11546676326�012022� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. SUBDIRS = cyclo if ENABLE_GTK_DOC SUBDIRS += reference endif EXTRA_DIST = gss.html gss.ps gss.pdf \ gdoc asciidoc asciidoc.conf texinfo.conf texinfo.css info_TEXINFOS = gss.texi gss_TEXINFOS = gpl-3.0.texi fdl-1.3.texi $(gdoc_TEXINFOS) AM_MAKEINFOHTMLFLAGS = --no-split --number-sections --css-include=texinfo.css dist_man_MANS = gss.1 $(gdoc_MANS) MAINTAINERCLEANFILES = $(dist_man_MANS) gss.1: $(top_srcdir)/src/gss.c $(top_srcdir)/src/gss.ggo \ $(top_srcdir)/configure.ac $(HELP2MAN) \ --name="Generic Security Service command line interface" \ --output=$@ $(top_builddir)/src/gss # GDOC GDOC_SRC = $(top_srcdir)/lib/*.c GDOC_TEXI_PREFIX = texi/ GDOC_MAN_PREFIX = man/ GDOC_MAN_EXTRA_ARGS = -module $(PACKAGE) -sourceversion $(VERSION) \ -bugsto $(PACKAGE_BUGREPORT) -includefuncprefix -seeinfo $(PACKAGE) \ -copyright "2003-2011 Simon Josefsson" \ -verbatimcopying -pkg-name "$(PACKAGE_NAME)" include $(srcdir)/Makefile.gdoci �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/doc/gdoc����������������������������������������������������������������������������������0000755�0000000�0000000�00000062245�11546676326�010635� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/perl ## Copyright (c) 2002-2009, 2011 Simon Josefsson ## added -texinfo, -listfunc, -pkg-name ## man page revamp ## various improvements ## Copyright (c) 2001, 2002 Nikos Mavrogiannopoulos ## added -tex ## Copyright (c) 1998 Michael Zucchi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # This will read a C source code file and scan for embedded comments # in the style of gnome comments (+minor extensions - see below). # usage: # gdoc [ -docbook | -html | -text | -man | -tex | -texinfo | -listfunc ] # [ -sourceversion verno ] [ -include file | -includefuncprefix ] # [ -bugsto address ] [ -pkg-name packagename ] # [ -seeinfo infonode ] [ -copyright notice ] [ -verbatimcopying ] # [ -function funcname [ -function funcname ...] ] c file(s)s > outputfile # # Set output format using one of -docbook, -html, -text, -man, -tex, # -texinfo, or -listfunc. Default is man. # # -sourceversion # Version number for source code, e.g. '1.0.4'. Used in 'man' headers. # Defaults to using current date. # # -include FILE # For man pages, mention #include <FILE.h> in the synopsis. # # -includefuncprefix # For man pages, mention a #include <FILE.h> in the synopsis. # The FILE derived from the function prefix. For example, a # function gss_init_sec_context will generate an include # statement of #include <gss.h>. # # -bugsto address # For man pages, include a section about reporting bugs and mention # the given e-mail address, e.g 'bug-libidn@gnu.org'. # # -pkg-name packagename # For man pages when -bugsto is used, also include help URLs to the # the project's home page. For example, "GNU Libidn". # # -seeinfo infonode # For man pages, include a section that point to an info manual # for more information. # # -copyright notice # For man pages, include a copyright section with the given # notice after a preamble. Use, e.g., '2002, 2003 Simon Josefsson'. # # -verbatimcopying # For man pages, and when the -copyright parameter is used, # add a licensing statement that say verbatim copying is permitted. # # -function funcname # If set, then only generate documentation for the given function(s). All # other functions are ignored. # # c files - list of 'c' files to process # # All output goes to stdout, with errors to stderr. # # format of comments. # In the following table, (...)? signifies optional structure. # (...)* signifies 0 or more structure elements # /** # * function_name(:)? (- short description)? # (* @parameterx: (description of parameter x)?)* # (* a blank line)? # * (Description:)? (Description of function)? # * (Section header: (section description)? )* # (*)?*/ # # So .. the trivial example would be: # # /** # * my_function # **/ # # If the Description: header tag is ommitted, then there must be a blank line # after the last parameter specification. # e.g. # /** # * my_function - does my stuff # * @my_arg: its mine damnit # * # * Does my stuff explained. # */ # # or, could also use: # /** # * my_function - does my stuff # * @my_arg: its mine damnit # * Description: Does my stuff explained. # */ # etc. # # All descriptions can be multiline, apart from the short function description. # # All descriptive text is further processed, scanning for the following special # patterns, which are highlighted appropriately. # # 'funcname()' - function # '$ENVVAR' - environmental variable OBSOLETE (?) # '#struct_name' - name of a structure # '@parameter' - name of a parameter # '%CONST' - name of a constant. # # Extensions for LaTeX: # # 1. the symbol '->' will be replaced with a rightarrow # 2. x^y with ${x}^{y}$. # 3. xxx\: with xxx: use POSIX qw(strftime); # match expressions used to find embedded type information $type_constant = "\\\%(\\w+)"; $type_func = "(\\w+\\(\\))"; $type_param = "\\\@(\\w+)"; $type_struct = "\\\#(\\w+)"; $type_env = "(\\\$\\w+)"; # Output conversion substitutions. # One for each output format # these work fairly well %highlights_html = ( $type_constant, "<i>\$1</i>", $type_func, "<b>\$1</b>", $type_struct, "<i>\$1</i>", $type_param, "<tt><b>\$1</b></tt>" ); $blankline_html = "<p>"; %highlights_texinfo = ( $type_constant, "\\\@code{\$1}", $type_func, "\\\@code{\$1}", $type_struct, "\\\@code{\$1}", $type_param, "\\\@code{\$1}" ); $blankline_texinfo = ""; %highlights_tex = ( $type_constant, "{\\\\it \$1}", $type_func, "{\\\\bf \$1}", $type_struct, "{\\\\it \$1}", $type_param, "{\\\\bf \$1}" ); $blankline_tex = "\\\\"; # sgml, docbook format %highlights_sgml = ( $type_constant, "<replaceable class=\"option\">\$1</replaceable>", $type_func, "<function>\$1</function>", $type_struct, "<structname>\$1</structname>", $type_env, "<envar>\$1</envar>", $type_param, "<parameter>\$1</parameter>" ); $blankline_sgml = "</para><para>\n"; # these are pretty rough %highlights_man = ( $type_constant, "\\\\fB\$1\\\\fP", $type_func, "\\\\fB\$1\\\\fP", $type_struct, "\\\\fB\$1\\\\fP", $type_param, "\\\\fI\$1\\\\fP" ); $blankline_man = ""; # text-mode %highlights_text = ( $type_constant, "\$1", $type_func, "\$1", $type_struct, "\$1", $type_param, "\$1" ); $blankline_text = ""; sub usage { print "Usage: $0 [ -v ] [ -docbook | -html | -text | -man | -tex | -texinfo -listfunc ]\n"; print " [ -sourceversion verno ] [ -include file | -includefuncprefix ]\n"; print " [ -bugsto address ] [ -seeinfo infonode ] [ -copyright notice]\n"; print " [ -verbatimcopying ] [ -pkg-name packagename ]\n"; print " [ -function funcname [ -function funcname ...] ]\n"; print " c source file(s) > outputfile\n"; exit 1; } # read arguments if ($#ARGV==-1) { usage(); } $verbose = 0; $output_mode = "man"; %highlights = %highlights_man; $blankline = $blankline_man; $modulename = "API Documentation"; $sourceversion = strftime "%Y-%m-%d", localtime; $function_only = 0; while ($ARGV[0] =~ m/^-(.*)/) { $cmd = shift @ARGV; if ($cmd eq "-html") { $output_mode = "html"; %highlights = %highlights_html; $blankline = $blankline_html; } elsif ($cmd eq "-man") { $output_mode = "man"; %highlights = %highlights_man; $blankline = $blankline_man; } elsif ($cmd eq "-tex") { $output_mode = "tex"; %highlights = %highlights_tex; $blankline = $blankline_tex; } elsif ($cmd eq "-texinfo") { $output_mode = "texinfo"; %highlights = %highlights_texinfo; $blankline = $blankline_texinfo; } elsif ($cmd eq "-text") { $output_mode = "text"; %highlights = %highlights_text; $blankline = $blankline_text; } elsif ($cmd eq "-docbook") { $output_mode = "sgml"; %highlights = %highlights_sgml; $blankline = $blankline_sgml; } elsif ($cmd eq "-listfunc") { $output_mode = "listfunc"; } elsif ($cmd eq "-module") { # not needed for sgml, inherits from calling document $modulename = shift @ARGV; } elsif ($cmd eq "-sourceversion") { $sourceversion = shift @ARGV; } elsif ($cmd eq "-include") { $include = shift @ARGV; } elsif ($cmd eq "-includefuncprefix") { $includefuncprefix = 1; } elsif ($cmd eq "-bugsto") { $bugsto = shift @ARGV; } elsif ($cmd eq "-pkg-name") { $pkgname = shift @ARGV; } elsif ($cmd eq "-copyright") { $copyright = shift @ARGV; } elsif ($cmd eq "-verbatimcopying") { $verbatimcopying = 1; } elsif ($cmd eq "-seeinfo") { $seeinfo = shift @ARGV; } elsif ($cmd eq "-function") { # to only output specific functions $function_only = 1; $function = shift @ARGV; $function_table{$function} = 1; } elsif ($cmd eq "-v") { $verbose = 1; } elsif (($cmd eq "-h") || ($cmd eq "--help")) { usage(); } } ## # dumps section contents to arrays/hashes intended for that purpose. # sub dump_section { my $name = shift @_; my $contents = join "\n", @_; if ($name =~ m/$type_constant/) { $name = $1; # print STDERR "constant section '$1' = '$contents'\n"; $constants{$name} = $contents; } elsif ($name =~ m/$type_param/) { # print STDERR "parameter def '$1' = '$contents'\n"; $name = $1; $parameters{$name} = $contents; } else { # print STDERR "other section '$name' = '$contents'\n"; $sections{$name} = $contents; push @sectionlist, $name; } } ## # output function # # parameters, a hash. # function => "function name" # parameterlist => @list of parameters # parameters => %parameter descriptions # sectionlist => @list of sections # sections => %descriont descriptions # sub repstr { $pattern = shift; $repl = shift; $match1 = shift; $match2 = shift; $match3 = shift; $match4 = shift; $output = $repl; $output =~ s,\$1,$match1,g; $output =~ s,\$2,$match2,g; $output =~ s,\$3,$match3,g; $output =~ s,\$4,$match4,g; eval "\$return = qq/$output/"; # print "pattern $pattern matched 1=$match1 2=$match2 3=$match3 4=$match4 replace $repl yielded $output interpolated $return\n"; $return; } sub just_highlight { my $contents = join "\n", @_; my $line; my $ret = ""; foreach $pattern (keys %highlights) { # print "scanning pattern $pattern ($highlights{$pattern})\n"; $contents =~ s:$pattern:repstr($pattern, $highlights{$pattern}, $1, $2, $3, $4):gse; } foreach $line (split "\n", $contents) { if ($line eq ""){ $ret = $ret . $lineprefix . $blankline; } else { $ret = $ret . $lineprefix . $line; } $ret = $ret . "\n"; } return $ret; } sub output_highlight { print (just_highlight (@_)); } # output in texinfo sub output_texinfo { my %args = %{$_[0]}; my ($parameter, $section); my $count; print "\@subheading ".$args{'function'}."\n"; print "\@anchor{".$args{'function'}."}\n"; print "\@deftypefun {" . $args{'functiontype'} . "} "; print "{".$args{'function'}."} "; print "("; $count = 0; foreach $parameter (@{$args{'parameterlist'}}) { print $args{'parametertypes'}{$parameter}." \@var{".$parameter."}"; if ($count != $#{$args{'parameterlist'}}) { $count++; print ", "; } } print ")\n"; foreach $parameter (@{$args{'parameterlist'}}) { if ($args{'parameters'}{$parameter}) { open FH, ">tmp" or die "cannot open tmp"; $_ = $args{'parameters'}{$parameter}; s/^ *//gm; print FH $_; close FH; $_ = `./asciidoc -s -b texinfo -o - tmp 2>/dev/null`; s/^\n//s; chop; print "\@var{".$parameter."}: " . $_ . "\n"; unlink "tmp"; } } foreach $section (@{$args{'sectionlist'}}) { open FH, ">tmp" or die "cannot open tmp"; print FH "$section:\n" if $section ne $section_default; print FH $args{'sections'}{$section}; close FH; $_ = `./asciidoc -s -b texinfo -o - tmp 2>/dev/null`; chop; print; unlink "tmp"; } print "\@end deftypefun\n\n"; } # output in html sub output_html { my %args = %{$_[0]}; my ($parameter, $section); my $count; print "\n\n<a name=\"". $args{'function'} . "\"> </a><h2>Function</h2>\n"; print "<i>".$args{'functiontype'}."</i>\n"; print "<b>".$args{'function'}."</b>\n"; print "("; $count = 0; foreach $parameter (@{$args{'parameterlist'}}) { print "<i>".$args{'parametertypes'}{$parameter}."</i> <b>".$parameter."</b>\n"; if ($count != $#{$args{'parameterlist'}}) { $count++; print ", "; } } print ")\n"; print "<h3>Arguments</h3>\n"; print "<dl>\n"; foreach $parameter (@{$args{'parameterlist'}}) { print "<dt><i>".$args{'parametertypes'}{$parameter}."</i> <b>".$parameter."</b>\n"; print "<dd>"; output_highlight($args{'parameters'}{$parameter}); } print "</dl>\n"; foreach $section (@{$args{'sectionlist'}}) { print "<h3>$section</h3>\n"; print "<ul>\n"; output_highlight($args{'sections'}{$section}); print "</ul>\n"; } print "<hr>\n"; } # output in tex sub output_tex { my %args = %{$_[0]}; my ($parameter, $section); my $count; my $func = $args{'function'}; my $param; my $param2; my $sec; my $check; my $type; $func =~ s/_/\\_/g; print "\n\n\\subsection{". $func . "}\n\\label{" . $args{'function'} . "}\n"; $type = $args{'functiontype'}; $type =~ s/_/\\_/g; print "{\\it ".$type."}\n"; print "{\\bf ".$func."}\n"; print "("; $count = 0; foreach $parameter (@{$args{'parameterlist'}}) { $param = $args{'parametertypes'}{$parameter}; $param2 = $parameter; $param =~ s/_/\\_/g; $param2 =~ s/_/\\_/g; print "{\\it ".$param."} {\\bf ".$param2."}"; if ($count != $#{$args{'parameterlist'}}) { $count++; print ", "; } } print ")\n"; print "\n{\\large{Arguments}}\n"; print "\\begin{itemize}\n"; $check=0; foreach $parameter (@{$args{'parameterlist'}}) { $param1 = $args{'parametertypes'}{$parameter}; $param1 =~ s/_/\\_/g; $param2 = $parameter; $param2 =~ s/_/\\_/g; $check = 1; print "\\item {\\it ".$param1."} {\\bf ".$param2."}: \n"; # print "\n"; $param3 = $args{'parameters'}{$parameter}; $param3 =~ s/#([a-zA-Z\_]+)/{\\it \1}/g; $out = just_highlight($param3); $out =~ s/_/\\_/g; print $out; } if ($check==0) { print "\\item void\n"; } print "\\end{itemize}\n"; foreach $section (@{$args{'sectionlist'}}) { $sec = $section; $sec =~ s/_/\\_/g; $sec =~ s/#([a-zA-Z\_]+)/{\\it \1}/g; print "\n{\\large{$sec}}\\\\\n"; print "\\begin{rmfamily}\n"; $sec = $args{'sections'}{$section}; $sec =~ s/\\:/:/g; $sec =~ s/#([a-zA-Z\_]+)/{\\it \1}/g; $sec =~ s/->/\$\\rightarrow\$/g; $sec =~ s/([0-9]+)\^([0-9]+)/\$\{\1\}\^\{\2\}\$/g; $out = just_highlight($sec); $out =~ s/_/\\_/g; print $out; print "\\end{rmfamily}\n"; } print "\n"; } # output in sgml DocBook sub output_sgml { my %args = %{$_[0]}; my ($parameter, $section); my $count; my $id; $id = $args{'module'}."-".$args{'function'}; $id =~ s/[^A-Za-z0-9]/-/g; print "<refentry>\n"; print "<refmeta>\n"; print "<refentrytitle><phrase id=\"$id\">".$args{'function'}."</phrase></refentrytitle>\n"; print "</refmeta>\n"; print "<refnamediv>\n"; print " <refname>".$args{'function'}."</refname>\n"; print " <refpurpose>\n"; print " ".$args{'purpose'}."\n"; print " </refpurpose>\n"; print "</refnamediv>\n"; print "<refsynopsisdiv>\n"; print " <title>Synopsis\n"; print " \n"; print " ".$args{'functiontype'}." "; print "".$args{'function'}." "; print "\n"; # print "\n"; # print " Synopsis\n"; # print " \n"; # print " ".$args{'functiontype'}." "; # print "".$args{'function'}." "; # print "\n"; $count = 0; if ($#{$args{'parameterlist'}} >= 0) { foreach $parameter (@{$args{'parameterlist'}}) { print " ".$args{'parametertypes'}{$parameter}; print " $parameter\n"; } } else { print " \n"; } print " \n"; print "\n"; # print "\n"; # print parameters print "\n Arguments\n"; # print "\nArguments\n"; if ($#{$args{'parameterlist'}} >= 0) { print " \n"; foreach $parameter (@{$args{'parameterlist'}}) { print " \n $parameter\n"; print " \n \n"; $lineprefix=" "; output_highlight($args{'parameters'}{$parameter}); print " \n \n \n"; } print " \n"; } else { print " \n None\n \n"; } print "\n"; # print out each section $lineprefix=" "; foreach $section (@{$args{'sectionlist'}}) { print "\n $section\n \n"; # print "\n$section\n"; if ($section =~ m/EXAMPLE/i) { print "\n"; } output_highlight($args{'sections'}{$section}); # print ""; if ($section =~ m/EXAMPLE/i) { print "\n"; } print " \n\n"; } print "\n\n"; } ## # output in man sub output_man { my %args = %{$_[0]}; my ($parameter, $section); my $count; print ".\\\" DO NOT MODIFY THIS FILE! It was generated by gdoc.\n"; print ".TH \"$args{'function'}\" 3 \"$args{'sourceversion'}\" \"". $args{'module'} . "\" \"". $args{'module'} . "\"\n"; print ".SH NAME\n"; print $args{'function'}; if ($args{'purpose'}) { print " \\- " . $args{'purpose'} . "\n"; } else { print " \\- API function\n"; } print ".SH SYNOPSIS\n"; print ".B #include <". $args{'include'} . ">\n" if $args{'include'}; print ".B #include <". lc((split /_/, $args{'function'})[0]) . ".h>\n" if $args{'includefuncprefix'}; print ".sp\n"; print ".BI \"".$args{'functiontype'}." ".$args{'function'}."("; $count = 0; foreach $parameter (@{$args{'parameterlist'}}) { print $args{'parametertypes'}{$parameter}." \" ".$parameter." \""; if ($count != $#{$args{'parameterlist'}}) { $count++; print ", "; } } print ");\"\n"; print ".SH ARGUMENTS\n"; foreach $parameter (@{$args{'parameterlist'}}) { print ".IP \"".$args{'parametertypes'}{$parameter}." ".$parameter."\" 12\n"; $param = $args{'parameters'}{$parameter}; $param =~ s/-/\\-/g; output_highlight($param); } foreach $section (@{$args{'sectionlist'}}) { print ".SH \"" . uc($section) . "\"\n"; $sec = $args{'sections'}{$section}; $sec =~ s/-/\\-/g; output_highlight($sec); } if ($args{'bugsto'}) { print ".SH \"REPORTING BUGS\"\n"; print "Report bugs to <". $args{'bugsto'} . ">.\n"; if ($args{'pkgname'}) { print $args{'pkgname'} . " home page: " . "http://www.gnu.org/software/" . $args{'module'} . "/\n"; } print "General help using GNU software: http://www.gnu.org/gethelp/\n"; } if ($args{'copyright'}) { print ".SH COPYRIGHT\n"; print "Copyright \\(co ". $args{'copyright'} . ".\n"; if ($args{'verbatimcopying'}) { print ".br\n"; print "Copying and distribution of this file, with or without modification,\n"; print "are permitted in any medium without royalty provided the copyright\n"; print "notice and this notice are preserved.\n"; } } if ($args{'seeinfo'}) { print ".SH \"SEE ALSO\"\n"; print "The full documentation for\n"; print ".B " . $args{'module'} . "\n"; print "is maintained as a Texinfo manual. If the\n"; print ".B info\n"; print "and\n"; print ".B " . $args{'module'} . "\n"; print "programs are properly installed at your site, the command\n"; print ".IP\n"; print ".B info " . $args{'seeinfo'} . "\n"; print ".PP\n"; print "should give you access to the complete manual.\n"; } } sub output_listfunc { my %args = %{$_[0]}; print $args{'function'} . "\n"; } ## # output in text sub output_text { my %args = %{$_[0]}; my ($parameter, $section); print "Function = ".$args{'function'}."\n"; print " return type: ".$args{'functiontype'}."\n\n"; foreach $parameter (@{$args{'parameterlist'}}) { print " ".$args{'parametertypes'}{$parameter}." ".$parameter."\n"; print " -> ".$args{'parameters'}{$parameter}."\n"; } foreach $section (@{$args{'sectionlist'}}) { print " $section:\n"; print " -> "; output_highlight($args{'sections'}{$section}); } } ## # generic output function - calls the right one based # on current output mode. sub output_function { # output_html(@_); eval "output_".$output_mode."(\@_);"; } ## # takes a function prototype and spits out all the details # stored in the global arrays/hsahes. sub dump_function { my $prototype = shift @_; if ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || $prototype =~ m/^(\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ || $prototype =~ m/^(\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/) { $return_type = $1; $function_name = $2; $args = $3; # print STDERR "ARGS = '$args'\n"; foreach $arg (split ',', $args) { # strip leading/trailing spaces $arg =~ s/^\s*//; $arg =~ s/\s*$//; # print STDERR "SCAN ARG: '$arg'\n"; @args = split('\s', $arg); # print STDERR " -> @args\n"; $param = pop @args; # print STDERR " -> @args\n"; if ($param =~ m/^(\*+)(.*)/) { $param = $2; push @args, $1; } if ($param =~ m/^(.*)(\[\])$/) { $param = $1; push @args, $2; } # print STDERR " :> @args\n"; $type = join " ", @args; if ($parameters{$param} eq "" && $param != "void") { $parameters{$param} = "-- undescribed --"; print STDERR "warning: $lineno: Function parameter '$param' not described in '$function_name'\n"; } push @parameterlist, $param; $parametertypes{$param} = $type; # print STDERR "param = '$param', type = '$type'\n"; } } else { print STDERR "warning: $lineno: Cannot understand prototype: '$prototype'\n"; return; } if ($function_only==0 || defined($function_table{$function_name})) { output_function({'function' => $function_name, 'module' => $modulename, 'sourceversion' => $sourceversion, 'include' => $include, 'includefuncprefix' => $includefuncprefix, 'bugsto' => $bugsto, 'pkgname' => $pkgname, 'copyright' => $copyright, 'verbatimcopying' => $verbatimcopying, 'seeinfo' => $seeinfo, 'functiontype' => $return_type, 'parameterlist' => \@parameterlist, 'parameters' => \%parameters, 'parametertypes' => \%parametertypes, 'sectionlist' => \@sectionlist, 'sections' => \%sections, 'purpose' => $function_purpose }); } } ###################################################################### # main # states # 0 - normal code # 1 - looking for function name # 2 - scanning field start. # 3 - scanning prototype. $state = 0; $section = ""; $doc_special = "\@\%\$\#"; $doc_start = "^/\\*\\*\$"; $doc_end = "\\*/"; $doc_com = "\\s*\\* ?"; $doc_func = $doc_com."(\\w+):?"; $doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w ]+):\\s*(.*)"; $doc_content = $doc_com."(.*)"; %constants = (); %parameters = (); @parameterlist = (); %sections = (); @sectionlist = (); $contents = ""; $section_default = "Description"; # default section $section = $section_default; $lineno = 0; foreach $file (@ARGV) { if (!open(IN,"<$file")) { print STDERR "Error: Cannot open file $file\n"; next; } while () { $lineno++; if ($state == 0) { if (/$doc_start/o) { $state = 1; # next line is always the function name } } elsif ($state == 1) { # this line is the function name (always) if (/$doc_func/o) { $function = $1; $state = 2; if (/-\s*(.*)/) { $function_purpose = $1; } else { $function_purpose = ""; } if ($verbose) { print STDERR "Info($lineno): Scanning doc for $function\n"; } } else { print STDERR "warning: $lineno: Cannot understand $_ on line $lineno", " - I thought it was a doc line\n"; $state = 0; } } elsif ($state == 2) { # look for head: lines, and include content if (/$doc_sect/o) { $newsection = $1; $newcontents = $2; if ($contents ne "") { dump_section($section, $contents); $section = $section_default; } $contents = $newcontents; if ($contents ne "") { $contents .= "\n"; } $section = $newsection; } elsif (/$doc_end/) { if ($contents ne "") { dump_section($section, $contents); $section = $section_default; $contents = ""; } # print STDERR "end of doc comment, looking for prototype\n"; $prototype = ""; $state = 3; } elsif (/$doc_content/) { # miguel-style comment kludge, look for blank lines after # @parameter line to signify start of description if ($1 eq "" && $section =~ m/^@/) { dump_section($section, $contents); $section = $section_default; $contents = ""; } else { $contents .= $1."\n"; } } else { # i dont know - bad line? ignore. print STDERR "warning: $lineno: Bad line: $_"; } } elsif ($state == 3) { # scanning for function { (end of prototype) if (m#\s*/\*\s+MACDOC\s*#io) { # do nothing } elsif (/([^\{]*)/) { $prototype .= $1; } if (/\{/) { $prototype =~ s@/\*.*?\*/@@gos; # strip comments. $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's. $prototype =~ s@^ +@@gos; # strip leading spaces dump_function($prototype); $function = ""; %constants = (); %parameters = (); %parametertypes = (); @parameterlist = (); %sections = (); @sectionlist = (); $prototype = ""; $state = 0; } } } } gss-1.0.2/doc/gss.html0000644000000000000000000102516011663555056011445 00000000000000 GNU Generic Security Service Library

GNU Generic Security Service Library


Next: , Up: (dir)

GNU Generic Security Service Library

This manual is last updated 21 November 2011 for version 1.0.2 of GNU GSS.

Copyright © 2003-2011 Simon Josefsson.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.

Appendices

Indices


Next: , Previous: Top, Up: Top

1 Introduction

GSS is an implementation of the Generic Security Service Application Program Interface (GSS-API). GSS-API is used by network servers to provide security services, e.g., to authenticate SMTP/IMAP clients against SMTP/IMAP servers. GSS consists of a library and a manual.

GSS is developed for the GNU/Linux system, but runs on over 20 platforms including most major Unix platforms and Windows, and many kind of devices including iPAQ handhelds and S/390 mainframes.

GSS is a GNU project, and is licensed under the GNU General Public License version 3 or later.


Next: , Up: Introduction

1.1 Getting Started

This manual documents the GSS programming interface. All functions and data types provided by the library are explained.

The reader is assumed to possess basic familiarity with GSS-API and network programming in C or C++. For general GSS-API information, and some programming examples, there is a guide available online at http://docs.sun.com/db/doc/816-1331.

This manual can be used in several ways. If read from the beginning to the end, it gives a good introduction into the library and how it can be used in an application. Forward references are included where necessary. Later on, the manual can be used as a reference manual to get just the information needed about any particular interface of the library. Experienced programmers might want to start looking at the examples at the end of the manual, and then only read up those parts of the interface which are unclear.


Next: , Previous: Getting Started, Up: Introduction

1.2 Features

GSS might have a couple of advantages over other libraries doing a similar job.

It's Free Software
Anybody can use, modify, and redistribute it under the terms of the GNU General Public License version 3 or later.
It's thread-safe
No global variables are used and multiple library handles and session handles may be used in parallell.
It's internationalized
It handles non-ASCII names and user visible strings used in the library (e.g., error messages) can be translated into the users' language.
It's portable
It should work on all Unix like operating systems, including Windows.


Next: , Previous: Features, Up: Introduction

1.3 GSS-API Overview

This section describes GSS-API from a protocol point of view.

The Generic Security Service Application Programming Interface provides security services to calling applications. It allows a communicating application to authenticate the user associated with another application, to delegate rights to another application, and to apply security services such as confidentiality and integrity on a per-message basis.

There are four stages to using the GSS-API:

  1. The application acquires a set of credentials with which it may prove its identity to other processes. The application's credentials vouch for its global identity, which may or may not be related to any local username under which it may be running.
  2. A pair of communicating applications establish a joint security context using their credentials. The security context is a pair of GSS-API data structures that contain shared state information, which is required in order that per-message security services may be provided. Examples of state that might be shared between applications as part of a security context are cryptographic keys, and message sequence numbers. As part of the establishment of a security context, the context initiator is authenticated to the responder, and may require that the responder is authenticated in turn. The initiator may optionally give the responder the right to initiate further security contexts, acting as an agent or delegate of the initiator. This transfer of rights is termed delegation, and is achieved by creating a set of credentials, similar to those used by the initiating application, but which may be used by the responder.

    To establish and maintain the shared information that makes up the security context, certain GSS-API calls will return a token data structure, which is an opaque data type that may contain cryptographically protected data. The caller of such a GSS-API routine is responsible for transferring the token to the peer application, encapsulated if necessary in an application- application protocol. On receipt of such a token, the peer application should pass it to a corresponding GSS-API routine which will decode the token and extract the information, updating the security context state information accordingly.

  3. Per-message services are invoked to apply either: integrity and data origin authentication, or confidentiality, integrity and data origin authentication to application data, which are treated by GSS-API as arbitrary octet-strings. An application transmitting a message that it wishes to protect will call the appropriate GSS-API routine (gss_get_mic or gss_wrap) to apply protection, specifying the appropriate security context, and send the resulting token to the receiving application. The receiver will pass the received token (and, in the case of data protected by gss_get_mic, the accompanying message-data) to the corresponding decoding routine (gss_verify_mic or gss_unwrap) to remove the protection and validate the data.
  4. At the completion of a communications session (which may extend across several transport connections), each application calls a GSS-API routine to delete the security context. Multiple contexts may also be used (either successively or simultaneously) within a single communications association, at the option of the applications.

1.4 Supported Platforms

GSS has at some point in time been tested on the following platforms.

  1. Debian GNU/Linux 3.0 (Woody) GCC 2.95.4 and GNU Make. This is the main development platform. alphaev67-unknown-linux-gnu, alphaev6-unknown-linux-gnu, arm-unknown-linux-gnu, hppa-unknown-linux-gnu, hppa64-unknown-linux-gnu, i686-pc-linux-gnu, ia64-unknown-linux-gnu, m68k-unknown-linux-gnu, mips-unknown-linux-gnu, mipsel-unknown-linux-gnu, powerpc-unknown-linux-gnu, s390-ibm-linux-gnu, sparc-unknown-linux-gnu.
  2. Debian GNU/Linux 2.1 GCC 2.95.1 and GNU Make. armv4l-unknown-linux-gnu.
  3. Tru64 UNIX Tru64 UNIX C compiler and Tru64 Make. alphaev67-dec-osf5.1, alphaev68-dec-osf5.1.
  4. SuSE Linux 7.1 GCC 2.96 and GNU Make. alphaev6-unknown-linux-gnu, alphaev67-unknown-linux-gnu.
  5. SuSE Linux 7.2a GCC 3.0 and GNU Make. ia64-unknown-linux-gnu.
  6. RedHat Linux 7.2 GCC 2.96 and GNU Make. alphaev6-unknown-linux-gnu, alphaev67-unknown-linux-gnu, ia64-unknown-linux-gnu.
  7. RedHat Linux 8.0 GCC 3.2 and GNU Make. i686-pc-linux-gnu.
  8. RedHat Advanced Server 2.1 GCC 2.96 and GNU Make. i686-pc-linux-gnu.
  9. Slackware Linux 8.0.01 GCC 2.95.3 and GNU Make. i686-pc-linux-gnu.
  10. Mandrake Linux 9.0 GCC 3.2 and GNU Make. i686-pc-linux-gnu.
  11. IRIX 6.5 MIPS C compiler, IRIX Make. mips-sgi-irix6.5.
  12. AIX 4.3.2 IBM C for AIX compiler, AIX Make. rs6000-ibm-aix4.3.2.0.
  13. Microsoft Windows 2000 (Cygwin) GCC 3.2, GNU make. i686-pc-cygwin.
  14. HP-UX 11 HP-UX C compiler and HP Make. ia64-hp-hpux11.22, hppa2.0w-hp-hpux11.11.
  15. SUN Solaris 2.8 Sun WorkShop Compiler C 6.0 and SUN Make. sparc-sun-solaris2.8.
  16. NetBSD 1.6 GCC 2.95.3 and GNU Make. alpha-unknown-netbsd1.6, i386-unknown-netbsdelf1.6.
  17. OpenBSD 3.1 and 3.2 GCC 2.95.3 and GNU Make. alpha-unknown-openbsd3.1, i386-unknown-openbsd3.1.
  18. FreeBSD 4.7 GCC 2.95.4 and GNU Make. alpha-unknown-freebsd4.7, i386-unknown-freebsd4.7.
  19. Cross compiled to uClinux/uClibc on Motorola Coldfire. GCC 3.4 and GNU Make m68k-uclinux-elf.

If you use GSS on, or port GSS to, a new platform please report it to the author.

1.5 Commercial Support

Commercial support is available for users of GNU GSS. The kind of support that can be purchased may include:

  • Implement new features. Such as a new GSS-API mechanism.
  • Port GSS to new platforms. This could include porting to an embedded platforms that may need memory or size optimization.
  • Integrating GSS as a security environment in your existing project.
  • System design of components related to GSS-API.

If you are interested, please write to:

Simon Josefsson Datakonsult AB
Hagagatan 24
113 47 Stockholm
Sweden

E-mail: simon@josefsson.org

If your company provides support related to GNU GSS and would like to be mentioned here, contact the author (see Bug Reports).


Next: , Previous: Commercial Support, Up: Introduction

1.6 Downloading and Installing

The package can be downloaded from several places, including:

ftp://ftp.gnu.org/gnu/gss/

The latest version is stored in a file, e.g., ‘gss-1.0.2.tar.gz’ where the ‘1.0.2’ indicate the highest version number.

The package is then extracted, configured and built like many other packages that use Autoconf. For detailed information on configuring and building it, refer to the INSTALL file that is part of the distribution archive.

Here is an example terminal session that downloads, configures, builds and installs the package. You will need a few basic tools, such as ‘sh’, ‘make’ and ‘cc’.

     $ wget -q ftp://ftp.gnu.org/gnu/gss/gss-1.0.2.tar.gz
     $ tar xfz gss-1.0.2.tar.gz
     $ cd gss-1.0.2/
     $ ./configure
     ...
     $ make
     ...
     $ make install
     ...

After that GSS should be properly installed and ready for use.

1.7 Bug Reports

If you think you have found a bug in GSS, please investigate it and report it.

  • Please make sure that the bug is really in GSS, and preferably also check that it hasn't already been fixed in the latest version.
  • You have to send us a test case that makes it possible for us to reproduce the bug.
  • You also have to explain what is wrong; if you get a crash, or if the results printed are not good and in that case, in what way. Make sure that the bug report includes all information you would need to fix this kind of bug for someone else.

Please make an effort to produce a self-contained report, with something definite that can be tested or debugged. Vague queries or piecemeal messages are difficult to act on and don't help the development effort.

If your bug report is good, we will do our best to help you to get a corrected version of the software; if the bug report is poor, we won't do anything about it (apart from asking you to send better bug reports).

If you think something in this manual is unclear, or downright incorrect, or if the language needs to be improved, please also send a note.

Send your bug report to:

bug-gss@gnu.org


Next: , Previous: Bug Reports, Up: Introduction

1.8 Contributing

If you want to submit a patch for inclusion – from solve a typo you discovered, up to adding support for a new feature – you should submit it as a bug report (see Bug Reports). There are some things that you can do to increase the chances for it to be included in the official package.

Unless your patch is very small (say, under 10 lines) we require that you assign the copyright of your work to the Free Software Foundation. This is to protect the freedom of the project. If you have not already signed papers, we will send you the necessary information when you submit your contribution.

For contributions that doesn't consist of actual programming code, the only guidelines are common sense. Use it.

For code contributions, a number of style guides will help you:

  • Coding Style. Follow the GNU Standards document (see GNU Coding Standards).

    If you normally code using another coding standard, there is no problem, but you should use ‘indent’ to reformat the code (see GNU Indent) before submitting your work.

  • Use the unified diff format ‘diff -u’.
  • Return errors. No reason whatsoever should abort the execution of the library. Even memory allocation errors, e.g. when malloc return NULL, should work although result in an error code.
  • Design with thread safety in mind. Don't use global variables. Don't even write to per-handle global variables unless the documented behaviour of the function you write is to write to the per-handle global variable.
  • Avoid using the C math library. It causes problems for embedded implementations, and in most situations it is very easy to avoid using it.
  • Document your functions. Use comments before each function headers, that, if properly formatted, are extracted into Texinfo manuals and GTK-DOC web pages.
  • Supply a ChangeLog and NEWS entries, where appropriate.


Previous: Contributing, Up: Introduction

1.9 Planned Features

This is also known as the “todo list”. If you like to start working on anything, please let me know so work duplication can be avoided.

  • Support non-blocking mode. This would be an API extension. It could work by forking a process and interface to it, or by using a user-specific daemon. E.g., h = START(accept_sec_context(...)), FINISHED(h), ret = FINISH(h), ABORT(h).
  • Support loadable modules via dlopen, a'la Solaris GSS.
  • Port to Cyclone? CCured?


Next: , Previous: Introduction, Up: Top

2 Preparation

To use GSS, you have to perform some changes to your sources and the build system. The necessary changes are small and explained in the following sections. At the end of this chapter, it is described how the library is initialized, and how the requirements of the library are verified.

A faster way to find out how to adapt your application for use with GSS may be to look at the examples at the end of this manual.

2.1 Header

All standard interfaces (data types and functions) of the official GSS API are defined in the header file gss/api.h. The file is taken verbatim from the RFC (after correcting a few typos) where it is known as gssapi.h. However, to be able to co-exist gracefully with other GSS-API implementation, the name gssapi.h was changed.

The header file gss.h includes gss/api.h, and declares a few non-standard extensions (by including gss/ext.h), takes care of including header files related to all supported mechanisms (e.g., gss/krb5.h) and finally adds C++ namespace protection of all definitions. Therefore, including gss.h in your project is recommended over gss/api.h. If using gss.h instead of gss/api.h causes problems, it should be regarded a bug.

You must include either file in all programs using the library, either directly or through some other header file, like this:

     #include <gss.h>

The name space of GSS is gss_* for function names, gss_* for data types and GSS_* for other symbols. In addition the same name prefixes with one prepended underscore are reserved for internal use and should never be used by an application.

Each supported GSS mechanism may want to expose mechanism specific functionality, and can do so through one or more header files under the gss/ directory. The Kerberos 5 mechanism uses the file gss/krb5.h, but again, it is included (with C++ namespace fixes) from gss.h.


Next: , Previous: Header, Up: Preparation

2.2 Initialization

GSS does not need to be initialized before it can be used.

In order to take advantage of the internationalisation features in GSS, e.g. translated error messages, the application must set the current locale using setlocale() before calling, e.g., gss_display_status(). This is typically done in main() as in the following example.

     #include <gss.h>
     #include <locale.h>
     ...
       setlocale (LC_ALL, "");

2.3 Version Check

It is often desirable to check that the version of GSS used is indeed one which fits all requirements. Even with binary compatibility new features may have been introduced but due to problem with the dynamic linker an old version is actually used. So you may want to check that the version is okay right after program startup. The function is called gss_check_version() and is described formally in See Extended GSS API.

The normal way to use the function is to put something similar to the following early in your main():

     #include <gss.h>
     ...
       if (!gss_check_version (GSS_VERSION))
         {
           printf ("gss_check_version() failed:\n"
                   "Header file incompatible with shared library.\n");
           exit(EXIT_FAILURE);
         }

2.4 Building the source

If you want to compile a source file that includes the gss.h header file, you must make sure that the compiler can find it in the directory hierarchy. This is accomplished by adding the path to the directory in which the header file is located to the compilers include file search path (via the -I option).

However, the path to the include file is determined at the time the source is configured. To solve this problem, GSS uses the external package pkg-config that knows the path to the include file and other configuration options. The options that need to be added to the compiler invocation at compile time are output by the --cflags option to pkg-config gss. The following example shows how it can be used at the command line:

     gcc -c foo.c `pkg-config gss --cflags`

Adding the output of ‘pkg-config gss --cflags’ to the compilers command line will ensure that the compiler can find the gss.h header file.

A similar problem occurs when linking the program with the library. Again, the compiler has to find the library files. For this to work, the path to the library files has to be added to the library search path (via the -L option). For this, the option --libs to pkg-config gss can be used. For convenience, this option also outputs all other options that are required to link the program with the GSS libarary (for instance, the ‘-lshishi’ option). The example shows how to link foo.o with GSS into a program foo.

     gcc -o foo foo.o `pkg-config gss --libs`

Of course you can also combine both examples to a single command by specifying both options to pkg-config:

     gcc -o foo foo.c `pkg-config gss --cflags --libs`


Previous: Building the source, Up: Preparation

2.5 Out of Memory handling

The GSS API does not have a standard error code for the out of memory error condition. This library will return GSS_S_FAILURE and set minor_status to ENOMEM.


Next: , Previous: Preparation, Up: Top

3 Standard GSS API

3.1 Simple Data Types

The following conventions are used by the GSS-API C-language bindings:

3.1.1 Integer types

GSS-API uses the following integer data type:

   OM_uint32    32-bit unsigned integer

3.1.2 String and similar data

Many of the GSS-API routines take arguments and return values that describe contiguous octet-strings. All such data is passed between the GSS-API and the caller using the gss_buffer_t data type. This data type is a pointer to a buffer descriptor, which consists of a length field that contains the total number of bytes in the datum, and a value field which contains a pointer to the actual datum:

   typedef struct gss_buffer_desc_struct {
      size_t    length;
      void      *value;
   } gss_buffer_desc, *gss_buffer_t;

Storage for data returned to the application by a GSS-API routine using the gss_buffer_t conventions is allocated by the GSS-API routine. The application may free this storage by invoking the gss_release_buffer routine. Allocation of the gss_buffer_desc object is always the responsibility of the application; unused gss_buffer_desc objects may be initialized to the value GSS_C_EMPTY_BUFFER.

3.1.2.1 Opaque data types

Certain multiple-word data items are considered opaque data types at the GSS-API, because their internal structure has no significance either to the GSS-API or to the caller. Examples of such opaque data types are the input_token parameter to gss_init_sec_context (which is opaque to the caller), and the input_message parameter to gss_wrap (which is opaque to the GSS-API). Opaque data is passed between the GSS-API and the application using the gss_buffer_t datatype.

3.1.2.2 Character strings

Certain multiple-word data items may be regarded as simple ISO Latin-1 character strings. Examples are the printable strings passed to gss_import_name via the input_name_buffer parameter. Some GSS-API routines also return character strings. All such character strings are passed between the application and the GSS-API implementation using the gss_buffer_t datatype, which is a pointer to a gss_buffer_desc object.

When a gss_buffer_desc object describes a printable string, the length field of the gss_buffer_desc should only count printable characters within the string. In particular, a trailing NUL character should NOT be included in the length count, nor should either the GSS-API implementation or the application assume the presence of an uncounted trailing NUL.

3.1.3 Object Identifiers

Certain GSS-API procedures take parameters of the type gss_OID, or Object identifier. This is a type containing ISO-defined tree- structured values, and is used by the GSS-API caller to select an underlying security mechanism and to specify namespaces. A value of type gss_OID has the following structure:

   typedef struct gss_OID_desc_struct {
      OM_uint32   length;
      void        *elements;
   } gss_OID_desc, *gss_OID;

The elements field of this structure points to the first byte of an octet string containing the ASN.1 BER encoding of the value portion of the normal BER TLV encoding of the gss_OID. The length field contains the number of bytes in this value. For example, the gss_OID value corresponding to iso(1) identified-organization(3) icd-ecma(12) member-company(2) dec(1011) cryptoAlgorithms(7) DASS(5), meaning the DASS X.509 authentication mechanism, has a length field of 7 and an elements field pointing to seven octets containing the following octal values: 53,14,2,207,163,7,5. GSS-API implementations should provide constant gss_OID values to allow applications to request any supported mechanism, although applications are encouraged on portability grounds to accept the default mechanism. gss_OID values should also be provided to allow applications to specify particular name types (see section 3.10). Applications should treat gss_OID_desc values returned by GSS-API routines as read-only. In particular, the application should not attempt to deallocate them with free().

3.1.4 Object Identifier Sets

Certain GSS-API procedures take parameters of the type gss_OID_set. This type represents one or more object identifiers (see Object Identifiers). A gss_OID_set object has the following structure:

   typedef struct gss_OID_set_desc_struct {
      size_t    count;
      gss_OID   elements;
   } gss_OID_set_desc, *gss_OID_set;

The count field contains the number of OIDs within the set. The elements field is a pointer to an array of gss_OID_desc objects, each of which describes a single OID. gss_OID_set values are used to name the available mechanisms supported by the GSS-API, to request the use of specific mechanisms, and to indicate which mechanisms a given credential supports.

All OID sets returned to the application by GSS-API are dynamic objects (the gss_OID_set_desc, the "elements" array of the set, and the "elements" array of each member OID are all dynamically allocated), and this storage must be deallocated by the application using the gss_release_oid_set routine.

3.2 Complex Data Types

3.2.1 Credentials

A credential handle is a caller-opaque atomic datum that identifies a GSS-API credential data structure. It is represented by the caller- opaque type gss_cred_id_t.

GSS-API credentials can contain mechanism-specific principal authentication data for multiple mechanisms. A GSS-API credential is composed of a set of credential-elements, each of which is applicable to a single mechanism. A credential may contain at most one credential-element for each supported mechanism. A credential-element identifies the data needed by a single mechanism to authenticate a single principal, and conceptually contains two credential-references that describe the actual mechanism-specific authentication data, one to be used by GSS-API for initiating contexts, and one to be used for accepting contexts. For mechanisms that do not distinguish between acceptor and initiator credentials, both references would point to the same underlying mechanism-specific authentication data.

Credentials describe a set of mechanism-specific principals, and give their holder the ability to act as any of those principals. All principal identities asserted by a single GSS-API credential should belong to the same entity, although enforcement of this property is an implementation-specific matter. The GSS-API does not make the actual credentials available to applications; instead a credential handle is used to identify a particular credential, held internally by GSS-API. The combination of GSS-API credential handle and mechanism identifies the principal whose identity will be asserted by the credential when used with that mechanism.

The gss_init_sec_context and gss_accept_sec_context routines allow the value GSS_C_NO_CREDENTIAL to be specified as their credential handle parameter. This special credential-handle indicates a desire by the application to act as a default principal.

3.2.2 Contexts

The gss_ctx_id_t data type contains a caller-opaque atomic value that identifies one end of a GSS-API security context.

The security context holds state information about each end of a peer communication, including cryptographic state information.

3.2.3 Authentication tokens

A token is a caller-opaque type that GSS-API uses to maintain synchronization between the context data structures at each end of a GSS-API security context. The token is a cryptographically protected octet-string, generated by the underlying mechanism at one end of a GSS-API security context for use by the peer mechanism at the other end. Encapsulation (if required) and transfer of the token are the responsibility of the peer applications. A token is passed between the GSS-API and the application using the gss_buffer_t conventions.

3.2.4 Interprocess tokens

Certain GSS-API routines are intended to transfer data between processes in multi-process programs. These routines use a caller-opaque octet-string, generated by the GSS-API in one process for use by the GSS-API in another process. The calling application is responsible for transferring such tokens between processes in an OS-specific manner. Note that, while GSS-API implementors are encouraged to avoid placing sensitive information within interprocess tokens, or to cryptographically protect them, many implementations will be unable to avoid placing key material or other sensitive data within them. It is the application's responsibility to ensure that interprocess tokens are protected in transit, and transferred only to processes that are trustworthy. An interprocess token is passed between the GSS-API and the application using the gss_buffer_t conventions.

3.2.5 Names

A name is used to identify a person or entity. GSS-API authenticates the relationship between a name and the entity claiming the name.

Since different authentication mechanisms may employ different namespaces for identifying their principals, GSSAPI's naming support is necessarily complex in multi-mechanism environments (or even in some single-mechanism environments where the underlying mechanism supports multiple namespaces).

Two distinct representations are defined for names:

  • An internal form. This is the GSS-API "native" format for names, represented by the implementation-specific gss_name_t type. It is opaque to GSS-API callers. A single gss_name_t object may contain multiple names from different namespaces, but all names should refer to the same entity. An example of such an internal name would be the name returned from a call to the gss_inquire_cred routine, when applied to a credential containing credential elements for multiple authentication mechanisms employing different namespaces. This gss_name_t object will contain a distinct name for the entity for each authentication mechanism.

    For GSS-API implementations supporting multiple namespaces, objects of type gss_name_t must contain sufficient information to determine the namespace to which each primitive name belongs.

  • Mechanism-specific contiguous octet-string forms. A format capable of containing a single name (from a single namespace). Contiguous string names are always accompanied by an object identifier specifying the namespace to which the name belongs, and their format is dependent on the authentication mechanism that employs the name. Many, but not all, contiguous string names will be printable, and may therefore be used by GSS-API applications for communication with their users.

Routines (gss_import_name and gss_display_name) are provided to convert names between contiguous string representations and the internal gss_name_t type. gss_import_name may support multiple syntaxes for each supported namespace, allowing users the freedom to choose a preferred name representation. gss_display_name should use an implementation-chosen printable syntax for each supported name-type.

If an application calls gss_display_name, passing the internal name resulting from a call to gss_import_name, there is no guarantee the resulting contiguous string name will be the same as the original imported string name. Nor do name-space identifiers necessarily survive unchanged after a journey through the internal name-form. An example of this might be a mechanism that authenticates X.500 names, but provides an algorithmic mapping of Internet DNS names into X.500. That mechanism's implementation of gss_import_name might, when presented with a DNS name, generate an internal name that contained both the original DNS name and the equivalent X.500 name. Alternatively, it might only store the X.500 name. In the latter case, gss_display_name would most likely generate a printable X.500 name, rather than the original DNS name.

The process of authentication delivers to the context acceptor an internal name. Since this name has been authenticated by a single mechanism, it contains only a single name (even if the internal name presented by the context initiator to gss_init_sec_context had multiple components). Such names are termed internal mechanism names, or "MN"s and the names emitted by gss_accept_sec_context are always of this type. Since some applications may require MNs without wanting to incur the overhead of an authentication operation, a second function, gss_canonicalize_name, is provided to convert a general internal name into an MN.

Comparison of internal-form names may be accomplished via the gss_compare_name routine, which returns true if the two names being compared refer to the same entity. This removes the need for the application program to understand the syntaxes of the various printable names that a given GSS-API implementation may support. Since GSS-API assumes that all primitive names contained within a given internal name refer to the same entity, gss_compare_name can return true if the two names have at least one primitive name in common. If the implementation embodies knowledge of equivalence relationships between names taken from different namespaces, this knowledge may also allow successful comparison of internal names containing no overlapping primitive elements.

When used in large access control lists, the overhead of invoking gss_import_name and gss_compare_name on each name from the ACL may be prohibitive. As an alternative way of supporting this case, GSS-API defines a special form of the contiguous string name which may be compared directly (e.g. with memcmp()). Contiguous names suitable for comparison are generated by the gss_export_name routine, which requires an MN as input. Exported names may be re- imported by the gss_import_name routine, and the resulting internal name will also be an MN. The gss_OID constant GSS_C_NT_EXPORT_NAME indentifies the "export name" type, and the value of this constant is given in Appendix A. Structurally, an exported name object consists of a header containing an OID identifying the mechanism that authenticated the name, and a trailer containing the name itself, where the syntax of the trailer is defined by the individual mechanism specification. The precise format of an export name is defined in the language-independent GSS-API specification [GSSAPI].

Note that the results obtained by using gss_compare_name will in general be different from those obtained by invoking gss_canonicalize_name and gss_export_name, and then comparing the exported names. The first series of operation determines whether two (unauthenticated) names identify the same principal; the second whether a particular mechanism would authenticate them as the same principal. These two operations will in general give the same results only for MNs.

The gss_name_t datatype should be implemented as a pointer type. To allow the compiler to aid the application programmer by performing type-checking, the use of (void *) is discouraged. A pointer to an implementation-defined type is the preferred choice.

Storage is allocated by routines that return gss_name_t values. A procedure, gss_release_name, is provided to free storage associated with an internal-form name.

3.2.6 Channel Bindings

GSS-API supports the use of user-specified tags to identify a given context to the peer application. These tags are intended to be used to identify the particular communications channel that carries the context. Channel bindings are communicated to the GSS-API using the following structure:

   typedef struct gss_channel_bindings_struct {
      OM_uint32       initiator_addrtype;
      gss_buffer_desc initiator_address;
      OM_uint32       acceptor_addrtype;
      gss_buffer_desc acceptor_address;
      gss_buffer_desc application_data;
   } *gss_channel_bindings_t;

The initiator_addrtype and acceptor_addrtype fields denote the type of addresses contained in the initiator_address and acceptor_address buffers. The address type should be one of the following:

   GSS_C_AF_UNSPEC     Unspecified address type
   GSS_C_AF_LOCAL      Host-local address type
   GSS_C_AF_INET       Internet address type (e.g. IP)
   GSS_C_AF_IMPLINK    ARPAnet IMP address type
   GSS_C_AF_PUP        pup protocols (eg BSP) address type
   GSS_C_AF_CHAOS      MIT CHAOS protocol address type
   GSS_C_AF_NS         XEROX NS address type
   GSS_C_AF_NBS        nbs address type
   GSS_C_AF_ECMA       ECMA address type
   GSS_C_AF_DATAKIT    datakit protocols address type
   GSS_C_AF_CCITT      CCITT protocols
   GSS_C_AF_SNA        IBM SNA address type
   GSS_C_AF_DECnet     DECnet address type
   GSS_C_AF_DLI        Direct data link interface address type
   GSS_C_AF_LAT        LAT address type
   GSS_C_AF_HYLINK     NSC Hyperchannel address type
   GSS_C_AF_APPLETALK  AppleTalk address type
   GSS_C_AF_BSC        BISYNC 2780/3780 address type
   GSS_C_AF_DSS        Distributed system services address type
   GSS_C_AF_OSI        OSI TP4 address type
   GSS_C_AF_X25        X.25
   GSS_C_AF_NULLADDR   No address specified

Note that these symbols name address families rather than specific addressing formats. For address families that contain several alternative address forms, the initiator_address and acceptor_address fields must contain sufficient information to determine which address form is used. When not otherwise specified, addresses should be specified in network byte-order (that is, native byte-ordering for the address family).

Conceptually, the GSS-API concatenates the initiator_addrtype, initiator_address, acceptor_addrtype, acceptor_address and application_data to form an octet string. The mechanism calculates a MIC over this octet string, and binds the MIC to the context establishment token emitted by gss_init_sec_context. The same bindings are presented by the context acceptor to gss_accept_sec_context, and a MIC is calculated in the same way. The calculated MIC is compared with that found in the token, and if the MICs differ, gss_accept_sec_context will return a GSS_S_BAD_BINDINGS error, and the context will not be established. Some mechanisms may include the actual channel binding data in the token (rather than just a MIC); applications should therefore not use confidential data as channel-binding components.

Individual mechanisms may impose additional constraints on addresses and address types that may appear in channel bindings. For example, a mechanism may verify that the initiator_address field of the channel bindings presented to gss_init_sec_context contains the correct network address of the host system. Portable applications should therefore ensure that they either provide correct information for the address fields, or omit addressing information, specifying GSS_C_AF_NULLADDR as the address-types.

3.3 Optional Parameters

Various parameters are described as optional. This means that they follow a convention whereby a default value may be requested. The following conventions are used for omitted parameters. These conventions apply only to those parameters that are explicitly documented as optional.

  • gss_buffer_t types. Specify GSS_C_NO_BUFFER as a value. For an input parameter this signifies that default behavior is requested, while for an output parameter it indicates that the information that would be returned via the parameter is not required by the application.
  • Integer types (input). Individual parameter documentation lists values to be used to indicate default actions.
  • Integer types (output). Specify NULL as the value for the pointer.
  • Pointer types. Specify NULL as the value.
  • Object IDs. Specify GSS_C_NO_OID as the value.
  • Object ID Sets. Specify GSS_C_NO_OID_SET as the value.
  • Channel Bindings. Specify GSS_C_NO_CHANNEL_BINDINGS to indicate that channel bindings are not to be used.

3.4 Error Handling

Every GSS-API routine returns two distinct values to report status information to the caller: GSS status codes and Mechanism status codes.

3.4.1 GSS status codes

GSS-API routines return GSS status codes as their OM_uint32 function value. These codes indicate errors that are independent of the underlying mechanism(s) used to provide the security service. The errors that can be indicated via a GSS status code are either generic API routine errors (errors that are defined in the GSS-API specification) or calling errors (errors that are specific to these language bindings).

A GSS status code can indicate a single fatal generic API error from the routine and a single calling error. In addition, supplementary status information may be indicated via the setting of bits in the supplementary info field of a GSS status code.

These errors are encoded into the 32-bit GSS status code as follows:

      MSB                                                        LSB
      |------------------------------------------------------------|
      |  Calling Error | Routine Error  |    Supplementary Info    |
      |------------------------------------------------------------|
   Bit 31            24 23            16 15                       0

Hence if a GSS-API routine returns a GSS status code whose upper 16 bits contain a non-zero value, the call failed. If the calling error field is non-zero, the invoking application's call of the routine was erroneous. Calling errors are defined in table 3-1. If the routine error field is non-zero, the routine failed for one of the routine- specific reasons listed below in table 3-2. Whether or not the upper 16 bits indicate a failure or a success, the routine may indicate additional information by setting bits in the supplementary info field of the status code. The meaning of individual bits is listed below in table 3-3.

   Table 3-1  Calling Errors

   Name                   Value in field           Meaning
   ----                   --------------           -------
   GSS_S_CALL_INACCESSIBLE_READ  1       A required input parameter
                                         could not be read
   GSS_S_CALL_INACCESSIBLE_WRITE 2       A required output parameter
                                          could not be written.
   GSS_S_CALL_BAD_STRUCTURE      3       A parameter was malformed
   Table 3-2  Routine Errors

   Name                   Value in field           Meaning
   ----                   --------------           -------
   GSS_S_BAD_MECH                1       An unsupported mechanism
                                         was requested
   GSS_S_BAD_NAME                2       An invalid name was
                                         supplied
   GSS_S_BAD_NAMETYPE            3       A supplied name was of an
                                         unsupported type
   GSS_S_BAD_BINDINGS            4       Incorrect channel bindings
                                         were supplied
   GSS_S_BAD_STATUS              5       An invalid status code was
                                         supplied
   GSS_S_BAD_MIC GSS_S_BAD_SIG   6       A token had an invalid MIC
   GSS_S_NO_CRED                 7       No credentials were
                                         supplied, or the
                                         credentials were
                                         unavailable or
                                         inaccessible.
   GSS_S_NO_CONTEXT              8       No context has been
                                         established
   GSS_S_DEFECTIVE_TOKEN         9       A token was invalid
   GSS_S_DEFECTIVE_CREDENTIAL   10       A credential was invalid
   GSS_S_CREDENTIALS_EXPIRED    11       The referenced credentials
                                         have expired
   GSS_S_CONTEXT_EXPIRED        12       The context has expired
   GSS_S_FAILURE                13       Miscellaneous failure (see
                                         text)
   GSS_S_BAD_QOP                14       The quality-of-protection
                                         requested could not be
                                         provided
   GSS_S_UNAUTHORIZED           15       The operation is forbidden
                                         by local security policy
   GSS_S_UNAVAILABLE            16       The operation or option is
                                         unavailable
   GSS_S_DUPLICATE_ELEMENT      17       The requested credential
                                         element already exists
   GSS_S_NAME_NOT_MN            18       The provided name was not a
                                         mechanism name
   Table 3-3  Supplementary Status Bits

   Name                   Bit Number           Meaning
   ----                   ----------           -------
   GSS_S_CONTINUE_NEEDED   0 (LSB)   Returned only by
                                     gss_init_sec_context or
                                     gss_accept_sec_context. The
                                     routine must be called again
                                     to complete its function.
                                     See routine documentation for
                                     detailed description
   GSS_S_DUPLICATE_TOKEN   1         The token was a duplicate of
                                     an earlier token
   GSS_S_OLD_TOKEN         2         The token's validity period
                                     has expired
   GSS_S_UNSEQ_TOKEN       3         A later token has already been
                                     processed
   GSS_S_GAP_TOKEN         4         An expected per-message token
                                     was not received

The routine documentation also uses the name GSS_S_COMPLETE, which is a zero value, to indicate an absence of any API errors or supplementary information bits.

All GSS_S_xxx symbols equate to complete OM_uint32 status codes, rather than to bitfield values. For example, the actual value of the symbol GSS_S_BAD_NAMETYPE (value 3 in the routine error field) is 3<<16. The macros GSS_CALLING_ERROR, GSS_ROUTINE_ERROR and GSS_SUPPLEMENTARY_INFO are provided, each of which takes a GSS status code and removes all but the relevant field. For example, the value obtained by applying GSS_ROUTINE_ERROR to a status code removes the calling errors and supplementary info fields, leaving only the routine errors field. The values delivered by these macros may be directly compared with a GSS_S_xxx symbol of the appropriate type. The macro GSS_ERROR is also provided, which when applied to a GSS status code returns a non-zero value if the status code indicated a calling or routine error, and a zero value otherwise. All macros defined by GSS-API evaluate their argument(s) exactly once.

A GSS-API implementation may choose to signal calling errors in a platform-specific manner instead of, or in addition to the routine value; routine errors and supplementary info should be returned via major status values only.

The GSS major status code GSS_S_FAILURE is used to indicate that the underlying mechanism detected an error for which no specific GSS status code is defined. The mechanism-specific status code will provide more details about the error.

In addition to the explicit major status codes for each API function, the code GSS_S_FAILURE may be returned by any routine, indicating an implementation-specific or mechanism-specific error condition, further details of which are reported via the minor_status parameter.

3.4.2 Mechanism-specific status codes

GSS-API routines return a minor_status parameter, which is used to indicate specialized errors from the underlying security mechanism. This parameter may contain a single mechanism-specific error, indicated by a OM_uint32 value.

The minor_status parameter will always be set by a GSS-API routine, even if it returns a calling error or one of the generic API errors indicated above as fatal, although most other output parameters may remain unset in such cases. However, output parameters that are expected to return pointers to storage allocated by a routine must always be set by the routine, even in the event of an error, although in such cases the GSS-API routine may elect to set the returned parameter value to NULL to indicate that no storage was actually allocated. Any length field associated with such pointers (as in a gss_buffer_desc structure) should also be set to zero in such cases.

3.5 Credential Management

   GSS-API Credential-management Routines

   Routine                         Function
   -------                         --------
   gss_acquire_cred                Assume a global identity; Obtain
                                   a GSS-API credential handle for
                                   pre-existing credentials.
   gss_add_cred                    Construct credentials
                                   incrementally.
   gss_inquire_cred                Obtain information about a
                                   credential.
   gss_inquire_cred_by_mech        Obtain per-mechanism information
                                   about a credential.
   gss_release_cred                Discard a credential handle.

gss_acquire_cred

— Function: OM_uint32 gss_acquire_cred (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec)

minor_status: (integer, modify) Mechanism specific status code.

desired_name: (gss_name_t, read) Name of principal whose credential should be acquired.

time_req: (Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime.

desired_mechs: (Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation-specific default.

cred_usage: (gss_cred_usage_t, read) GSS_C_BOTH - Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credentials will only be used to initiate security contexts. GSS_C_ACCEPT - Credentials will only be used to accept security contexts.

output_cred_handle: (gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to gss_release_cred().

actual_mechs: (Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID-set must be released by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

time_rec: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

Allows an application to acquire a handle for a pre-existing credential by name. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation-specific extensions to the API.

If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH).

Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined.

This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context.

If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: Unavailable mechanism requested.

GSS_S_BAD_NAMETYPE: Type contained within desired_name parameter is not supported.

GSS_S_BAD_NAME: Value supplied for desired_name parameter is ill formed.

GSS_S_CREDENTIALS_EXPIRED: The credentials could not be acquired Because they have expired.

GSS_S_NO_CRED: No credentials were found for the specified name.

gss_add_cred

— Function: OM_uint32 gss_add_cred (OM_uint32 * minor_status, const gss_cred_id_t input_cred_handle, const gss_name_t desired_name, const gss_OID desired_mech, gss_cred_usage_t cred_usage, OM_uint32 initiator_time_req, OM_uint32 acceptor_time_req, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * initiator_time_rec, OM_uint32 * acceptor_time_rec)

minor_status: (integer, modify) Mechanism specific status code.

input_cred_handle: (gss_cred_id_t, read, optional) The credential to which a credential-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential-handle is not modified by gss_add_cred(), the underlying credential will be modified if output_credential_handle is NULL.

desired_name: (gss_name_t, read.) Name of principal whose credential should be acquired.

desired_mech: (Object ID, read) Underlying security mechanism with which the credential may be used.

cred_usage: (gss_cred_usage_t, read) GSS_C_BOTH - Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credential will only be used to initiate security contexts. GSS_C_ACCEPT - Credential will only be used to accept security contexts.

initiator_time_req: (Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime.

acceptor_time_req: (Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime.

output_cred_handle: (gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential-element and all the credential-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential-elements from the input_cred_handle and the newly acquired credential-element; if NULL is specified for this parameter, the newly acquired credential-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to gss_release_cred().

actual_mechs: (Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID-set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

initiator_time_rec: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required

acceptor_time_rec: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required

Adds a credential-element to a credential. The credential-element is identified by the name of the principal to which it refers. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credential-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism-specific authentication data, rather than merely acquiring a GSS-API handle to existing data. Such functions, if required, should be defined in implementation-specific extensions to the API.

If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH).

This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context.

If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition.

This routine can be used to either compose a new credential containing all credential-elements of the original in addition to the newly-acquire credential-element, or to add the new credential- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created.

If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to gss_acquire_cred(), specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to gss_add_cred(), and finally called gss_release_cred() on the first credential handle.

If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non-NULL output_cred_handle must be supplied.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: Unavailable mechanism requested.

GSS_S_BAD_NAMETYPE: Type contained within desired_name parameter is not supported.

GSS_S_BAD_NAME: Value supplied for desired_name parameter is ill-formed.

GSS_S_DUPLICATE_ELEMENT: The credential already contains an element for the requested mechanism with overlapping usage and validity period.

GSS_S_CREDENTIALS_EXPIRED: The required credentials could not be added because they have expired.

GSS_S_NO_CRED: No credentials were found for the specified name.

gss_inquire_cred

— Function: OM_uint32 gss_inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms)

minor_status: (integer, modify) Mechanism specific status code.

cred_handle: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal.

name: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

lifetime: (Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

cred_usage: (gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required.

mechanisms: (gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

Obtains information about a credential.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CRED: The referenced credentials could not be accessed.

GSS_S_DEFECTIVE_CREDENTIAL: The referenced credentials were invalid.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0.

gss_inquire_cred_by_mech

— Function: OM_uint32 gss_inquire_cred_by_mech (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage)

minor_status: (Integer, modify) Mechanism specific status code.

cred_handle: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal.

mech_type: (gss_OID, read) The mechanism for which information should be returned.

name: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

initiator_lifetime: (Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

acceptor_lifetime: (Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

cred_usage: (gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required.

Obtains per-mechanism information about a credential.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CRED: The referenced credentials could not be accessed.

GSS_S_DEFECTIVE_CREDENTIAL: The referenced credentials were invalid.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0.

gss_release_cred

— Function: OM_uint32 gss_release_cred (OM_uint32 * minor_status, gss_cred_id_t * cred_handle)

minor_status: (Integer, modify) Mechanism specific status code.

cred_handle: (gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing.

Informs GSS-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CRED: Credentials could not be accessed.

3.6 Context-Level Routines

   GSS-API Context-Level Routines

   Routine                         Function
   -------                         --------
   gss_init_sec_context            Initiate a security context with
                                   a peer application.
   gss_accept_sec_context          Accept a security context
                                   initiated by a peer application.
   gss_delete_sec_context          Discard a security context.
   gss_process_context_token       Process a token on a security
                                   context from a peer application.
   gss_context_time                Determine for how long a context
                                   will remain valid.
   gss_inquire_context             Obtain information about a
                                   security context.
   gss_wrap_size_limit             Determine token-size limit for
                                   gss_wrap on a context.
   gss_export_sec_context          Transfer a security context to
                                   another process.
   gss_import_sec_context          Import a transferred context.

gss_init_sec_context

— Function: OM_uint32 gss_init_sec_context (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec)

minor_status: (integer, modify) Mechanism specific status code.

initiator_cred_handle: (gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED.

context_handle: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context-handle must be released by the application after use with a call to gss_delete_sec_context().

target_name: (gss_name_t, read) Name of target.

mech_type: (OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default.

req_flags: (bit-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ORed together to form the bit-mask value. See below for the flags.

time_req: (Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period.

input_chan_bindings: (channel bindings, read, optional) Application-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used.

input_token: (buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call.

actual_mech_type: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required.

output_token: (buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to gss_release_buffer().

ret_flags: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

time_rec: (Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters.

Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop:

          int context_established = 0;
          gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;
                 ...
          input_token->length = 0;
          
          while (!context_established) {
            maj_stat = gss_init_sec_context(&min_stat,
                                            cred_hdl,
                                            &context_hdl,
                                            target_name,
                                            desired_mech,
                                            desired_services,
                                            desired_time,
                                            input_bindings,
                                            input_token,
                                            &actual_mech,
                                            output_token,
                                            &actual_services,
                                            &actual_time);
            if (GSS_ERROR(maj_stat)) {
              report_error(maj_stat, min_stat);
            };
          
            if (output_token->length != 0) {
              send_token_to_peer(output_token);
              gss_release_buffer(&min_stat, output_token)
            };
            if (GSS_ERROR(maj_stat)) {
          
              if (context_hdl != GSS_C_NO_CONTEXT)
                gss_delete_sec_context(&min_stat,
                                       &context_hdl,
                                       GSS_C_NO_BUFFER);
              break;
            };
          
            if (maj_stat & GSS_S_CONTINUE_NEEDED) {
              receive_token_from_peer(input_token);
            } else {
              context_established = 1;
            };
          };

Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters:

  • The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE.
  • The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory).
  • The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established.
  • GSS-API implementations that support per-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should determine what per-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values.
  • All other bits within the ret_flags argument should be set to zero.

If the initial call of gss_init_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context).

During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes.

The req_flags values:

GSS_C_DELEG_FLAG
  • True - Delegate credentials to remote peer.
  • False - Don't delegate.

GSS_C_MUTUAL_FLAG
  • True - Request that remote peer authenticate itself.
  • False - Authenticate self to remote peer only.

GSS_C_REPLAY_FLAG
  • True - Enable replay detection for messages protected with gss_wrap or gss_get_mic.
  • False - Don't attempt to detect replayed messages.

GSS_C_SEQUENCE_FLAG
  • True - Enable detection of out-of-sequence protected messages.
  • False - Don't attempt to detect out-of-sequence messages.

GSS_C_CONF_FLAG
  • True - Request that confidentiality service be made available (via gss_wrap).
  • False - No per-message confidentiality service is required.

GSS_C_INTEG_FLAG
  • True - Request that integrity service be made available (via gss_wrap or gss_get_mic).
  • False - No per-message integrity service is required.

GSS_C_ANON_FLAG
  • True - Do not reveal the initiator's identity to the acceptor.
  • False - Authenticate normally.

The ret_flags values:

GSS_C_DELEG_FLAG
  • True - Credentials were delegated to the remote peer.
  • False - No credentials were delegated.

GSS_C_MUTUAL_FLAG
  • True - The remote peer has authenticated itself.
  • False - Remote peer has not authenticated itself.

GSS_C_REPLAY_FLAG
  • True - replay of protected messages will be detected.
  • False - replayed messages will not be detected.

GSS_C_SEQUENCE_FLAG
  • True - out-of-sequence protected messages will be detected.
  • False - out-of-sequence messages will not be detected.

GSS_C_CONF_FLAG
  • True - Confidentiality service may be invoked by calling gss_wrap routine.
  • False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

GSS_C_INTEG_FLAG
  • True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines.
  • False - Per-message integrity service unavailable.

GSS_C_ANON_FLAG
  • True - The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor.
  • False - The initiator's identity has been or will be authenticated normally.

GSS_C_PROT_READY_FLAG
  • True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED.
  • False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE.

GSS_C_TRANS_FLAG
  • True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context().
  • False - The security context is not transferable.

All other bits should be set to zero.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTINUE_NEEDED: Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token.

GSS_S_DEFECTIVE_TOKEN: Indicates that consistency checks performed on the input_token failed.

GSS_S_DEFECTIVE_CREDENTIAL: Indicates that consistency checks performed on the credential failed.

GSS_S_NO_CRED: The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired.

GSS_S_BAD_BINDINGS: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter.

GSS_S_BAD_SIG: The input_token contains an invalid MIC, or a MIC that could not be verified.

GSS_S_OLD_TOKEN: The input_token was too old. This is a fatal error during context establishment.

GSS_S_DUPLICATE_TOKEN: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment.

GSS_S_NO_CONTEXT: Indicates that the supplied context handle did not refer to a valid context.

GSS_S_BAD_NAMETYPE: The provided target_name parameter contained an invalid or unsupported type of name.

GSS_S_BAD_NAME: The provided target_name parameter was ill-formed.

GSS_S_BAD_MECH: The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation.

gss_accept_sec_context

— Function: OM_uint32 gss_accept_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once gss_accept_sec_context() has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to gss_delete_sec_context().

acceptor_cred_handle: (gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned.

input_token_buffer: (buffer, opaque, read) Token obtained from remote application.

input_chan_bindings: (channel bindings, read, optional) Application- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS.

src_name: (gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to gss_release_name(). If not required, specify NULL.

mech_type: (Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read-only by the caller (in particular, it does not need to be freed). If not required, specify NULL.

output_token: (buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non- zero length field is returned, the associated storage must be freed after use by the application with a call to gss_release_buffer().

ret_flags: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

time_rec: (Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required.

delegated_cred_handle: (gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, gss_accept_sec_context() will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to gss_release_cred(). Specify NULL if not required.

Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters.

Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop:

          gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;
          
          do {
            receive_token_from_peer(input_token);
            maj_stat = gss_accept_sec_context(&min_stat,
                                              &context_hdl,
                                              cred_hdl,
                                              input_token,
                                              input_bindings,
                                              &client_name,
                                              &mech_type,
                                              output_token,
                                              &ret_flags,
                                              &time_rec,
                                              &deleg_cred);
            if (GSS_ERROR(maj_stat)) {
              report_error(maj_stat, min_stat);
            };
            if (output_token->length != 0) {
              send_token_to_peer(output_token);
          
              gss_release_buffer(&min_stat, output_token);
            };
            if (GSS_ERROR(maj_stat)) {
              if (context_hdl != GSS_C_NO_CONTEXT)
                gss_delete_sec_context(&min_stat,
                                       &context_hdl,
                                       GSS_C_NO_BUFFER);
              break;
            };
          } while (maj_stat & GSS_S_CONTINUE_NEEDED);

Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters:

The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE.

The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed.

The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established.

Although this requires that GSS-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should be prepared to use per-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values.

All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context.

If the initial call of gss_accept_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context).

During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes.

The ret_flags values:

GSS_C_DELEG_FLAG
  • True - Delegated credentials are available via the delegated_cred_handle parameter.
  • False - No credentials were delegated.

GSS_C_MUTUAL_FLAG
  • True - Remote peer asked for mutual authentication.
  • False - Remote peer did not ask for mutual authentication.

GSS_C_REPLAY_FLAG
  • True - replay of protected messages will be detected.
  • False - replayed messages will not be detected.

GSS_C_SEQUENCE_FLAG
  • True - out-of-sequence protected messages will be detected.
  • False - out-of-sequence messages will not be detected.

GSS_C_CONF_FLAG
  • True - Confidentiality service may be invoked by calling the gss_wrap routine.
  • False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

GSS_C_INTEG_FLAG
  • True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines.
  • False - Per-message integrity service unavailable.

GSS_C_ANON_FLAG
  • True - The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name.
  • False - The initiator has been authenticated normally.

GSS_C_PROT_READY_FLAG
  • True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED.
  • False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE.

GSS_C_TRANS_FLAG
  • True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context().
  • False - The security context is not transferable.

All other bits should be set to zero.

Return value:

GSS_S_CONTINUE_NEEDED: Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token.

GSS_S_DEFECTIVE_TOKEN: Indicates that consistency checks performed on the input_token failed.

GSS_S_DEFECTIVE_CREDENTIAL: Indicates that consistency checks performed on the credential failed.

GSS_S_NO_CRED: The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired.

GSS_S_BAD_BINDINGS: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter.

GSS_S_NO_CONTEXT: Indicates that the supplied context handle did not refer to a valid context.

GSS_S_BAD_SIG: The input_token contains an invalid MIC.

GSS_S_OLD_TOKEN: The input_token was too old. This is a fatal error during context establishment.

GSS_S_DUPLICATE_TOKEN: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment.

GSS_S_BAD_MECH: The received token specified a mechanism that is not supported by the implementation or the provided credential.

gss_delete_sec_context

— Function: OM_uint32 gss_delete_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS-API will set this context handle to GSS_C_NO_CONTEXT.

output_token: (buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer.

Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle.

In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half-built" security contexts resulting from an incomplete sequence of gss_init_sec_context()/gss_accept_sec_context() calls.

The output_token parameter is retained for compatibility with version 1 of the GSS-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero-length token, indicating that no peer action is necessary, and that no token should be transferred by the application.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: No valid context was supplied.

gss_process_context_token

— Function: OM_uint32 gss_process_context_token (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t token_buffer)

minor_status: (Integer, modify) Implementation specific status code.

context_handle: (gss_ctx_id_t, read) Context handle of context on which token is to be processed

token_buffer: (buffer, opaque, read) Token to process.

Provides a way to pass an asynchronous token to the security service. Most context-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_DEFECTIVE_TOKEN: Indicates that consistency checks performed on the token failed.

GSS_S_NO_CONTEXT: The context_handle did not refer to a valid context.

gss_context_time

— Function: OM_uint32 gss_context_time (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec)

minor_status: (Integer, modify) Implementation specific status code.

context_handle: (gss_ctx_id_t, read) Identifies the context to be interrogated.

time_rec: (Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned.

Determines the number of seconds for which the specified context will remain valid.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context

gss_inquire_context

— Function: OM_uint32 gss_inquire_context (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_name_t * src_name, gss_name_t * targ_name, OM_uint32 * lifetime_rec, gss_OID * mech_type, OM_uint32 * ctx_flags, int * locally_initiated, int * open)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) A handle that refers to the security context.

src_name: (gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

targ_name: (gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. Specify NULL if not required.

lifetime_rec: (Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

mech_type: (gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read-only by the application; in particular the application should not attempt to free it. Specify NULL if not required.

ctx_flags: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

locally_initiated: (Boolean, modify) Non-zero if the invoking application is the context initiator. Specify NULL if not required.

open: (Boolean, modify) Non-zero if the context is fully established; Zero if a context-establishment token is expected from the peer application. Specify NULL if not required.

Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established.

The ctx_flags values:

GSS_C_DELEG_FLAG
  • True - Credentials were delegated from the initiator to the acceptor.
  • False - No credentials were delegated.

GSS_C_MUTUAL_FLAG
  • True - The acceptor was authenticated to the initiator.
  • False - The acceptor did not authenticate itself.

GSS_C_REPLAY_FLAG
  • True - replay of protected messages will be detected.
  • False - replayed messages will not be detected.

GSS_C_SEQUENCE_FLAG
  • True - out-of-sequence protected messages will be detected.
  • False - out-of-sequence messages will not be detected.

GSS_C_CONF_FLAG
  • True - Confidentiality service may be invoked by calling gss_wrap routine.
  • False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

GSS_C_INTEG_FLAG
  • True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines.
  • False - Per-message integrity service unavailable.

GSS_C_ANON_FLAG
  • True - The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name.
  • False - The initiator has been authenticated normally.

GSS_C_PROT_READY_FLAG
  • True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use.
  • False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non-zero).

GSS_C_TRANS_FLAG
  • True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context().
  • False - The security context is not transferable.
Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: The referenced context could not be accessed.

gss_wrap_size_limit

— Function: OM_uint32 gss_wrap_size_limit (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, OM_uint32 req_output_size, OM_uint32 * max_input_size)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent.

conf_req_flag: (Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details.

qop_req: (gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details.

req_output_size: (Integer, read) The desired maximum size for tokens emitted by gss_wrap.

max_input_size: (Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes.

Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes.

This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection.

GSS-API implementations are recommended but not required to detect invalid QOP values when gss_wrap_size_limit() is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection.

Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: The referenced context could not be accessed.

GSS_S_CONTEXT_EXPIRED: The context has expired.

GSS_S_BAD_QOP: The specified QOP is not supported by the mechanism.

gss_export_sec_context

— Function: OM_uint32 gss_export_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t interprocess_token)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, modify) Context handle identifying the context to transfer.

interprocess_token: (buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to gss_release_buffer().

Provided to support the sharing of work between multiple processes. This routine will typically be used by the context-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. gss_export_sec_context() deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail.

The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group.

The interprocess token may contain security-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object-library GSS-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy.

If creation of the interprocess token is successful, the implementation shall deallocate all process-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has expired.

GSS_S_NO_CONTEXT: The context was invalid.

GSS_S_UNAVAILABLE: The operation is not supported.

gss_import_sec_context

— Function: OM_uint32 gss_import_sec_context (OM_uint32 * minor_status, const gss_buffer_t interprocess_token, gss_ctx_id_t * context_handle)

minor_status: (Integer, modify) Mechanism specific status code.

interprocess_token: (buffer, opaque, modify) Token received from exporting process

context_handle: (gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to gss_delete_sec_context().

Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: The token did not contain a valid context reference.

GSS_S_DEFECTIVE_TOKEN: The token was invalid.

GSS_S_UNAVAILABLE: The operation is unavailable.

GSS_S_UNAUTHORIZED: Local policy prevents the import of this context by the current process.

3.7 Per-Message Routines

   GSS-API Per-message Routines

   Routine                         Function
   -------                         --------
   gss_get_mic                     Calculate a cryptographic message
                                   integrity code (MIC) for a
                                   message; integrity service.
   gss_verify_mic                  Check a MIC against a message;
                                   verify integrity of a received
                                   message.
   gss_wrap                        Attach a MIC to a message, and
                                   optionally encrypt the message
                                   content.
                                   confidentiality service
   gss_unwrap                      Verify a message with attached
                                   MIC, and decrypt message content
                                   if necessary.

gss_get_mic

— Function: OM_uint32 gss_get_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) Identifies the context on which the message will be sent.

qop_req: (gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP.

message_buffer: (buffer, opaque, read) Message to be protected.

message_token: (buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to gss_release_buffer().

Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support derivation of MICs from zero-length messages.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.

GSS_S_BAD_QOP: The specified QOP is not supported by the mechanism.

gss_verify_mic

— Function: OM_uint32 gss_verify_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) Identifies the context on which the message arrived.

message_buffer: (buffer, opaque, read) Message to be verified.

token_buffer: (buffer, opaque, read) Token associated with message.

qop_state: (gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required.

Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the calculation and verification of MICs over zero-length messages.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_DEFECTIVE_TOKEN: The token failed consistency checks.

GSS_S_BAD_SIG: The MIC was incorrect.

GSS_S_DUPLICATE_TOKEN: The token was valid, and contained a correct MIC for the message, but it had already been processed.

GSS_S_OLD_TOKEN: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication.

GSS_S_UNSEQ_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received.

GSS_S_GAP_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.

gss_wrap

— Function: OM_uint32 gss_wrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int * conf_state, gss_buffer_t output_message_buffer)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) Identifies the context on which the message will be sent.

conf_req_flag: (boolean, read) Non-zero - Both confidentiality and integrity services are requested. Zero - Only integrity service is requested.

qop_req: (gss_qop_t, read, optional) Specifies required quality of protection. A mechanism-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP.

input_message_buffer: (buffer, opaque, read) Message to be protected.

conf_state: (boolean, modify, optional) Non-zero - Confidentiality, data origin authentication and integrity services have been applied. Zero - Integrity and data origin services only has been applied. Specify NULL if not required.

output_message_buffer: (buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to gss_release_buffer().

Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping of zero-length messages.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.

GSS_S_BAD_QOP: The specified QOP is not supported by the mechanism.

gss_unwrap

— Function: OM_uint32 gss_unwrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int * conf_state, gss_qop_t * qop_state)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) Identifies the context on which the message arrived.

input_message_buffer: (buffer, opaque, read) Protected message.

output_message_buffer: (buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to gss_release_buffer().

conf_state: (boolean, modify, optional) Non-zero - Confidentiality and integrity protection were used. Zero - Integrity service only was used. Specify NULL if not required.

qop_state: (gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required.

Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping and unwrapping of zero-length messages.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_DEFECTIVE_TOKEN: The token failed consistency checks.

GSS_S_BAD_SIG: The MIC was incorrect.

GSS_S_DUPLICATE_TOKEN: The token was valid, and contained a correct MIC for the message, but it had already been processed.

GSS_S_OLD_TOKEN: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication.

GSS_S_UNSEQ_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received.

GSS_S_GAP_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.

3.8 Name Manipulation

   GSS-API Name manipulation Routines

   Routine                         Function
   -------                         --------
   gss_import_name                 Convert a contiguous string name
                                   to internal-form.
   gss_display_name                Convert internal-form name to
                                   text.
   gss_compare_name                Compare two internal-form names.
   gss_release_name                Discard an internal-form name.
   gss_inquire_names_for_mech      List the name-types supported by.
                                   the specified mechanism.
   gss_inquire_mechs_for_name      List mechanisms that support the
                                   specified name-type.
   gss_canonicalize_name           Convert an internal name to an MN.
   gss_export_name                 Convert an MN to export form.
   gss_duplicate_name              Create a copy of an internal name.

gss_import_name

— Function: OM_uint32 gss_import_name (OM_uint32 * minor_status, const gss_buffer_t input_name_buffer, const gss_OID input_name_type, gss_name_t * output_name)

minor_status: (Integer, modify) Mechanism specific status code.

input_name_buffer: (buffer, octet-string, read) Buffer containing contiguous string name to convert.

input_name_type: (Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism-specific default printable syntax, or an OID recognized by the GSS-API implementation to name a specific namespace.

output_name: (gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

Convert a contiguous string name to internal form. In general, the internal name returned (via the @output_name parameter) will not be an MN; the exception to this is if the @input_name_type indicates that the contiguous string provided via the @input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAMETYPE: The input_name_type was unrecognized.

GSS_S_BAD_NAME: The input_name parameter could not be interpreted as a name of the specified type.

GSS_S_BAD_MECH: The input name-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input-name is not supported.

gss_display_name

— Function: OM_uint32 gss_display_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t output_name_buffer, gss_OID * output_name_type)

minor_status: (Integer, modify) Mechanism specific status code.

input_name: (gss_name_t, read) Name to be displayed.

output_name_buffer: (buffer, character-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to gss_release_buffer().

output_name_type: (Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required.

Allows an application to obtain a textual representation of an opaque internal-form name for display purposes. The syntax of a printable name is defined by the GSS-API implementation.

If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer.

If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: @input_name was ill-formed.

gss_compare_name

— Function: OM_uint32 gss_compare_name (OM_uint32 * minor_status, const gss_name_t name1, const gss_name_t name2, int * name_equal)

minor_status: (Integer, modify) Mechanism specific status code.

name1: (gss_name_t, read) Internal-form name.

name2: (gss_name_t, read) Internal-form name.

name_equal: (boolean, modify) Non-zero - names refer to same entity. Zero - names refer to different entities (strictly, the names are not known to refer to the same identity).

Allows an application to compare two internal-form names to determine whether they refer to the same entity.

If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAMETYPE: The two names were of incomparable types.

GSS_S_BAD_NAME: One or both of name1 or name2 was ill-formed.

gss_release_name

— Function: OM_uint32 gss_release_name (OM_uint32 * minor_status, gss_name_t * name)

minor_status: (Integer, modify) Mechanism specific status code.

name: (gss_name_t, modify) The name to be deleted.

Free GSSAPI-allocated storage associated with an internal-form name. The name is set to GSS_C_NO_NAME on successful completion of this call.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: The name parameter did not contain a valid name.

gss_inquire_names_for_mech

— Function: OM_uint32 gss_inquire_names_for_mech (OM_uint32 * minor_status, const gss_OID mechanism, gss_OID_set * name_types)

minor_status: (Integer, modify) Mechanism specific status code.

mechanism: (gss_OID, read) The mechanism to be interrogated.

name_types: (gss_OID_set, modify) Set of name-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to gss_release_oid_set().

Returns the set of nametypes supported by the specified mechanism.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_inquire_mechs_for_name

— Function: OM_uint32 gss_inquire_mechs_for_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_OID_set * mech_types)

minor_status: (Integer, modify) Mechanism specific status code.

input_name: (gss_name_t, read) The name to which the inquiry relates.

mech_types: (gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to gss_release_oid_set().

Returns the set of mechanisms supported by the GSS-API implementation that may be able to process the specified name.

Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism-independent GSS-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism-specific routine.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: The input_name parameter was ill-formed.

GSS_S_BAD_NAMETYPE: The input_name parameter contained an invalid or unsupported type of name.

gss_canonicalize_name

— Function: OM_uint32 gss_canonicalize_name (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name)

minor_status: (Integer, modify) Mechanism specific status code.

input_name: (gss_name_t, read) The name for which a canonical form is desired.

mech_type: (Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided.

output_name: (gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing @mech_type as its only member, followed by a call to gss_init_sec_context(), specifying @mech_type as the authentication mechanism.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_export_name

— Function: OM_uint32 gss_export_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name)

minor_status: (Integer, modify) Mechanism specific status code.

input_name: (gss_name_t, read) The MN to be exported.

exported_name: (gss_buffer_t, octet-string, modify) The canonical contiguous string form of @input_name. Storage associated with this string must freed by the application after use with gss_release_buffer().

To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access-control list). The @input_name parameter must specify a valid MN (i.e. an internal name generated by gss_accept_sec_context() or by gss_canonicalize_name()).

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NAME_NOT_MN: The provided internal name was not a mechanism name.

GSS_S_BAD_NAME: The provided internal name was ill-formed.

GSS_S_BAD_NAMETYPE: The internal name was of a type not supported by the GSS-API implementation.

gss_duplicate_name

— Function: OM_uint32 gss_duplicate_name (OM_uint32 * minor_status, const gss_name_t src_name, gss_name_t * dest_name)

minor_status: (Integer, modify) Mechanism specific status code.

src_name: (gss_name_t, read) Internal name to be duplicated.

dest_name: (gss_name_t, modify) The resultant copy of @src_name. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

Create an exact duplicate of the existing internal name @src_name. The new @dest_name will be independent of src_name (i.e. @src_name and @dest_name must both be released, and the release of one shall not affect the validity of the other).

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: The src_name parameter was ill-formed.

3.9 Miscellaneous Routines

   GSS-API Miscellaneous Routines

   Routine                        Function
   -------                        --------
   gss_add_oid_set_member         Add an object identifier to
                                  a set.
   gss_display_status             Convert a GSS-API status code
                                  to text.
   gss_indicate_mechs             Determine available underlying
                                  authentication mechanisms.
   gss_release_buffer             Discard a buffer.
   gss_release_oid_set            Discard a set of object
                                  identifiers.
   gss_create_empty_oid_set       Create a set containing no
                                  object identifiers.
   gss_test_oid_set_member        Determines whether an object
                                  identifier is a member of a set.
   gss_encapsulate_token          Encapsulate a context token.
   gss_decapsulate_token          Decapsulate a context token.
   gss_oid_equal                  Compare two OIDs for equality.

gss_add_oid_set_member

— Function: OM_uint32 gss_add_oid_set_member (OM_uint32 * minor_status, const gss_OID member_oid, gss_OID_set * oid_set)

minor_status: (integer, modify) Mechanism specific status code.

member_oid: (Object ID, read) The object identifier to copied into the set.

oid_set: (Set of Object ID, modify) The set in which the object identifier should be inserted.

Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID-set that was created by GSS-API (e.g. a set returned by gss_create_empty_oid_set()). GSS-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_display_status

— Function: OM_uint32 gss_display_status (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string)

minor_status: (integer, modify) Mechanism specific status code.

status_value: (Integer, read) Status value to be converted.

status_type: (Integer, read) GSS_C_GSS_CODE - status_value is a GSS status code. GSS_C_MECH_CODE - status_value is a mechanism status code.

mech_type: (Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default.

message_context: (Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from gss_display_status(), a non-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to gss_display_status(), passing the same status_value, status_type, mech_type, and message_context parameters.

status_string: (buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to gss_release_buffer().

Allows an application to obtain a textual representation of a GSS-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non-zero value in this parameter if there are further messages to extract.

The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr:

          OM_uint32 message_context;
          OM_uint32 status_code;
          OM_uint32 maj_status;
          OM_uint32 min_status;
          gss_buffer_desc status_string;
          
                 ...
          
          message_context = 0;
          
          do {
            maj_status = gss_display_status (
                            &min_status,
                            status_code,
                            GSS_C_GSS_CODE,
                            GSS_C_NO_OID,
                            &message_context,
                            &status_string)
          
            fprintf(stderr,
                    "%.*s\n",
                   (int)status_string.length,
          
                   (char *)status_string.value);
          
            gss_release_buffer(&min_status, &status_string);
          
          } while (message_context != 0);

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: Indicates that translation in accordance with an unsupported mechanism type was requested.

GSS_S_BAD_STATUS: The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE.

gss_indicate_mechs

— Function: OM_uint32 gss_indicate_mechs (OM_uint32 * minor_status, gss_OID_set * mech_set)

minor_status: (integer, modify) Mechanism specific status code.

mech_set: (set of Object IDs, modify) Set of implementation-supported mechanisms. The returned gss_OID_set value will be a dynamically-allocated OID set, that should be released by the caller after use with a call to gss_release_oid_set().

Allows an application to determine which underlying security mechanisms are available.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_release_buffer

— Function: OM_uint32 gss_release_buffer (OM_uint32 * minor_status, gss_buffer_t buffer)

minor_status: (integer, modify) Mechanism specific status code.

buffer: (buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed.

Free storage associated with a buffer. The storage must have been allocated by a GSS-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer).

Return value:

GSS_S_COMPLETE: Successful completion.

gss_release_oid_set

— Function: OM_uint32 gss_release_oid_set (OM_uint32 * minor_status, gss_OID_set * set)

minor_status: (integer, modify) Mechanism specific status code.

set: (Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted.

Free storage associated with a GSSAPI-generated gss_OID_set object. The set parameter must refer to an OID-set that was returned from a GSS-API routine. gss_release_oid_set() will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc.

The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_create_empty_oid_set

— Function: OM_uint32 gss_create_empty_oid_set (OM_uint32 * minor_status, gss_OID_set * oid_set)

minor_status: (integer, modify) Mechanism specific status code.

oid_set: (Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to gss_release_oid_set().

Create an object-identifier set containing no object identifiers, to which members may be subsequently added using the gss_add_oid_set_member() routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_test_oid_set_member

— Function: OM_uint32 gss_test_oid_set_member (OM_uint32 * minor_status, const gss_OID member, const gss_OID_set set, int * present)

minor_status: (integer, modify) Mechanism specific status code.

member: (Object ID, read) The object identifier whose presence is to be tested.

set: (Set of Object ID, read) The Object Identifier set.

present: (Boolean, modify) Non-zero if the specified OID is a member of the set, zero if not.

Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by gss_indicate_mechs(), gss_acquire_cred(), and gss_inquire_cred(), but will also work with user-generated sets.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_encapsulate_token

— Function: extern OM_uint32 gss_encapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token)

input_token: (buffer, opaque, read) Buffer with GSS-API context token data.

token_oid: (Object ID, read) Object identifier of token.

output_token: (buffer, opaque, modify) Encapsulated token data; caller must release with gss_release_buffer().

Add the mechanism-independent token header to GSS-API context token data. This is used for the initial token of a GSS-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339.

Returns:

GSS_S_COMPLETE: Indicates successful completion, and that output parameters holds correct information.

GSS_S_FAILURE: Indicates that encapsulation failed for reasons unspecified at the GSS-API level.

gss_decapsulate_token

— Function: OM_uint32 gss_decapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token)

input_token: (buffer, opaque, read) Buffer with GSS-API context token.

token_oid: (Object ID, read) Expected object identifier of token.

output_token: (buffer, opaque, modify) Decapsulated token data; caller must release with gss_release_buffer().

Remove the mechanism-independent token header from an initial GSS-API context token. Unwrap a buffer in the mechanism-independent token format. This is the reverse of gss_encapsulate_token(). The translation is loss-less, all data is preserved as is. This function is standardized in RFC 6339.

Return value:

GSS_S_COMPLETE: Indicates successful completion, and that output parameters holds correct information.

GSS_S_DEFECTIVE_TOKEN: Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors).

GSS_S_FAILURE: Indicates that decapsulation failed for reasons unspecified at the GSS-API level.

gss_oid_equal

— Function: int gss_oid_equal (gss_const_OID first_oid, gss_const_OID second_oid)

first_oid: (Object ID, read) First Object identifier.

second_oid: (Object ID, read) First Object identifier.

Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339.

Return value: Returns boolean value true when the two OIDs are equal, otherwise false.

3.10 SASL GS2 Routines

gss_inquire_mech_for_saslname

— Function: OM_uint32 gss_inquire_mech_for_saslname (OM_uint32 * minor_status, const gss_buffer_t sasl_mech_name, gss_OID * mech_type)

minor_status: (Integer, modify) Mechanism specific status code.

sasl_mech_name: (buffer, character-string, read) Buffer with SASL mechanism name.

mech_type: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required.

Output GSS-API mechanism OID of mechanism associated with given @sasl_mech_name.

Returns:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: There is no GSS-API mechanism known as @sasl_mech_name.

gss_inquire_saslname_for_mech

— Function: OM_uint32 gss_inquire_saslname_for_mech (OM_uint32 * minor_status, const gss_OID desired_mech, gss_buffer_t sasl_mech_name, gss_buffer_t mech_name, gss_buffer_t mech_description)

minor_status: (Integer, modify) Mechanism specific status code.

desired_mech: (OID, read) Identifies the GSS-API mechanism to query.

sasl_mech_name: (buffer, character-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer().

mech_name: (buffer, character-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer().

mech_description: (buffer, character-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to gss_release_buffer().

Output the SASL mechanism name of a GSS-API mechanism. It also returns a name and description of the mechanism in a user friendly form.

Returns:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: The @desired_mech OID is unsupported.


Next: , Previous: Standard GSS API, Up: Top

4 Extended GSS API

None of the following functions are standard GSS API functions. As such, they are not declared in gss/api.h, but rather in gss/ext.h (which is included from gss.h). See Header.

gss_check_version

— Function: const char * gss_check_version (const char * req_version)

req_version: version string to compare with, or NULL

Check that the version of the library is at minimum the one given as a string in @req_version.

Return value: The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned.

gss_userok

— Function: int gss_userok (const gss_name_t name, const char * username)

name: (gss_name_t, read) Name to be compared.

username: Zero terminated string with username.

Compare the username against the output from gss_export_name() invoked on @name, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal

Return value: Returns 0 if the names match, non-0 otherwise.


Next: , Previous: Extended GSS API, Up: Top

5 Invoking gss

Name

GNU GSS (gss) – Command line interface to the GSS Library.

Description

gss is the main program of GNU GSS.

Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.

Commands

gss recognizes these commands:

  -l, --list-mechanisms
                    List information about supported mechanisms
                    in a human readable format.

  -m, --major=LONG  Describe a `major status' error code value.

Other Options

These are some standard parameters.

  -h, --help        Print help and exit
  -V, --version     Print version and exit
  -q, --quiet       Silent operation  (default=off)

Examples

  -h, --help        Print help and exit
  -V, --version     Print version and exit
  -q, --quiet       Silent operation  (default=off)


Next: , Previous: Invoking gss, Up: Top

6 Acknowledgements

This manual borrows text from RFC 2743 and RFC 2744 that describe GSS API formally.


Next: , Previous: Acknowledgements, Up: Top

Appendix A Criticism of GSS

The author has doubts whether GSS is the best solution for free software projects looking for a implementation agnostic security framework. We express these doubts in this section, so that the reader can judge for herself if any of the potential problems discussed here are relevant for their project, or if the benefit outweigh the problems. We are aware that some of the opinions are highly subjective, but we offer them in the hope they can serve as anecdotal evidence.

GSS can be criticized on several levels. We start with the actual implementation.

GSS does not appear to be designed by experienced C programmers. While generally this may be a good thing (C is not the best language), but since they defined the API in C, it is unfortunate. The primary evidence of this is the major_status and minor_status error code solution. It is a complicated way to describe error conditions, but what makes matters worse, the error condition is separated; half of the error condition is in the function return value and the other half is in the first argument to the function, which is always a pointer to an integer. (The pointer is not even allowed to be NULL, if the application doesn't care about the minor error code.) This makes the API unreadable, and difficult to use. A better solutions would be to return a struct containing the entire error condition, which can be accessed using macros, although we acknowledge that the C language used at the time GSS was designed may not have allowed this (this may in fact be the reason the awkward solution was chosen). Instead, the return value could have been passed back to callers using a pointer to a struct, accessible using various macros, and the function could have a void prototype. The fact that minor_status is placed first in the parameter list increases the pain it is to use the API. Important parameters should be placed first. A better place for minor_status (if it must be present at all) would have been last in the prototypes.

Another evidence of the C inexperience are the memory management issues; GSS provides functions to deallocate data stored within, e.g., gss_buffer_t but the caller is responsible of deallocating the structure pointed at by the gss_buffer_t (i.e., the gss_buffer_desc) itself. Memory management issues are error prone, and this division easily leads to memory leaks (or worse). Instead, the API should be the sole owner of all gss_ctx_id_t, gss_cred_id_t, and gss_buffer_t structures: they should be allocated by the library, and deallocated (using the utility functions defined for this purpose) by the library.

TBA: specification is unclear how memory for OIDs are managed. For example, who is responsible for deallocate potentially newly allocated OIDs returned as actual_mechs in gss_acquire_cred? Further, are OIDs deeply copied into OID sets? In other words, if I add an OID into an OID set, and modify the original OID, will the OID in the OID set be modified too?

Another illustrating example is the sample GSS header file given in the RFC, which contains:

     /*
      * We have included the xom.h header file.  Verify that OM_uint32
      * is defined correctly.
      */
     #if sizeof(gss_uint32) != sizeof(OM_uint32)
     #error Incompatible definition of OM_uint32 from xom.h
     #endif

The C pre-processor does not know about the sizeof function, so it is treated as an identifier, which maps to 0. Thus, the expression does not check that the size of OM_uint32 is correct. It checks whether the expression 0 != 0 holds.

TBA: thread issues

TBA: multiple mechanisms in a GSS library

TBA: high-level design criticism.

TBA: no credential forwarding.

TBA: internationalization

TBA: dynamically generated OIDs and memory deallocation issue. I.e., should gss_import_name or gss_duplicate_name allocate memory and copy the OID provided, or simply copy the pointer? If the former, who would deallocate that memory? If the latter, the application may deallocate or modify the OID, which seem unwanted.

TBA: krb5: no way to access authorization-data

TBA: krb5: firewall/pre-IP: iakerb status?

TBA: krb5: single-DES only

TBA: the API may block, unusable in select() based servers. Especially if the servers contacted is decided by the, yet unauthenticated, remote client.

TBA: krb5: no support for GSS_C_PROT_READY_FLAG. We support it anyway, though.

TBA: krb5: gssapi-cfx differ from rfc 1964 in the reply token in that the latter require presence of sequence numbers whereas the former doesn't.

Finally we note that few free security applications uses GSS, perhaps the only major exception to this are Kerberos 5 implementations. While not substantial evidence, this do suggest that the GSS may not be the simplest solution available to solve actual problems, since otherwise more projects would have chosen to take advantage of the work that went into GSS instead of using another framework (or designing their own solution).

Our conclusion is that free software projects that are looking for a security framework should evaluate carefully whether GSS actually is the best solution before using it. In particular it is recommended to compare GSS with the Simple Authentication and Security Layer (SASL) framework, which in several situations provide the same feature as GSS does. The most compelling argument for SASL over GSS is, as its acronym suggest, Simple, whereas GSS is far from it.

However, that said, for free software projects that wants to support Kerberos 5, we do acknowledge that no other framework provides a more portable and interoperable interface into the Kerberos 5 system. If your project needs to use Kerberos 5 specifically, we do recommend you to use GSS instead of the Kerberos 5 implementation specific APIs.


Next: , Previous: Criticism of GSS, Up: Top

Appendix B Copying Information

B.1 GNU Free Documentation License

Version 1.3, 3 November 2008
     Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
     http://fsf.org/
     
     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.
  1. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

  2. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

    A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

    The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

    A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

    The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

    The “publisher” means any person or entity that distributes copies of the Document to the public.

    A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.

    The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

  3. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

  4. COPYING IN QUANTITY

    If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

  5. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
    4. Preserve all the copyright notices of the Document.
    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.
    8. Include an unaltered copy of this License.
    9. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
    13. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version.
    14. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section.
    15. Preserve any Warranty Disclaimers.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

    You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

  6. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.”

  7. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

  8. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

  9. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

    If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

  10. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

  11. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

  12. RELICENSING

    “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site.

    “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

    “Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document.

    An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

    The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

       Copyright (C)  year  your name.
       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.3
       or any later version published by the Free Software Foundation;
       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
       Texts.  A copy of the license is included in the section entitled ``GNU
       Free Documentation License''.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this:

         with the Invariant Sections being list their titles, with
         the Front-Cover Texts being list, and with the Back-Cover Texts
         being list.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

B.2 GNU General Public License

Version 3, 29 June 2007
     Copyright © 2007 Free Software Foundation, Inc. http://fsf.org/
     
     Everyone is permitted to copy and distribute verbatim copies of this
     license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for software and other kinds of works.

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

  1. Definitions.

    “This License” refers to version 3 of the GNU General Public License.

    “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

    “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

    To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

    A “covered work” means either the unmodified Program or a work based on the Program.

    To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

    To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

    An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

  2. Source Code.

    The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

    A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

    The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

    The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

    The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

    The Corresponding Source for a work in source code form is that same work.

  3. Basic Permissions.

    All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

    You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

    Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

  4. Protecting Users' Legal Rights From Anti-Circumvention Law.

    No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

    When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.

  5. Conveying Verbatim Copies.

    You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

    You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

  6. Conveying Modified Source Versions.

    You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

    1. The work must carry prominent notices stating that you modified it, and giving a relevant date.
    2. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
    3. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
    4. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.

    A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

  7. Conveying Non-Source Forms.

    You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

    1. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
    2. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
    3. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
    4. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
    5. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.

    A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

    A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

    “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

    If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

    The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

    Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

  8. Additional Terms.

    “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

    When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

    Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

    1. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
    2. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
    3. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
    4. Limiting the use for publicity purposes of names of licensors or authors of the material; or
    5. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
    6. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.

    All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

    If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

    Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

  9. Termination.

    You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

  10. Acceptance Not Required for Having Copies.

    You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

  11. Automatic Licensing of Downstream Recipients.

    Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

    An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

    You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

  12. Patents.

    A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.

    A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

    Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

    In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

    If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

    If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

    A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

    Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

  13. No Surrender of Others' Freedom.

    If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

  14. Use with the GNU Affero General Public License.

    Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

  15. Revised Versions of this License.

    The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

    Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

    If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

    Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

  16. Disclaimer of Warranty.

    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  17. Limitation of Liability.

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

  18. Interpretation of Sections 15 and 16.

    If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

     one line to give the program's name and a brief idea of what it does.
     Copyright (C) year name of author
     
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 3 of the License, or (at
     your option) any later version.
     
     This program is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.
     
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see http://www.gnu.org/licenses/.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:

     program Copyright (C) year name of author
     This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
     This is free software, and you are welcome to redistribute it
     under certain conditions; type ‘show c’ for details.

The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.

You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see http://www.gnu.org/licenses/.

The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.html.


Next: , Previous: Copying Information, Up: Top

Concept Index


Previous: Concept Index, Up: Top

API Index

gss-1.0.2/doc/Makefile.gdoc0000644000000000000000000005076111663554731012341 00000000000000# This file is automatically generated. DO NOT EDIT! -*- makefile -*- gdoc_TEXINFOS = gdoc_MANS = # ### asn1.c # gdoc_TEXINFOS += texi/asn1.c.texi texi/asn1.c.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # asn1.c: gss_encapsulate_token gdoc_TEXINFOS += texi/gss_encapsulate_token.texi texi/gss_encapsulate_token.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_encapsulate_token $< > $@ gdoc_MANS += man/gss_encapsulate_token.3 man/gss_encapsulate_token.3: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_encapsulate_token $< > $@ # asn1.c: gss_decapsulate_token gdoc_TEXINFOS += texi/gss_decapsulate_token.texi texi/gss_decapsulate_token.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_decapsulate_token $< > $@ gdoc_MANS += man/gss_decapsulate_token.3 man/gss_decapsulate_token.3: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_decapsulate_token $< > $@ # ### context.c # gdoc_TEXINFOS += texi/context.c.texi texi/context.c.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # context.c: gss_init_sec_context gdoc_TEXINFOS += texi/gss_init_sec_context.texi texi/gss_init_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_init_sec_context $< > $@ gdoc_MANS += man/gss_init_sec_context.3 man/gss_init_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_init_sec_context $< > $@ # context.c: gss_accept_sec_context gdoc_TEXINFOS += texi/gss_accept_sec_context.texi texi/gss_accept_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_accept_sec_context $< > $@ gdoc_MANS += man/gss_accept_sec_context.3 man/gss_accept_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_accept_sec_context $< > $@ # context.c: gss_delete_sec_context gdoc_TEXINFOS += texi/gss_delete_sec_context.texi texi/gss_delete_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_delete_sec_context $< > $@ gdoc_MANS += man/gss_delete_sec_context.3 man/gss_delete_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_delete_sec_context $< > $@ # context.c: gss_process_context_token gdoc_TEXINFOS += texi/gss_process_context_token.texi texi/gss_process_context_token.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_process_context_token $< > $@ gdoc_MANS += man/gss_process_context_token.3 man/gss_process_context_token.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_process_context_token $< > $@ # context.c: gss_context_time gdoc_TEXINFOS += texi/gss_context_time.texi texi/gss_context_time.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_context_time $< > $@ gdoc_MANS += man/gss_context_time.3 man/gss_context_time.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_context_time $< > $@ # context.c: gss_inquire_context gdoc_TEXINFOS += texi/gss_inquire_context.texi texi/gss_inquire_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_context $< > $@ gdoc_MANS += man/gss_inquire_context.3 man/gss_inquire_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_context $< > $@ # context.c: gss_wrap_size_limit gdoc_TEXINFOS += texi/gss_wrap_size_limit.texi texi/gss_wrap_size_limit.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_wrap_size_limit $< > $@ gdoc_MANS += man/gss_wrap_size_limit.3 man/gss_wrap_size_limit.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_wrap_size_limit $< > $@ # context.c: gss_export_sec_context gdoc_TEXINFOS += texi/gss_export_sec_context.texi texi/gss_export_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_export_sec_context $< > $@ gdoc_MANS += man/gss_export_sec_context.3 man/gss_export_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_export_sec_context $< > $@ # context.c: gss_import_sec_context gdoc_TEXINFOS += texi/gss_import_sec_context.texi texi/gss_import_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_import_sec_context $< > $@ gdoc_MANS += man/gss_import_sec_context.3 man/gss_import_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_import_sec_context $< > $@ # ### cred.c # gdoc_TEXINFOS += texi/cred.c.texi texi/cred.c.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # cred.c: gss_acquire_cred gdoc_TEXINFOS += texi/gss_acquire_cred.texi texi/gss_acquire_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_acquire_cred $< > $@ gdoc_MANS += man/gss_acquire_cred.3 man/gss_acquire_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_acquire_cred $< > $@ # cred.c: gss_add_cred gdoc_TEXINFOS += texi/gss_add_cred.texi texi/gss_add_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_add_cred $< > $@ gdoc_MANS += man/gss_add_cred.3 man/gss_add_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_add_cred $< > $@ # cred.c: gss_inquire_cred gdoc_TEXINFOS += texi/gss_inquire_cred.texi texi/gss_inquire_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_cred $< > $@ gdoc_MANS += man/gss_inquire_cred.3 man/gss_inquire_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_cred $< > $@ # cred.c: gss_inquire_cred_by_mech gdoc_TEXINFOS += texi/gss_inquire_cred_by_mech.texi texi/gss_inquire_cred_by_mech.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_cred_by_mech $< > $@ gdoc_MANS += man/gss_inquire_cred_by_mech.3 man/gss_inquire_cred_by_mech.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_cred_by_mech $< > $@ # cred.c: gss_release_cred gdoc_TEXINFOS += texi/gss_release_cred.texi texi/gss_release_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_cred $< > $@ gdoc_MANS += man/gss_release_cred.3 man/gss_release_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_cred $< > $@ # ### error.c # gdoc_TEXINFOS += texi/error.c.texi texi/error.c.texi: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # error.c: gss_display_status gdoc_TEXINFOS += texi/gss_display_status.texi texi/gss_display_status.texi: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_display_status $< > $@ gdoc_MANS += man/gss_display_status.3 man/gss_display_status.3: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_display_status $< > $@ # ### ext.c # gdoc_TEXINFOS += texi/ext.c.texi texi/ext.c.texi: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # ext.c: gss_userok gdoc_TEXINFOS += texi/gss_userok.texi texi/gss_userok.texi: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_userok $< > $@ gdoc_MANS += man/gss_userok.3 man/gss_userok.3: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_userok $< > $@ # ### meta.c # gdoc_TEXINFOS += texi/meta.c.texi texi/meta.c.texi: ../lib/meta.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # ### misc.c # gdoc_TEXINFOS += texi/misc.c.texi texi/misc.c.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # misc.c: gss_create_empty_oid_set gdoc_TEXINFOS += texi/gss_create_empty_oid_set.texi texi/gss_create_empty_oid_set.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_create_empty_oid_set $< > $@ gdoc_MANS += man/gss_create_empty_oid_set.3 man/gss_create_empty_oid_set.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_create_empty_oid_set $< > $@ # misc.c: gss_add_oid_set_member gdoc_TEXINFOS += texi/gss_add_oid_set_member.texi texi/gss_add_oid_set_member.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_add_oid_set_member $< > $@ gdoc_MANS += man/gss_add_oid_set_member.3 man/gss_add_oid_set_member.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_add_oid_set_member $< > $@ # misc.c: gss_test_oid_set_member gdoc_TEXINFOS += texi/gss_test_oid_set_member.texi texi/gss_test_oid_set_member.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_test_oid_set_member $< > $@ gdoc_MANS += man/gss_test_oid_set_member.3 man/gss_test_oid_set_member.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_test_oid_set_member $< > $@ # misc.c: gss_release_oid_set gdoc_TEXINFOS += texi/gss_release_oid_set.texi texi/gss_release_oid_set.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_oid_set $< > $@ gdoc_MANS += man/gss_release_oid_set.3 man/gss_release_oid_set.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_oid_set $< > $@ # misc.c: gss_indicate_mechs gdoc_TEXINFOS += texi/gss_indicate_mechs.texi texi/gss_indicate_mechs.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_indicate_mechs $< > $@ gdoc_MANS += man/gss_indicate_mechs.3 man/gss_indicate_mechs.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_indicate_mechs $< > $@ # misc.c: gss_release_buffer gdoc_TEXINFOS += texi/gss_release_buffer.texi texi/gss_release_buffer.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_buffer $< > $@ gdoc_MANS += man/gss_release_buffer.3 man/gss_release_buffer.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_buffer $< > $@ # ### msg.c # gdoc_TEXINFOS += texi/msg.c.texi texi/msg.c.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # msg.c: gss_get_mic gdoc_TEXINFOS += texi/gss_get_mic.texi texi/gss_get_mic.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_get_mic $< > $@ gdoc_MANS += man/gss_get_mic.3 man/gss_get_mic.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_get_mic $< > $@ # msg.c: gss_verify_mic gdoc_TEXINFOS += texi/gss_verify_mic.texi texi/gss_verify_mic.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_verify_mic $< > $@ gdoc_MANS += man/gss_verify_mic.3 man/gss_verify_mic.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_verify_mic $< > $@ # msg.c: gss_wrap gdoc_TEXINFOS += texi/gss_wrap.texi texi/gss_wrap.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_wrap $< > $@ gdoc_MANS += man/gss_wrap.3 man/gss_wrap.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_wrap $< > $@ # msg.c: gss_unwrap gdoc_TEXINFOS += texi/gss_unwrap.texi texi/gss_unwrap.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_unwrap $< > $@ gdoc_MANS += man/gss_unwrap.3 man/gss_unwrap.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_unwrap $< > $@ # ### name.c # gdoc_TEXINFOS += texi/name.c.texi texi/name.c.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # name.c: gss_import_name gdoc_TEXINFOS += texi/gss_import_name.texi texi/gss_import_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_import_name $< > $@ gdoc_MANS += man/gss_import_name.3 man/gss_import_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_import_name $< > $@ # name.c: gss_display_name gdoc_TEXINFOS += texi/gss_display_name.texi texi/gss_display_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_display_name $< > $@ gdoc_MANS += man/gss_display_name.3 man/gss_display_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_display_name $< > $@ # name.c: gss_compare_name gdoc_TEXINFOS += texi/gss_compare_name.texi texi/gss_compare_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_compare_name $< > $@ gdoc_MANS += man/gss_compare_name.3 man/gss_compare_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_compare_name $< > $@ # name.c: gss_release_name gdoc_TEXINFOS += texi/gss_release_name.texi texi/gss_release_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_name $< > $@ gdoc_MANS += man/gss_release_name.3 man/gss_release_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_name $< > $@ # name.c: gss_inquire_names_for_mech gdoc_TEXINFOS += texi/gss_inquire_names_for_mech.texi texi/gss_inquire_names_for_mech.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_names_for_mech $< > $@ gdoc_MANS += man/gss_inquire_names_for_mech.3 man/gss_inquire_names_for_mech.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_names_for_mech $< > $@ # name.c: gss_inquire_mechs_for_name gdoc_TEXINFOS += texi/gss_inquire_mechs_for_name.texi texi/gss_inquire_mechs_for_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_mechs_for_name $< > $@ gdoc_MANS += man/gss_inquire_mechs_for_name.3 man/gss_inquire_mechs_for_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_mechs_for_name $< > $@ # name.c: gss_export_name gdoc_TEXINFOS += texi/gss_export_name.texi texi/gss_export_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_export_name $< > $@ gdoc_MANS += man/gss_export_name.3 man/gss_export_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_export_name $< > $@ # name.c: gss_canonicalize_name gdoc_TEXINFOS += texi/gss_canonicalize_name.texi texi/gss_canonicalize_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_canonicalize_name $< > $@ gdoc_MANS += man/gss_canonicalize_name.3 man/gss_canonicalize_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_canonicalize_name $< > $@ # name.c: gss_duplicate_name gdoc_TEXINFOS += texi/gss_duplicate_name.texi texi/gss_duplicate_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_duplicate_name $< > $@ gdoc_MANS += man/gss_duplicate_name.3 man/gss_duplicate_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_duplicate_name $< > $@ # ### obsolete.c # gdoc_TEXINFOS += texi/obsolete.c.texi texi/obsolete.c.texi: ../lib/obsolete.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # ### oid.c # gdoc_TEXINFOS += texi/oid.c.texi texi/oid.c.texi: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # oid.c: gss_oid_equal gdoc_TEXINFOS += texi/gss_oid_equal.texi texi/gss_oid_equal.texi: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_oid_equal $< > $@ gdoc_MANS += man/gss_oid_equal.3 man/gss_oid_equal.3: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_oid_equal $< > $@ # ### saslname.c # gdoc_TEXINFOS += texi/saslname.c.texi texi/saslname.c.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # saslname.c: gss_inquire_saslname_for_mech gdoc_TEXINFOS += texi/gss_inquire_saslname_for_mech.texi texi/gss_inquire_saslname_for_mech.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_saslname_for_mech $< > $@ gdoc_MANS += man/gss_inquire_saslname_for_mech.3 man/gss_inquire_saslname_for_mech.3: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_saslname_for_mech $< > $@ # saslname.c: gss_inquire_mech_for_saslname gdoc_TEXINFOS += texi/gss_inquire_mech_for_saslname.texi texi/gss_inquire_mech_for_saslname.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_mech_for_saslname $< > $@ gdoc_MANS += man/gss_inquire_mech_for_saslname.3 man/gss_inquire_mech_for_saslname.3: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_mech_for_saslname $< > $@ # ### version.c # gdoc_TEXINFOS += texi/version.c.texi texi/version.c.texi: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # version.c: gss_check_version gdoc_TEXINFOS += texi/gss_check_version.texi texi/gss_check_version.texi: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_check_version $< > $@ gdoc_MANS += man/gss_check_version.3 man/gss_check_version.3: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_check_version $< > $@ gss-1.0.2/doc/stamp-vti0000644000000000000000000000014511663554742011626 00000000000000@set UPDATED 21 November 2011 @set UPDATED-MONTH November 2011 @set EDITION 1.0.2 @set VERSION 1.0.2 gss-1.0.2/doc/gss.pdf0000644000000000000000000167405111663555057011264 00000000000000%PDF-1.4 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 332 /Filter /FlateDecode >> stream xڍQN +8DaQݸ1d2?[Xae,J.D nդ&mW֒kҚN8H-7Tfw7oN1$J~Cq!" A-i;IRZ@?pYr܌!}%KxY'@"QdtZn,'MSLri%pd̋ endstream endobj 5 0 obj << /Type /Page /Contents 6 0 R /Resources 4 0 R /MediaBox [0 0 612 792] /Parent 9 0 R >> endobj 4 0 obj << /Font << /F75 7 0 R /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 12 0 obj << /Length 637 /Filter /FlateDecode >> stream x}TY0 ~_QJ4xbf Sxay贙,ZH؟ eRBQݭ׎Ϸ+pJ wh!"uZkqF VsYG}[M3H,1'q"rTi,8~Ÿ !3bF4 9:Ďzpʨ@۰ n7/\ O)WQG?0{VTd2bTq5֩"IGq?ij=J0&sEK&d"1euwv҅Pl8#v yƹ$Jiiv BnA=8 3=RKߘ5'%c޳bdo2 'qhoU3lmm@1yA$ TF<I a_ ?.NTM&Q @f} POWAS7qӂ> endobj 10 0 obj << /Font << /F55 8 0 R /F64 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 58 0 obj << /Length 2543 /Filter /FlateDecode >> stream xK۸:J!ē`nwN첦rIr%ڣFP>x4x*, m7FwxV?xVRT19[>)wśOR}q _~| T]q,QUZqכ?ſk+@7i,YQ$$CQbY,iwy׌?M((wBEGIxĘqI{P|sZw[%lX 5L U Colort0L00#>BEdH^- J/-QJaox<.Ho *QNQMm9W]vfDGs1qI|A>{_Qƭ~ xT!"1Ғ9̀H4?,$7uwj@!V/?[ycBv:+RYVUأjDM\O__DΛm7tdo(O /wxQ<.+D%iVRvv׻{whoq^ˉǭ f4$[\5oM;"B >6|ڜmK0$E[TMu* mBݡJƞJ:z?KD)] (}rb@A@ RJ ԳMcÖw%7K~ysCxj'p/QOEjvwkoO] I_W8tbdBLdCRdFUZ2 EL24LߛF6 ~)z~< !9tbB(C`H 񪘱#KsnH+ ,neí3>T T.5C+听VƏMiZ_|Q'rƿA3CRFUZrG%ֻ@b:UlhϥB2r فmC{(DM,?/wh؄،l 1" Vv;W#nQ}N@ BHB IAUi!$Bh#N݈0EJǏn&XfbY?1|Ĝb~Ā!).T;ӪnQSf|Z/yX$sZsrϵ`}\{G4#AF#!tחsj{{wuW~)6:(D~!)*1rFJ Z _}ӎv2`U"S8os8P98r(VooZcd0a$}Arb AA@Ĕ!Rk"dCګ'nJV Y{!}rbA B@L4z~SDdT"/t>BN@ !O?BBQv;U;LŒu6͘imU`ִ~JUoSиѠK څq,IiI+* =4=tMO(Sb}>VN@ +VVQ6Adf+vo "-Dh["ĝyO$A\\ dT gmc#W;D 񧝔ϟ7`AKREuZEn,K$1ꮟJCE|QEEszxznL(\Cc s_hHo} au>FN@ #FFQ#Zcw3Dus<>$"ԉz_?"a> ] X+E(e$^頎NE/zf^Ѯ)c -D:}e~ob*w< `\=^|Ozyrfx)4\ԠVoEV.T| yX0Ȇ PvtZ,ӂ&b0m{#4y ![ :1!%):Kw ' CNDZ> MlWa'.3l91̠KREuZ8}U*x׶QCjPx KT3rᝆL4ɽz_on# #,M{ .' tt.`I N H.qC9{sKdzc> ]M"xa#YDD.QqߊBrjcfM91Ġ -I!i+ߎcHPj P FS}(vG>iN@4uOЁ%)Ң: iA[のup:>`{ӭHJ_lU;H0Uh*+D ;X sgO#J/V <bEJTLŴ?)s#Asofܣ endstream endobj 57 0 obj << /Type /Page /Contents 58 0 R /Resources 56 0 R /MediaBox [0 0 612 792] /Parent 9 0 R /Annots [ 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R ] >> endobj 14 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [441.93 645.129 450 655.092] /A << /S /GoTo /D (1) >> >> endobj 15 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 626.569 450 636.266] /A << /S /GoTo /D (1) >> >> endobj 16 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 615.54 450 622.994] /A << /S /GoTo /D (1) >> >> endobj 17 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 602.389 450 609.844] /A << /S /GoTo /D (1) >> >> endobj 18 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 587.117 450 596.814] /A << /S /GoTo /D (2) >> >> endobj 19 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 573.967 450 583.664] /A << /S /GoTo /D (4) >> >> endobj 20 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 560.816 450 570.513] /A << /S /GoTo /D (4) >> >> endobj 21 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 547.665 450 557.241] /A << /S /GoTo /D (5) >> >> endobj 22 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 534.515 450 544.212] /A << /S /GoTo /D (5) >> >> endobj 23 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 523.485 450 531.061] /A << /S /GoTo /D (6) >> >> endobj 24 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [441.93 492.527 450 505.279] /A << /S /GoTo /D (7) >> >> endobj 25 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 478.878 450 486.454] /A << /S /GoTo /D (7) >> >> endobj 26 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 465.728 450 473.303] /A << /S /GoTo /D (7) >> >> endobj 27 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 452.577 450 460.153] /A << /S /GoTo /D (7) >> >> endobj 28 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 437.305 450 447.002] /A << /S /GoTo /D (8) >> >> endobj 29 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 424.154 450 433.851] /A << /S /GoTo /D (8) >> >> endobj 30 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [441.93 398.107 450 408.07] /A << /S /GoTo /D (9) >> >> endobj 31 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 379.547 450 389.244] /A << /S /GoTo /D (9) >> >> endobj 32 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 366.397 450 375.973] /A << /S /GoTo /D (9) >> >> endobj 33 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 353.246 450 362.943] /A << /S /GoTo /D (9) >> >> endobj 34 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 340.095 450 349.792] /A << /S /GoTo /D (9) >> >> endobj 35 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [444.545 326.945 450 336.642] /A << /S /GoTo /D (9) >> >> endobj 36 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 313.794 450 323.491] /A << /S /GoTo /D (10) >> >> endobj 37 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 300.643 450 310.34] /A << /S /GoTo /D (10) >> >> endobj 38 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 287.493 450 297.19] /A << /S /GoTo /D (10) >> >> endobj 39 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 276.463 450 284.039] /A << /S /GoTo /D (11) >> >> endobj 40 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 263.313 450 270.767] /A << /S /GoTo /D (11) >> >> endobj 41 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 250.162 450 257.738] /A << /S /GoTo /D (11) >> >> endobj 42 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 234.89 450 244.587] /A << /S /GoTo /D (11) >> >> endobj 43 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 223.86 450 231.315] /A << /S /GoTo /D (12) >> >> endobj 44 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 208.589 450 218.286] /A << /S /GoTo /D (13) >> >> endobj 45 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 195.438 450 205.135] /A << /S /GoTo /D (15) >> >> endobj 46 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 182.287 450 191.984] /A << /S /GoTo /D (15) >> >> endobj 47 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 171.258 450 178.834] /A << /S /GoTo /D (15) >> >> endobj 48 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 155.986 450 165.683] /A << /S /GoTo /D (18) >> >> endobj 49 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 142.835 450 152.532] /A << /S /GoTo /D (18) >> >> endobj 50 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 131.806 450 139.381] /A << /S /GoTo /D (24) >> >> endobj 51 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 116.534 450 126.11] /A << /S /GoTo /D (41) >> >> endobj 52 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 103.383 450 113.08] /A << /S /GoTo /D (45) >> >> endobj 53 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 92.354 450 99.929] /A << /S /GoTo /D (50) >> >> endobj 54 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 79.203 450 86.658] /A << /S /GoTo /D (55) >> >> endobj 59 0 obj << /D [57 0 R /XYZ 90 720 null] >> endobj 56 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F100 60 0 R /F63 61 0 R >> /ProcSet [ /PDF /Text ] >> endobj 91 0 obj << /Length 777 /Filter /FlateDecode >> stream x]o0+ <cڨ4Ukv5#4Bm Jҭ;!1 6)RB9NHE1 oF|H5/3t2zs!D@0X`r"fzo2 y}O)ifh&M>YbxBExΊi6bp|}mN.M:o.n"<ME&C6c ΡJmLёskx#tS戋>vؗTR$Ȥ٣ e )t%W,"F歼ˋ?[B^] v`8>Av;Y,`m !4PYxyv63P*#ꯛ cu9@ŕIJ& Rae0m+,'4eD:/vB"̏˴X}k9< I}`[9Vj"㏟cEX2]TY`mq9~ӬXed 1 7H?ԟv݁I42YW&N`2>8ī51k}"[[\=|S{ k4uxJ<=>$ekww3sϞaO)^hgefuOHAc'\RU iא\|ɤ-^Mp WqY-m$ ?8|WS{5ֆfr`_| endstream endobj 90 0 obj << /Type /Page /Contents 91 0 R /Resources 89 0 R /MediaBox [0 0 612 792] /Parent 9 0 R /Annots [ 55 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R ] >> endobj 55 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [433.861 710.037 450 720] /A << /S /GoTo /D (57) >> >> endobj 81 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [433.861 674.869 450 687.621] /A << /S /GoTo /D (58) >> >> endobj 82 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [433.861 642.491 450 655.243] /A << /S /GoTo /D (59) >> >> endobj 83 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [433.861 610.112 450 622.864] /A << /S /GoTo /D (60) >> >> endobj 84 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [433.861 577.734 450 590.486] /A << /S /GoTo /D (62) >> >> endobj 85 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 564.085 450 571.539] /A << /S /GoTo /D (62) >> >> endobj 86 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [439.091 550.934 450 558.51] /A << /S /GoTo /D (69) >> >> endobj 87 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [433.861 519.054 450 531.806] /A << /S /GoTo /D (81) >> >> endobj 88 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [433.861 489.465 450 499.427] /A << /S /GoTo /D (82) >> >> endobj 92 0 obj << /D [90 0 R /XYZ 90 720 null] >> endobj 89 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F100 60 0 R /F63 61 0 R >> /ProcSet [ /PDF /Text ] >> endobj 101 0 obj << /S /GoTo /D (Introduction) >> endobj 104 0 obj (Introduction) endobj 105 0 obj << /S /GoTo /D (Getting Started) >> endobj 108 0 obj (Getting Started) endobj 109 0 obj << /S /GoTo /D (Features) >> endobj 112 0 obj (Features) endobj 113 0 obj << /S /GoTo /D (GSS-API Overview) >> endobj 116 0 obj (GSS-API Overview) endobj 117 0 obj << /S /GoTo /D (Supported Platforms) >> endobj 120 0 obj (Supported Platforms) endobj 121 0 obj << /S /GoTo /D (Commercial Support) >> endobj 124 0 obj (Commercial Support) endobj 125 0 obj << /S /GoTo /D (Downloading and Installing) >> endobj 128 0 obj (Downloading and Installing) endobj 129 0 obj << /S /GoTo /D (Bug Reports) >> endobj 132 0 obj (Bug Reports) endobj 133 0 obj << /S /GoTo /D (Contributing) >> endobj 136 0 obj (Contributing) endobj 137 0 obj << /S /GoTo /D (Planned Features) >> endobj 140 0 obj (Planned Features) endobj 141 0 obj << /S /GoTo /D (Preparation) >> endobj 144 0 obj (Preparation) endobj 145 0 obj << /S /GoTo /D (Header) >> endobj 148 0 obj (Header) endobj 149 0 obj << /S /GoTo /D (Initialization) >> endobj 152 0 obj (Initialization) endobj 153 0 obj << /S /GoTo /D (Version Check) >> endobj 156 0 obj (Version Check) endobj 157 0 obj << /S /GoTo /D (Building the source) >> endobj 160 0 obj (Building the source) endobj 161 0 obj << /S /GoTo /D (Out of Memory handling) >> endobj 164 0 obj (Out of Memory handling) endobj 165 0 obj << /S /GoTo /D (Standard GSS API) >> endobj 168 0 obj (Standard GSS API) endobj 169 0 obj << /S /GoTo /D (Simple Data Types) >> endobj 172 0 obj (Simple Data Types) endobj 173 0 obj << /S /GoTo /D (9) >> endobj 175 0 obj (Integer types) endobj 176 0 obj << /S /GoTo /D (9) >> endobj 178 0 obj (String and similar data) endobj 179 0 obj << /S /GoTo /D (9) >> endobj 181 0 obj (Opaque data types) endobj 182 0 obj << /S /GoTo /D (9) >> endobj 184 0 obj (Character strings) endobj 185 0 obj << /S /GoTo /D (10) >> endobj 187 0 obj (Object Identifiers) endobj 188 0 obj << /S /GoTo /D (10) >> endobj 190 0 obj (Object Identifier Sets) endobj 191 0 obj << /S /GoTo /D (Complex Data Types) >> endobj 194 0 obj (Complex Data Types) endobj 195 0 obj << /S /GoTo /D (11) >> endobj 197 0 obj (Credentials) endobj 198 0 obj << /S /GoTo /D (11) >> endobj 200 0 obj (Contexts) endobj 201 0 obj << /S /GoTo /D (11) >> endobj 203 0 obj (Authentication tokens) endobj 204 0 obj << /S /GoTo /D (11) >> endobj 206 0 obj (Interprocess tokens) endobj 207 0 obj << /S /GoTo /D (12) >> endobj 209 0 obj (Names) endobj 210 0 obj << /S /GoTo /D (13) >> endobj 212 0 obj (Channel Bindings) endobj 213 0 obj << /S /GoTo /D (Optional Parameters) >> endobj 216 0 obj (Optional Parameters) endobj 217 0 obj << /S /GoTo /D (Error Handling) >> endobj 220 0 obj (Error Handling) endobj 221 0 obj << /S /GoTo /D (15) >> endobj 223 0 obj (GSS status codes) endobj 224 0 obj << /S /GoTo /D (18) >> endobj 226 0 obj (Mechanism-specific status codes) endobj 227 0 obj << /S /GoTo /D (Credential Management) >> endobj 230 0 obj (Credential Management) endobj 231 0 obj << /S /GoTo /D (Context-Level Routines) >> endobj 234 0 obj (Context-Level Routines) endobj 235 0 obj << /S /GoTo /D (Per-Message Routines) >> endobj 238 0 obj (Per-Message Routines) endobj 239 0 obj << /S /GoTo /D (Name Manipulation) >> endobj 242 0 obj (Name Manipulation) endobj 243 0 obj << /S /GoTo /D (Miscellaneous Routines) >> endobj 246 0 obj (Miscellaneous Routines) endobj 247 0 obj << /S /GoTo /D (SASL GS2 Routines) >> endobj 250 0 obj (SASL GS2 Routines) endobj 251 0 obj << /S /GoTo /D (Extended GSS API) >> endobj 254 0 obj (Extended GSS API) endobj 255 0 obj << /S /GoTo /D (Invoking gss) >> endobj 258 0 obj (Invoking gss) endobj 259 0 obj << /S /GoTo /D (Acknowledgements) >> endobj 262 0 obj (Acknowledgements) endobj 263 0 obj << /S /GoTo /D (Criticism of GSS) >> endobj 266 0 obj (Criticism of GSS) endobj 267 0 obj << /S /GoTo /D (Copying Information) >> endobj 270 0 obj (Copying Information) endobj 271 0 obj << /S /GoTo /D (GNU Free Documentation License) >> endobj 274 0 obj (GNU Free Documentation License) endobj 275 0 obj << /S /GoTo /D (GNU GPL) >> endobj 278 0 obj (GNU General Public License) endobj 279 0 obj << /S /GoTo /D (Concept Index) >> endobj 282 0 obj (Concept Index) endobj 283 0 obj << /S /GoTo /D (API Index) >> endobj 286 0 obj (API Index) endobj 290 0 obj << /Length 2303 /Filter /FlateDecode >> stream xڍXYs~_ᷥjG4oJLubo!DBf(R>(JCT%݈"WLpÇvwō~e&.'3s_Qvc}^{m4M2]$b zzӵ8}_S$y'{8;J 8τbq1b r|=G@I>Ir-`3LC+g--V%$ᨃM, 5kh9^dqݡБA|%Ρgk^x !_gL_y7%мcڪja L~J\9ᔽnj'Z|*5O4Yi9Ĥ(nDtDo^@ښw1nw[mUÝa/xe tFrNԣm iV$$p^ ƆIi=\adu'CdE-g_sĵ_@@920X@0Sp_]4vh)vl_xǫ%ewb)#tBR`-IVo#Պl @S΁Ljv r[COuԍrdܪi:a2z6hx t$q"$mcD)*Ie)Ra°O{qE怆< >iLCq f!& \w:7)B(Jtdiqu+z'MwwE@24B BIRaZdWYVeS0Fkʘ)ɯ_N6L02뺫\6u*.w9]ou~̝irSQ<)#͓pU&._QaTɂ"BvZ^ApOlwwb9ggږ;_?I5E]=Sv۽aX;JIfp ޒђ7Y1v-leq_$6FAb)F=e貫»,Zj)e)0ZIi@~VWUVC^f &OW(gF}6IIFS%Τag{&|@ȎFX'i>+jMAuʝ#aS ~i@{Qt:-6__$.ZW! `u anOƳY̌TL l:heR!yL/3=w>e %(*'vNPe/$fB88 YBW5Z3K8XV`:~q g ju,թF8 gU7kjWiwwRg$0뎵+)% vQ <n3n!皿b3QtC\zȣ58dپBeUVPEZf Af=밡&yt s=p1!r8a4-|_-E0rhKo wtaԮ6 $:`$x[z?Ɓ7l^%% 0ɡui+ #='3gg).X5nwHb9ת1*hF`w=Gɝۻvy鎌'XtJi%ʞ3G8]sm$T5fFXZo+Ϧ ߔ T+ (^j@^wQ 5O ;$!=e!^}74Ť!0i .ܾ-N1V#<1[Gov' .<TJj*[p, _2M?&n~UM 8TBGӓ^*9S#$ ?oQ+KAAҀ%@̃5Bt]D,)OLQ3S "'K'LHr2F+bkiFǩM4#ah(?,= endstream endobj 289 0 obj << /Type /Page /Contents 290 0 R /Resources 288 0 R /MediaBox [0 0 612 792] /Parent 9 0 R /Annots [ 287 0 R ] >> endobj 287 0 obj << /Type /Annot /Border [0 0 0] /Rect [257.364 444.301 457.816 454.301] /Subtype /Link /A << /S /URI /URI (http://docs.sun.com/db/doc/816-1331) >> >> endobj 62 0 obj << /D [289 0 R /XYZ 90 720 null] >> endobj 102 0 obj << /D [289 0 R /XYZ 90 720 null] >> endobj 106 0 obj << /D [289 0 R /XYZ 90 536.936 null] >> endobj 110 0 obj << /D [289 0 R /XYZ 90 352.1 null] >> endobj 114 0 obj << /D [289 0 R /XYZ 90 140.992 null] >> endobj 288 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 294 0 obj << /Length 3051 /Filter /FlateDecode >> stream xڭYKܶW-*$)r*vhS9>p9F&9|TVMh4Fv>](2>CN:~"P<_o_!we~nn_7ƍ ^ݸΏMwƾq=\j p›ni8 =`1xAd|@,s$iAUhC~⌭ʺ<278b9\As by(K_X 5DåIrmC)¯zEW^%qDO s9 ]>T,N߱б0㷴{̥c1DG0{樠~{_2naLݸIc97?]Zbr&@t7.!H*qYV@TDdЗ&4B4Y(g`&6t0/9.%U5,MvNRG\C:)JNgP5I;]^+. ő )$j8)_ %5 DBGEQ+ b9RHjGAvxv)T4Z5`qƞ"E̒fS>WiD!V )yr$qa/gh L2#Y\~l=4CC/WOFp| w2,] "EFWDle+nh| Ѷqk/`(2 _)' +aL)nl}ީcefi`i",o teSk?\a[,z?b/t&{<X祕ȞibaLr-PS՞D-PoH ,n~`-]]f A>/I t4.}!*s8fg͂r6y]+X٘f{zUN9O~JWKoӵE8TVN`o&qZԒg"064ҊiكC%!Dp͕Kd] 6%e3"~r|8ѪU$44IfEU3t\y/(.֊"#0)Gx} v/e\`g529X~-'Mh^Mxy5GZS} w+ؙͭ/5DvXr,^1YsP ƙrS\Kؿs[q ,zS@dUw_~v9~c"κ9SLex˘T!0Қ+Fs1}>`.gX)~h YibȒ 9SGSA|(4㥙91!LB%冊hK' H<7gɾaur5``p:&,rԚӖK.HJMWɭ{bFzzws]yeqh1A&29cٓ Ս'f!$L Z Ap_&Sj5zBcvui1mBs.z_:A0d]){ o:GFFY QFA"Gm|,G"_>yw+`ԿݲƜtXR._;c`v;r/&<i1jKM}@0LM,}C[}i%I 3jM/MϤG<"/L#ջ/U "~Ĥ7rX4=?ɢ|='i{[[pG$zNaI 8/\* oOlFj"GDCzFt_Ͱ_X}[lH|PhiJdd1]\nט`!>p\1ۃ@,_0!D$jCig0b #b`Y|Zqhm.c} Ad&Ƌ3DKI}ֆyY~5 I;5ɄXf?"9s.w RЋZ< |MJa $$g}Z^O/q$^H$BXYTH7%46bm^J 60 peŅD R2B\֖ϫWp}ۑ2գMLf]zFnEfufk=^TڇZ.Ea.R!ea"o#eG^OFQ^7<z:e>x[\~jo<'@o|BI'jy9'.\Quj<. Hu2.!VjEfK䍭kN0xUk,߹&$u h*\Is erV?P`)a%xľQ2BC=&$wtƥiZkn3/D;Cqlgh򱶭cdTY,rvGzoƣqo˂xio]+ѷ??G!yAE2s%{*th5Kr{TLVb uRA}Bv&dWS^>$vzėC>6n]5liBzQYm-"5+_D>0{_C?!i.LϒSkouK ˲s:mԣ3 UOܮEoa endstream endobj 293 0 obj << /Type /Page /Contents 294 0 R /Resources 292 0 R /MediaBox [0 0 612 792] /Parent 9 0 R >> endobj 63 0 obj << /D [293 0 R /XYZ 90 720 null] >> endobj 118 0 obj << /D [293 0 R /XYZ 90 169.694 null] >> endobj 292 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 297 0 obj << /Length 1301 /Filter /FlateDecode >> stream xX[S6~W1YkumnY:2$vI xHlȒ_'P;0D8>}"20xCly n/ΈĠ6|zW!# Lꦦ_S|0ƆQ^&#<9qر dFL;6v螝O# 9#¸s1%6sn`'1X/ ?9 8ZSR?Ŷ~8[} 15CDv'OՔ,Fy6;<4y38Gb[!z槺RT{ ;qhD*E@J<aq1W4R! p[G0X&ʘ\b4 5 <`jK<i67;/"ksts}e/90h-+ b"-\dOa"U0fAz:!@j(6 Î'04vxOmFR`CS=L9[RTjTZUI7*BSvK)A~jk^b FtOɵL,h+< HgEz#VbAZt;TFB#=h=\0fD;_D҂ΏiNw082ߋϒ 2UGp_/#!YDK!nlS{w*m8m)"YL[7#kd=Y('}T KnAEWk)AL8?LB`^ 8$\]LܤS?ӝ 9rָ[ W{ܤR HW D?Vy?DM.WcwC!nLPFRGgY~㟏89Ete/h w"rV{Vyɪu/l(wr@mRKaoG)Q/2ݼ3NjSm0!ۻlgM%)]y\CM6:^cyf]pX%0 Z_ݢ ꢮR6Irz/\~0^YK 瓯^;HJ Uy28`vP~duz$Z߯ރwq͌xcegdШqxv6U-BP,{?ZT2 K,xb<9i%> ʋ']^{piQl? 6Ff endstream endobj 296 0 obj << /Type /Page /Contents 297 0 R /Resources 295 0 R /MediaBox [0 0 612 792] /Parent 299 0 R >> endobj 298 0 obj << /D [296 0 R /XYZ 90 720 null] >> endobj 295 0 obj << /Font << /F55 8 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 304 0 obj << /Length 2032 /Filter /FlateDecode >> stream xڭX[۶~ϯ*פD]$6MEwC8\G$ph(XQsf\UE"UѼظ~ůo_H>pv݋^ɍ7\mWݕ߃9_QzƱ޵kc߭CxS1V]k-eŷwGZO~Q>'$bQfb&&nEAo7$o,Rf*Z9YYJZĴ6mI??T dIH"d ԇ p %pRȓ\>L#U%˝V"(e$t|u*TI3KunQonȜ:A2j[f}nbz{>":S7v}W"򏍌{2MHwܥEX$yn! tzzd\$J.L$ALdƻ- w7 廽ʿONjc j3no fۋ .I3g,ʼnBCX1X_"$ סNxi,Eej/t֑rL p$%xK#W)K;@O}\$0UmkK[gL{>mi9s Zd$X?T73;ްiiqsr07eH6h"'D[Si8I<7NA-H1kL>"ek8vcp{v?DZ ~y:X" @N%$RiڛJcGO'.<:*"@KMuIK1Sx)C/ksz覷>_p5jS_ztLsSV HtC707f4];LH^/{0q.}Szގ]f'[AJD/߆ kc@Ztnѧ J;S+gM6bR0/8Xe0Ї ^W\B ʇ,OO); &Fz`(v3$/=D,cZ O{?HMekOb?hܰ>ߙ7L &ˍtiS1̎ӗzDлg2;SYܗrnrˉ6|ks|hڜ7:S[wjKS0_uxP{);Dew ٻ/ZR^bB/ 7TBSeI>]@.9/X2ص+x^H y&0?I/ʤ3♏T4l&Zp-<]\,➡15ƻ ~N# ̛q" yBbىX!Obh9z=ȗeG~fMsUqx`PLy;f};+"Ϭf7{/Ckw̓x9þ{HTaj.Max k)lOoͩ.e82wp"&j?Q-4:W+dJ;qi5tscI!JKy5*Ո65­ BqX|{cz'8c gؠUrc,A&S1,?%RuA_ؖReZ~gh3f atJ<#g8 endstream endobj 303 0 obj << /Type /Page /Contents 304 0 R /Resources 302 0 R /MediaBox [0 0 612 792] /Parent 299 0 R /Annots [ 300 0 R 301 0 R ] >> endobj 300 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [231.03 334.689 390.818 345.598] /A << /S /GoTo /D (Bug Reports) >> >> endobj 301 0 obj << /Type /Annot /Border [0 0 0] /Rect [104.944 272.264 253.851 282.264] /Subtype /Link /A << /S /URI /URI (ftp://ftp.gnu.org/gnu/gss/) >> >> endobj 64 0 obj << /D [303 0 R /XYZ 90 720 null] >> endobj 122 0 obj << /D [303 0 R /XYZ 90 590.375 null] >> endobj 126 0 obj << /D [303 0 R /XYZ 90 323.024 null] >> endobj 302 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F64 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 310 0 obj << /Length 2645 /Filter /FlateDecode >> stream xڽk۸{~?8TQ^&WZ,^pLmR!9=ڄ6E8(tٝ^46 |xJ ߿K ",~6<~q7[_F7ևo5ƺkNy$=ļ/uS*M@ŚY6&ީ|4 0M|]_ŁJ54p Ni?{<#B{wSñ<<%A/ۊeQ` XAӈY "ȢYTA7N#۳`8~n(vQlǺ}c2]Kb_kLca+&#brX0z\)9DRuڽ\JJ)TٚT02ߐ58=*"4#!m!"P6tk@yuob1C!x>oƅ˅Ʊ*1L#a_U0VzUҾWi%_#yܱ(NXO®{5YgKk1   ]›Y 6gQBW2QV̯$5#]{F=]#;Jr8FGAb@osNv=q؃D6p*2 1d5SEF;bVNU9E\̵ t\x?UIv2&[r\9Af '3 "lj`8݁;E:Ls'anɰ\EV,'qO<ש3 KO|͋Os$F5 CU_!9q؜~u Gbu}ov#mn_1?0 =J@vz0/8+,%$!8°Ë C/IJD&够$,e/{ߝdWLiQXrɗq.^ѓ87eÊ"'@JCѣވjFW80tbyL`8XS\#(qkp?Mz=L a);֎->O[=SJ~v*Bdgݬ(cbw0$ ,ZߥXHqƶaxhkeH ߬vQur~~GalyũgƎ${NT+r.G.yHI>Hkz N ]c*H{~XWfӓDEMggWUϸ0%k׈mJ`$ o8s%xbhꑄ LvㅝF]kPsXl0 0Md V~9vXyw>FE^?jv % b/o_'T1@ ;+&*m[_gw40TZ*B:nn}ct̉GK<,{)-27vg4דM%TX36ORWn/dGRMΒq@}x!4~l(@@v#sqւ$ug ' $S?嵕*/ ^)Ӗ½M˘7PZb^(b31d6bq. #by/J7ȠX,e[QQH|_-p%o4=SAļm\j*c-iyPn! gAD`~JhUmu&*K1MedpK7'ϬK}=ͥ̆یn;$Nj'ܖmieTT\|d:G.A7<(]i. ]Krʐ<[NqטtڹŞB>ޗ( cvx%׋G..O_b|n|NRG;=JE<0;E,W 4 Oc\_?eS biDmPbD;(-t} &"D:LoZN0U^-c>ݙ?YkvǗKQ ^~X0@4yQ1H.L]"ؾV\u*348UGs4Fƕb+md5/dT\Pe!:s"qm <_OX].zk5!"%WlA6Re+^gKkL"BcH;ٟEWMASѬˋ?z]Fz]`/  endstream endobj 309 0 obj << /Type /Page /Contents 310 0 R /Resources 308 0 R /MediaBox [0 0 612 792] /Parent 299 0 R /Annots [ 305 0 R 311 0 R 306 0 R 312 0 R 307 0 R ] >> endobj 305 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [441.809 297.775 522 308.684] /A << /S /GoTo /D (Bug Reports) >> >> endobj 311 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [90 284.624 168.355 295.533] /A << /S /GoTo /D (Bug Reports) >> >> endobj 306 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [389.056 149.428 522 160.337] /A << /F (standards.pdf) /S /GoToR /D (top) >> >> endobj 312 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [90 136.277 149.782 147.186] /A << /F (standards.pdf) /S /GoToR /D (top) >> >> endobj 307 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [345.828 106.376 517.758 117.286] /A << /F (indent.pdf) /S /GoToR /D (top) >> >> endobj 65 0 obj << /D [309 0 R /XYZ 90 720 null] >> endobj 130 0 obj << /D [309 0 R /XYZ 90 637.715 null] >> endobj 134 0 obj << /D [309 0 R /XYZ 90 346.297 null] >> endobj 308 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F64 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 315 0 obj << /Length 1461 /Filter /FlateDecode >> stream xڭkoF{~/=c@QIڥ+.vm?%Dy)#o'?ﹹe9"*5;a EA&LXZwǾ/Ak<ξ$zd_xdST?pxu؃a 9hĕ&d䠙aWI3{Psę*=6%1ɕ_hR,N#? W,l-FTudwZ NgB6 UH9 əSEBAv hZ& s(xÇS'ߐe7E6hj>ydOgDbQ.qZΕ'Gzz"|ME %\+fJVi8 CqPl 8QwԔ> 0X6w*ٕ ԅ^:" S!_i[E-JTDmǞ%b=vܽ(oG"/Гc(FS{T*6z- ކfFX 8݆@kgt@=$g/!.BHiE@k|_QR)u Tjg{z,;VͽfhpRjC5 D2~JՉ~z8T$ٛigbAX(8&6\G3v& B̙E}W9ʭ`2(;1ć:ƂľTX2@ t)Vw! /qૻ[36linwߜg\6y+l'?㇞Ÿ6~QL8vuǂZٷTC@n1fGn%5~S7$ u6i,s)<[sGֲ쀂 !Ơ4 4 {Jԩ'.ׄR%M}csĢ`] ojl ]ғ6{SAa$XdbSr;)(Q5飯r62X2abqr9R>½^>{a}e> endobj 66 0 obj << /D [314 0 R /XYZ 90 720 null] >> endobj 138 0 obj << /D [314 0 R /XYZ 90 526.596 null] >> endobj 313 0 obj << /Font << /F55 8 0 R /F64 13 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 319 0 obj << /Length 2695 /Filter /FlateDecode >> stream xڝYێ}W 6^v7 cʼnA 8-%1CZZS7R VUNt򪩆})ߥ󿞪|d4mIGː-ܝ~ uK~KG:Q,~ Cl]^ V!>rN­H~ht%hxoǺ*ęVFp灏հ O9ҁ`0ӍӕVkTXђ ӝށFajH0)% Ҍ#?%] _+m_Y`=+O,/anp5Cd;"4} h馴\ -}R-'6^+ғK.`JvBUKE/\/iՐ7X c("!cQ;{T=ۮ=IYo5x:*.vb`:/=xg=wbQEr}وwO2VZS-^B&%lb4 *'8s ]4Lz|Ku4A6Q,TY2e)̤ O%!s|<ܤE 9!SѦmւh`:? YLzq + 6 Ff|ry4_N|o/ )z>@%/Dkis|a/,|K@_"K8?'IDUvmhW;g(D2eDUg/ctuR mKt+T,k:@:ٜvt.?(_К$8 Ҝ(XB}%yN -l:> {Y2&p6 gyY!!m7.n@Gn}}vB2qL]ԙ.RIT71q'2?/.ʖfOH2@^ g5?aIkdI) 0 e,j*NKNKyeE0_:lN>X>Cre|tLf3Ylkm;*Ahdܸ Z:vt_Jc%l;)@T[V@yWAd 8y/f+ҏuEz7&" r["e:=HYMdC.hbQ&NH5B$qɂ4(N]GŎA: W$&mK$st2KؾnqhIЙCS`m(_fLV.P9|(XS2iP,~,tUE*T4*C+'0bbe "R" N9/m[\c: cRIVKB?A^qySeO5C#7B-{wW?.BV*s Y _pgK!Cp&A-)?0,}_u\BR+2R_w] cKf bxc54rϮ}dT4q/FAa?sKF8tZ㷇#@Ȧu7T)|6n6;Qevz:U ߝ biZ endstream endobj 318 0 obj << /Type /Page /Contents 319 0 R /Resources 317 0 R /MediaBox [0 0 612 792] /Parent 299 0 R >> endobj 67 0 obj << /D [318 0 R /XYZ 90 720 null] >> endobj 142 0 obj << /D [318 0 R /XYZ 90 720 null] >> endobj 146 0 obj << /D [318 0 R /XYZ 90 571.736 null] >> endobj 150 0 obj << /D [318 0 R /XYZ 90 270.999 null] >> endobj 154 0 obj << /D [318 0 R /XYZ 90 125.907 null] >> endobj 317 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 322 0 obj << /Length 2541 /Filter /FlateDecode >> stream xڭY[oܸ~ϯpӇjVH]Ң@pv]l6Av<Ҍkc=7JE"s .|\E*5f'jƇ^2o ׳߼k/_~\ln_a(: COZ8d]6TmZ$}/Yv7^Vg 3*J BR$7=tm < h&YLl_mSWJ'Y߶Ι畎ac"ef8fuc_ Zy@; {2۰Peu<68,6(2\g_ ne7 ڕ)u-]Y7pލh{l6Wl@E{Es{?UTH]>s8|_}@؞A׎kրtdIE^t-z9mn mC4U M>|J;[1XpmNc e3P4;LyvlUJ|#y$ɕX70X7XMyȏlm@ LJ/ܲlqFt}Ugd!Ķ!dYuHd:)5c%%F%qtUtШ0 WK AefJ}lcgzS_Rl Pƞjw'q8}w?)Iy{'fjQK4gU[^ )yILUIn"1bh (>: lea4an{P n'q䅽/Հ2^W?l™֌`ei To F=Վm/dN}% vF-nGW38q9bO Uv8h,:\keA;J%wxkg@*ZNMR-w.`C@eB:ɡE44c|iv@ѠqŠvJ@վ8# xl)d 4 W eN*7z+ o0%ԟȡ$x!]cKP{^bA05wC ;,(vf: -4 SsװDQ1dHJ5g_3Ag[2Eb s;nN*{"#h$J{;}0z!ɋ{K' !'8̛(n _Sn3~ix]ǀ&YqEX îFÝ4@ ._R&,X&c7:Kfb Ac|m)O;$\誛NF%>zE+3(adID#>E* zCsk'h Lh 7;qs!s!vNOa&U" >v6Oh}jm}z5WEtp8cvG;5~-- ,(Y(MNŎ<A0yaKɀh6xxo#9cvVP)\ ɴL&pb)'n:Vt_#+W#v.ܴ )`L|4׀-9Cgݽ N@q]z@_}=*㟥*1ua6?b nE 5 ͹3@Q}p'֎ c#ƘF4~jy@" l9lBoБB%bx.=r}Y soU롶H1WMh~8}%fݿƀZqo?5&> ǰ z0~Ŭ{,"$‹ҥvO/3!絼> endobj 316 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [329.985 655.106 518.97 666.015] /A << /S /GoTo /D (Extended GSS API) >> >> endobj 68 0 obj << /D [321 0 R /XYZ 90 720 null] >> endobj 158 0 obj << /D [321 0 R /XYZ 90 507.485 null] >> endobj 162 0 obj << /D [321 0 R /XYZ 90 161.86 null] >> endobj 320 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 325 0 obj << /Length 2385 /Filter /FlateDecode >> stream xڭYBbw)ځ.($VҞĘ"e>;H=#kyof"j4 <㋀F~xd F+}7qPZލYxWsl\a.WQ{7v77L|rD^o/^GZ?SF\HL}HLWaB:+E, P,D~%)OU*<|%\㩴3L.C}:l~*ΙU견:+KU{m]=g슺jy4ozԩα5Wdx#V}oymjWT۳B?EnY vpx[ҝݓݳI2p=MF B-ݡ0cθG{.q2>VJ|$߭B Tx^m4ԱWmо#KSiz kV d-Eivg,&P S,4 k $3;?JP2Drv}S1}ALw6:]Ob&l;ۭZH}q{/-PE˿'r=xm&Sr<5eIt߲d~& X}ۮIϕ`uOo;۬9FŎA#F.WC .]=Y T8%驫[-J =z<R]k[B2 ^{_h7 h5oFݫ+Ҿ3QZ '%$ b"Ȇq6qNe5Hyf#pJ<4bR錫J(:1,ҡ 5AeZ"͑1"NKukuLvzZi6gYTN%{aTn5-±mZ93 c=8diaJ*$ȼ:BNl$CU lAGyxEuɗ:*0lp#!VՎ@䅚L Fr\1誳,fe@:vKie!DAjL[Ut)vc  *O,| Z~_~O^Mlu`ǥQۓ|D!rflzSVˮdE5P=[&s.lceu}2{{sRh8d@Km $ca[p8ٱɪo$^Fby+T[Yd `𺮞D>B)t`7[⅂ U*k0[L̘.qO w%8nEo `Iˇ@+*7/1׷4LU Ʉ9-U*$`=wr f[]C Lƍrxv| 5gzT=@J=ww\p5>44_=HE(P>ϝ#r(4t)GcYld}+ZH?JUԡ}FȽVqjͦ!g)\O/ɤ][WpfK(Qa}a.z. **'?Q9q`9Q_!*:¼drM}^H.oƯM8eʶqyMы;PgDCz}qR&Js3$!=Gϐihhڹ% GH:6)Mc`R_^kEt`mK R?iO9# 楈 uBIGB۬(G\4uL8!A u\ix1 , TmR>opPxrOLmknHσKeh><54%,wӚi+}iӂ<lӪ1Бh!^L>11-?P_!m}] oKS\2zANf<elE' mo,9gjb%}5hٰ3yL?:h endstream endobj 324 0 obj << /Type /Page /Contents 325 0 R /Resources 323 0 R /MediaBox [0 0 612 792] /Parent 326 0 R >> endobj 69 0 obj << /D [324 0 R /XYZ 90 720 null] >> endobj 166 0 obj << /D [324 0 R /XYZ 90 720 null] >> endobj 170 0 obj << /D [324 0 R /XYZ 90 660.357 null] >> endobj 323 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 330 0 obj << /Length 2527 /Filter /FlateDecode >> stream xڥ]o~ŢO`˓K+^E$0hjSwCj%YPXpf84ۥveSB$,vMÎ?y77o}Xiv7sR7G}Ͱx̢Qwjp}Mc1ШWx%Uͽ܁]ؓMHgN| 1>o42d* >jKL2۶>zur10]YR0djog6/ ^Ȋ-~FAxtk %}J h^E?Y:+zK1O(8#!M[Ɔ%'yQfBK4sҺR4 6̌#}؀ש:t b<+"έJVl͊PE~ԡƈgG C!jbCvC T+mKJ$V48+'O˻=v l Kzѐi_,H]ԋYk\]T]?3O#A)-6]]H2֧sCWE쭁0dǬ`Z~AkMk_ǞoaKǖ)ء!t讎 iR59Or^*"=1sA)Wb]Ld =C,xxO"8тgIe>@Qi0^bLl<qb 2} >=Pi}8O<CfӼX;R ki,|r╖j{PÍF/(}l]˿%6dnjC.Ԫ)GY_ RڼasKæ\*VaC q XB8t* M,d,i<9ѐ{uquLUiR:B DYdrw%\j:}?=6lFS>4^hjZ`XQ,8xd KΉ/afOT"= ߪUD"<:lW9MZ^Ė gM=q$%q'JW> rŐq\?4K!uFT{b=a5SuPPwILCC]]Gj0S6y̘+ upy@j[t'r'~)U뺋7Ϫ=N n$v~i@̼/=*-[]"㡝HjlJTآ .= C?AȧG,Uoj`99CI, OӊJ-y)`A `~peCM$NVMCPf`n0N 'U"7Od6]fmL̹,,V((C©wGQToԡۣ&5Mn>Ɔ endstream endobj 329 0 obj << /Type /Page /Contents 330 0 R /Resources 328 0 R /MediaBox [0 0 612 792] /Parent 326 0 R /Annots [ 327 0 R ] >> endobj 327 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [297.119 323.074 432.068 333.983] /A << /S /GoTo /D (Object Identifiers) >> >> endobj 70 0 obj << /D [329 0 R /XYZ 90 720 null] >> endobj 331 0 obj << /D [329 0 R /XYZ 90 685.766 null] >> endobj 192 0 obj << /D [329 0 R /XYZ 90 92.826 null] >> endobj 328 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 334 0 obj << /Length 2714 /Filter /FlateDecode >> stream xڝn}`rHn-)15P!w|}mx, ̙˙sHE.OЇ!"hzǃd6g;/ߥ靊"*i~?\{I_w{so g ÷: bEp/x3hOCGp} K9KCC ǽ:$2ċ $A\k/֑Ԟxᩳ=nok{ p u[D< d^k [F- /yK 4Wlo醽vC&{Fpi]ϐ[>-bsn ;ر&@g%v*@D{ف ( H6hh,܎P cz "ࡥZU5wE#y Qk?=o# mU_HMgOpeY+MA3eJ|W6l?590lB?>X)̲hи US=pjW+&$V7@^fo2])זup0wf±Ȩ&}eN߳]8BXu[׳vڮ$E dۊ;N8x+|㠺\HEz:bށhP(i<#9"9 t1~Lx~m] i@Us!:՘ oJ!n\o >n|\'`p7A WӁM W3(p[rTCưQ}!@rΗ>&3H0q\]­f!sVaU{qpt"+`qbhˇ-O6fB L)FTO{]@Ayb1*H",b o"]VKD$];@FYiu]i `a莆M*!K` =?>OO&*u=*ʦFGi@d:~}h6v `ub[%L(u~},#N⾄yΎug!Zb$Xx2PJJ-*d.["蠀:NH$xlBkwLRoNT|_nj@ w]qjIYso' ʊ,[1Plr& 'o8 5h} Lg>:9sêxgT?JHC.HĀhb= Lr7{nª 55Fn/oQr:Cr)8ӕс++bY!atmS.Y#uظj)2/jj#_w+:+F抮n}QRR 4.N;ܴHΓ`m)AWxffҜ :lDzuq!.aR"L^z?'q; $ഞD?lَ2AGcc ŤǦ4W7^`(f1aҝJ}gw_RaK.uq,mZqԋXc7Ӂ YFE# &#5+l ,< 1.EL -"scpKl- EȥZرX(Nv^PZ/i:wi! )k 9n6匤鹦TnK["M ؖwm?,C>=qἕNĩ׈"lrZqv;3S޹^ŎMfx24'IKy tS W+yMGrm1eE׀ >lx ɻ14 Uf/iб ~h{+!@Y>R 4$햶s %mv+EvD4ZtM)|}#L<XV_Խk^#q+"ۊbqeFq.]䖋iDqm7Tdh#_IQ endstream endobj 333 0 obj << /Type /Page /Contents 334 0 R /Resources 332 0 R /MediaBox [0 0 612 792] /Parent 326 0 R >> endobj 71 0 obj << /D [333 0 R /XYZ 90 720 null] >> endobj 332 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 337 0 obj << /Length 3049 /Filter /FlateDecode >> stream xڝkܶš_Hon.C0x]%Zi3/RҮڅ]]UZϯw#mqQCpJۺ4*718B 5 s8DԀT7_,*80 J x}M+!4q[qN*֩A\X6;{vֱȅ"ν}=--t8 )˪~zVq+ ˃/"  H`л0ˆ}FP,.ەeBZ7>А8T ,"X3}_{7p(2-AEɚqdz82g=Aѝ/M*ruŒ='ݳQf f3^辺Pxߺ᥇[ @jhN]: ؎~d:l_C}r  uŔ-K}=񸪌~M/s7TEСF u"B G21` ܏,86Nw\BU嶋-8]?JO_*yB)P0JH_QcjٕBr,eFkpp u2Mfɍ%󩖄~Řԕ@{^4 DZӵG_]%EdߔԤ쫏S7 <'0!ъ2B%TdHNGT$E YGxp43p &AIDǂGIGҕс*act7r$=vՅLۚ2dN`bavTN8)8 $8,{UL/"{{46e\ʵTeTUPQ:Uw\ :JJe1%A7Wٶ!1X S#P ,v2/k7zAC8sE,2h`,`%7ї-M4\Mjz/w;HW2 dUJi;I r0dv[L .J(|ɌT!Żɸt\lb/_B;n][Tq(!,U{ 86Rh 鲺*]ApӾzD @ '-2 awۮɶ<1dEiR'OKR*Gh?GY9A9 92MWw=]ݭnv>QBqVgj^,+ ( . ؾ0L]U258j >S,Tq^V7Um4oery*@ϸ ~d{+r$*[]BM N)~0_3f9\Z¸Qƅ*Ww)0l/S5~ STI*YE.ym' `j@3nM|o}s$/=[iQP> 3uظxw+mM\"5e nH9WHx f5j(CfyQȢ ƃ L;ΒQiP6 endstream endobj 336 0 obj << /Type /Page /Contents 337 0 R /Resources 335 0 R /MediaBox [0 0 612 792] /Parent 326 0 R >> endobj 72 0 obj << /D [336 0 R /XYZ 90 720 null] >> endobj 335 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F64 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 340 0 obj << /Length 3312 /Filter /FlateDecode >> stream xڝZY~ׯXxټ,ٰHXp9=3s ԑ_Ljc>L`Uu_7/+ E<9jZ݁gq8^`j]i;$1ex;g> rV]z+jx&tfF n,8 ENxQF;yt$!Z7;9lj\pZ_Mx΋ZV8Q&J1 KF(p :a-oՄ(hDIQ`+ Z!`LҘ85"f{r~4޶߷TWdIpFf04)8POvO|V oz4P騴|ab2&y D/0b/L\~7[EOqlZaV+ˇ 't0[dH+b)|y쪟TeȺ&=j"rLBZ 4͗L^u۫ 8W̧\Jx&'ƇgX7N8)=2"C=B" åN~ 457ܽ{Z!%K)\I=m+NaT˫kὍy擻SQɘH1@$}ADhZ񗖇IVL*'$~c:)߄t0-䴗%޺⥦|g /gƺ l4PxumnҕnzK Bq?)y{| 1C/[(puINtx. .xH':$AW_n{s^x '̞T5i(`[8,:=h٭>LSv^zTFR LĊ G;p9 e΢C>.Ƌ>7x}dv+%k`M M$2W$/,# ΐm mye$31k.=L~&3b0݀F>zKh`#Y9ƠS%ކX Ro@X9|E⧨)x 1![C$(_+Be]Gu>w-&P((<[\1)[QY[K1ɹR[4O@wfmt+0&z8DqbzbRՌ fH{U:&?R~t#cP"`z✯o$4Å'qio>( 9p Y?OXnn'H* FG P'}"Ay뀾kdrKRE%U$GD%*Ъ7i옪UqtpSt0oӠ]L3s| '_jb8r* p(tFP~vy<2UCF ʻ`M)G&8rt_ĜT`notv̙ Lm֣Rd/qļ =U˭Bx}4ՔZhfO{@@7$u#j7f/s},RTQ `r0.nF^~2wB@S5ݠ(ZK OӰX!KrfDr(sTʴ)BBeBZuFz4!OQXFb;|͎D;drb 2Lő"*?6l2q/A `{Tj-:((8NmIGQ3FbTTyxjvs4˿ c~ER$aWm,/F8r}p iŪ#A>E(ė r\UuN? ,M[5@Q@*34 ɔd5/qԁ8dֺ+Ԏ%,=N%L^H;㴊5W^w6T*c7zH0(Ngq+iܬ$i g?ެZ?RJ>3?5f.|Vޖ] $0/7U{ف4l|rFɶP<3eFoʑ[QV*GqTf| 0 ?TW4oࢭd‚ڑ*_ZƠ*Gq8ˆOȣ/q4?zI3\Eɤ0, JUq  Z`ΧK+{XJ\7X gz0p_^5o7j}EŽ oN6"ƶwۑpb O8`SeDHu8Um/UW0H/H3e̱6VP4#|;x/nl0LYUMei8Dܾ_xw{$ w˦,|C;hz8V%g-_Paӥ3>m~eɢ ʾL wͫlMU ҽFHp,SZ$AC!H';x;aWTIq&=<^l Bm_IwOaءRԎ͗ 6|~G'tPtK3"oه xc̫xa>cv{m<Z,mo\}'Rs0ѹq @zZ <#qa?f{˗Upշ |T*[5 7r ⼪[@ m](-d&s`2iŞp#:-*56DmɊv i].X I+ٯpPw(U-ԫf~kkd::'nMwj gz~u曰O塍'Y̸}vȽnLWT<Gu nI}OYQ@Y1}p7=4 aT_qՆwO T̵璩5_: endstream endobj 339 0 obj << /Type /Page /Contents 340 0 R /Resources 338 0 R /MediaBox [0 0 612 792] /Parent 326 0 R >> endobj 73 0 obj << /D [339 0 R /XYZ 90 720 null] >> endobj 338 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 343 0 obj << /Length 2100 /Filter /FlateDecode >> stream xڭX_o8sx-Ҵ36M2Y.VGIv) چ/:/lE- |t>,לּ]u f[2c5K_*ԲwלQDeBO) Q]C9g]$|Elb7pj\@kVukW<^Ey."͓4 ` 2A?sI|`fuE9DTbĆ RDV1)ʪ:Ⱥ1c91u97,:-yq;#tq#-.Z>Hl%ހ=; ?ڸ`o9ck"wH#GrmF1 g>\Ɣ((L"Kd<{ϡw~#"t̋ZoO\>qqXj((fw9$UGi. ;E8eg04\[n6ض%D w3`᠍d7J؀G؞zvHȲz}y:C3Kt=3R*6iPgE.  ,,+P#$:#Քi'#χtr=8] T4ӡ"ʺnsmsQG$ g@r8rYFٮ-{f IhfmN to@x6eQqU; i|9%wn}|;&*=dž1p|XwbOϒt994|tb<Ƽp8qW)x2%FEzuC*m덹iW]zO334]۶i. T/R0@<4xP#@UAVuJ#{P@suZV'T^!ڄ)3z^xhNˆwjPC0l4cPODJeQ ؃I欚`/;'55]SoAÈ[zQ5Ю@ץycXpBXQ,x T]A-(pj5Gb')o>jmDa u8ڕXkLRzph^>X@NocAz["l:C^ˈ׋rp5FOӃlr0ɲ,ޢ=r[7mD$(ptٰwuNMsk6ZS%7WlU5;ζ^M ! "D}V)%iB՗$= ч endstream endobj 342 0 obj << /Type /Page /Contents 343 0 R /Resources 341 0 R /MediaBox [0 0 612 792] /Parent 326 0 R >> endobj 344 0 obj << /D [342 0 R /XYZ 90 720 null] >> endobj 341 0 obj << /Font << /F55 8 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 347 0 obj << /Length 2689 /Filter /FlateDecode >> stream xڵZ[~G*${u{ӛ7^|[Fb0s3%>JbBEm"XA&QX}pp1 `򽆄.|8,5F&S6="##3Άq4(t5[\ؗvRvT@y(kcc=H5U0Y%(Rҗ#B: :V^^C`ā]k8H%e̢#[k!Nf_v@: H dO%s}7z4R)@ǿ Q܁7@ҟ0TR4mYx? n @%L!cl'իfB+-1*%(⩙1 ˃N.)YB,rNdYR0F6J~ͲjxZmSsYՆ5b<lͤ-"sH$0IJB#$8c7HH}iC; xu!Mb ȄQ,DK2Dp`;V"fW"䙮CvA9UeYb6or@h$綤Ћyi;كc[I)#&a7O[JxhȤjeU>rwZvyray֦sXv.'.Z@ց𛲈_0~*%LbR1\YtWQ4i! (3y ׺c,ČdĂ<8$DK&QpX$gѨbq )\y))iD |R0P) 9d*鼾PQ E]4) 'Jf,a# ndpuIJT!gPd~\?ϡRHu]]]Y\`(Vx˫׼TZA*z\bwx^04 \ebiXXG긱#sAՄ#y]Tck͜ nGP*[fs}G4P@XԷ`qgEB[YOJ;BSg' )+S[n'x5& `:0¼{ lEҒՋړv$3l.1m3`t%2+wOf-≇廷}Yw"Z2a)Ǻ뭽4I*]7&nsSy icu])qm'y ui֣ m*ji o-冥me֪fѴ/_ޔpÒb-ypMB k<7rg&q!\SﴂcO@6Ar6ܲv^ڔۥ+P1`0Zs:Pv.k7JQюsN[oW(psuja3A`qcͣsg1 {=|cIH1x?*=0pZ|}33!L|y]g,KAjNJ aċveӋs8.v hu=)Q,]cŷp0ct[Wwln +CDž_ endstream endobj 346 0 obj << /Type /Page /Contents 347 0 R /Resources 345 0 R /MediaBox [0 0 612 792] /Parent 348 0 R >> endobj 74 0 obj << /D [346 0 R /XYZ 90 720 null] >> endobj 214 0 obj << /D [346 0 R /XYZ 90 574.496 null] >> endobj 218 0 obj << /D [346 0 R /XYZ 90 308.149 null] >> endobj 345 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F64 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 351 0 obj << /Length 1488 /Filter /FlateDecode >> stream xڭXYs6~[P%&ˌV2stڎ TxI'?XPui8v29FNo`䅽ѫ /AޓL.~~= FΈ復$aMVbS˲os-K<ߚBLiz6Mܷ]#_/dw(}< {[fXCeQ}Δlk=wXfZZ_I,V~ƳA ,d,#YM9G .7 h|u堽òz%á-+s=3kfzlS'nJU( jQ7fo) = !54`A>T눲+nTe|n=}y#_<YJhAr,%-v4}pk*!&Y:̓yJYE¡O@a>`(ŧQ Sա@ Xҗ,`[ ]fj YUK.0Y h%4C~4r)K dcU5EuKP`PiK͵MW`+Q*aT'7X ϳ=k-"|pIixqMRX0w+PN^ m>0{_aswM5pRfgmn0)TAu4v{# .3D۷&HFg|6ont'ub: DDDYk+tn|˭7yck"BCXvO)< gjQ\SEQ27G[Dve),d$C,Rl؊Ɋ@n Y_P-_]|JJcFg|rA3G :4. Dnb ~.>|z`$a䅪嗺o6iγz̪*zM]4O^M2ޞɶg uI<1bNl}xk_QEr _11i%ѷW7Uss{t]"r endstream endobj 350 0 obj << /Type /Page /Contents 351 0 R /Resources 349 0 R /MediaBox [0 0 612 792] /Parent 348 0 R >> endobj 352 0 obj << /D [350 0 R /XYZ 90 720 null] >> endobj 349 0 obj << /Font << /F55 8 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 355 0 obj << /Length 2110 /Filter /FlateDecode >> stream xڭXYs6~JU#.[ymͬ7fS*-V(RG~}/ST%3C_7F&gmN0NW\͟G4XbJn Ӗ꟟]wL#4C6>F?o\|2m{lk2uw)yzVl64=Mˬp/\ͷnײ$Hkdoyc0!c}-4pLsl>."$<YUL@;~qR&7]Q,:e\:o%0)0JAwQ)V$.ߧg8KԪCsE);ʪD ӬPpK|m=nZo~ }Y\X[0 D, U9f,!=ήYFzz"*/|aqw3w~=P}U`K&qI.AJEY|rv?-WR*êÃB+/z/[$#O: bFle=dqMu>}yn R}!-ϰMy)/EHvYHT2K;N;mz1ȴ7no1_ ̆Bka-*O4QWS1|{.]de)OAyEaǻYUƩũ*I1gCjL X.b*f m ,d 4Ի2m?T#<"s͢AvqT^o9J2U|J[ueGruy}6VAP^:y.: s6{\n_5I"3SaPTe1ݠLOp.}' ȁDB г{dr q!ġ? 2'0б<)2U(hTF"h\fKuV8r[4;^Wa1?ѭ_q;4.,aHn5N*qي_i!G\lYE퍮[n{%Y^:(&@Z=38.J;sTUqZP"P A5A Cv q:Cpܠ `&2!QƟ' %*8Vf2 ;4 / _! Y!d]7 v۟Cc՛i;&Dnp; }B,{2xGyV VN7ne7_W!eo؞|AKM_Ta#Z̄OMfھ*Ҷov=uA> endobj 356 0 obj << /D [354 0 R /XYZ 90 720 null] >> endobj 353 0 obj << /Font << /F55 8 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 359 0 obj << /Length 2052 /Filter /FlateDecode >> stream xڥXs4_GgKO;> (Rzv. 탵jV)U !*+W&u~E0ct{uVך}תiL'B}[sj԰clONo)j*f{D$~Tm\ Zm*vHE]OxruBequXiw`ZM k 5ĉtXM7qr- x +tS>j3۴|ox@<ХȢ^cjzKF yGeA񤯧y^"J%=^g9g$ jrV8W~.3 wuAn_>~/X x`70dD״[SApP_?꾁k.085{ R:7pOSD}q&}3G3K:ؠn'7Y{p!i/aj962:Gfѓib:~4zQ`RP/+Us2E RmRƾ ;!Ƣψ JKr%Y@6i0'eJX]#)dex q D%C,☬ 'e q3jJ)|nz=5qMU,8#J-zYl]3Uȧ8O_ct;:D^C Qfo'g`A2ToW~L ͱ5عlXqG>'p> endobj 75 0 obj << /D [358 0 R /XYZ 90 720 null] >> endobj 228 0 obj << /D [358 0 R /XYZ 90 282.503 null] >> endobj 357 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 362 0 obj << /Length 4077 /Filter /FlateDecode >> stream xڭْ]_7e"sɓ,ɺ,nl ""b^@OĀzKDJ43}|y6Rf^rhqFy ߾zYR/WBJ9Y(wM[Պ˟noBsvËn-373via2c͸KTƥ]~ߧn!b\Jh\l/L;1{ S36CȹΔ)|XVf#2o45lyY+D;d:JBɿ|[6~w/ *Z r!N7޼?F`F}mX7n(ޮ+,"i*9pP xv2]K8qRFrn5&!5n_9cg&~C. 3)UX2#Alͬ\3 K>|;& X΋I:yS}moI*jv x"8d?9zr3r 0WFvM-WŧhiGj\4t B6xwR$H8H!Ru1* )\THr=mPNF)ό}c* \`q)iyjX8`@5z#-xA)@+ 'X/jk9xmn&\D)όP"x) )=Z& ST,Jyv-P^4Dplo3KRA3c@*{4f>FNq-LU<clɞI&8&yrgI ]&@?M~˱(1~$1 ,w(l$~ ea.jh2}l?Km3H)gM"{Ȍ|U>| g7@"B}yv^,_W@*Q|xαx\s3 Ĝr6c`Qu*7膛3=i&M|i ]@w93n& 2ڠ`?|%ˆ[KPey7qTl_q (qr\P24 yjTX*Jc2 YVur$RFF <:9yO,sAn*Qwq?@ p!+o[|[jzhyCuWEȁ1H;Fy) 3_hXF`Bsjq\J3RR@)Pƥ(o~۷ X`zĀ0*=I>V L[?nH+H+A2dr8GT۲i6CZb!.sbX IԈ38%4'M0B߁h=olp] Jm5 C_ q*͗rbǪlp_#Ĕ!}w]yx>kn ٸ*I&2DVW{\Kf a)FR#$ya&A]HQ}7 /' G  4Ħ8^ߟq߷v4'h8"DVO66z4h!?n؀,KaWX HJя`qD_1dc,] uI<qNdNIj9bO~'% v"F:ʘy%d$=߾xA?aA'oHqTī`TWK宄"h\Ɖ (@ X! IAօ69A`Tb(%0C-$gBch|-3,XWbx=YFq-Apڐ-`/u 2Un8udT7L?}!ԟR/ԯ^谠s0F%0">s('֩ RYY4) g\?QQ"|6 Ϡ@\ٞR)ұpUk5BLB#ṯ:*|QEPNО }V 6b)DRM/*Լ~H(''d.r~FgoAd"Mb3NSǨ*1Emv׵zԯ+G3!(;IFfnGr>U`XdJ`@"=V+sj gUUP`gtW>>;/:фԢG0>0"|(ޗp23GQS=< =p*OT +',`#SXoSI-N%E:@j;KV;F fzD]w{Y=Wf˩  ,f"aLRzwE񹬛PGștTl+2"4Nt(1 77#B]Ӌ^-N#QF'fm /!/EV #."_T_}Eqƞ1vב;F-Uj9">*2 2**~u6Tk2 tzfcSg{wE8<1|^fN'ѹL<īߐ6bAȘԞG, `ik#7mQ6zq05Q`*qѮ{ 5^/w#%lwJR;U6ܯ¤Nn'(ږeZIp|7D娡]5ǀ&Vod4T1tMДWew!+b7';9k^z@(E$ olҝ?-Is,x#\L]Jbi UG  ή*a[|. AuwLIvBZS2i(hUbBLcTk:\⽳vI$3agj*:@$8n W'؆"g1f$5)0J 'ӞBh~) d;ncFGn]/$شiwwvq.0Y؉u*IlKŦ擠Ůs qۀ[6Ntfs6G;@v"n,|ӄ *7Mp%m|bBVS5nC}G (A5w)ʤ; W?mMKLMǻIP 15`}kSWY:Y/~3':Yrx'p-DQ ҀJݵ=N~uI†yqyCWc .jm6'p`H-@Y6C@H[[X<ʆ+ \%^ъ*Q1T"2-%Ӣ C,DVa{<tF_i!e .> cCJH> endobj 363 0 obj << /D [361 0 R /XYZ 90 720 null] >> endobj 364 0 obj << /D [361 0 R /XYZ 90 680.02 null] >> endobj 360 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 370 0 obj << /Length 3689 /Filter /FlateDecode >> stream xڭ[r6SRމ^%Ndkwgwڎ蘻:U)q+/ 0cNv/_~vy?u3,|{+5aiR&['?O}6u !⛋jzSgynnǫW)O/~ǫHʯ`ɘMD[0! H;**¨ivYVUiQ 6]o8͢X \7Pj^YdE,c*ŌM#Ve@3&eN@堢bNʹ.E+"J ˌ>} ~i|G,`9I ;oEUbFL$F6,̑~5H'LD$WFl9yBn㞸&ҞcUԯ1r-]/%$E\F`&Pܭ/)bLWU. ʢ閄U,y]Ô=~?ʵ-ٶ\<5hh"am$$U֊iUDRVV$\3ͶE, ‚ glׁ}ЫfWY K\=҂eUУ}xTg\}p3aiS*LoK`4U=Uu'u ͋+i7emE=0m[ܯc ]kJM&h3I5J/1Uc 3|Seα9TS"Ov)RXk n\X1 Or@8'@Gb +>E ۿ>|)N >:Ƙ!&j.'ʺD0~'8 ߃kxBt`VMW [5VU 5h>FS$!lw],JYlFy"``~Q`Zz0߼|y߈/wy'Z&{ut)6lO )nDQFѦc7E"Z$9nD(j,\0=QjgCQD/ aeQkђ$ Ϸj͙$uj %gRA. ˑ-Jց ^LCx嗋 !7餇:0l#E9,2w#CK/rY̰q[[_a!ZsyH(ai5JVyدhl44f-Z.zyAsD:-^aTE9W`uz4Hqh.ghTFuQ;hFJpx:ȑ"R\wvPY1A tACq0cRmQzA:9V R,Jc̈i+q,|EZt.B&R<B>6/z8Rtyns'C@C/o5>y[?@p_ŮAmU!R c%zjrE`~oFռI7րkIH >p`4ze*R&|!)Fy] =e_  3?ەZp(5W;zӾ%(!~Mg:yF¥؃{Ns?9\̓G Qw!t~%a[N,z{W!UC4Q;5eMd^UuPmK˨5&7 _sj[BrU~^@ h(0I]XMbMfW{uC2_CeE!epAAcGRtio pHQhTX`ud aO]D!K~x%t<7AK)x%k&PXss"\Ƌ OvZ9?0fبi'隤6E|06,Ƣ&lIg4%rF$R@8^O'x{i1CFf]=XJKQl{B/(&5_XO$t֦QqP'[[0 Fޖk:U߃[o1mn[oV:/fmVGt9  Pfh)Q懶:}?L8_čy;*a:Mfc@Dub6=uT_S:+ՀkMiD'M.1i{xw^gE/i/U۟+zzpHIqz Nw@gW&miS<.z X/p|`,[ \.T.jɻ@m$ heOwiyx>i{t1@y~C0|y{Fs/o{W8j!rdVot \ݻ\s0lIfN1 9s祁&DNl%~`&aZy&`ș9,"SXsd#@Eۅݕc>'![u8*V.ȑ;~C#5% 8 endstream endobj 369 0 obj << /Type /Page /Contents 370 0 R /Resources 368 0 R /MediaBox [0 0 612 792] /Parent 348 0 R >> endobj 371 0 obj << /D [369 0 R /XYZ 90 720 null] >> endobj 372 0 obj << /D [369 0 R /XYZ 90 303.32 null] >> endobj 368 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 375 0 obj << /Length 3911 /Filter /FlateDecode >> stream xڭ[[sܶ~j&7hqIR<лfo!_Wqe8w TtX^~_p^0oo_Gc"\fCvjZ]6˛:orãnn뫕4BWmKHM̧t] F"Iu$据|]L(T8Z/ZđG?sP տ&ij%jHTe9QQ&Ui6#&]:T~.ci"H)#)桊ڝaΈQ~dR˘.<ۀzOvpTsD"EGi< ˕QF,?rj%X4Lumy.v;!)MeNUV^|b%EŠ8J~<žuνClΏ5|}*@$Ys]EWywNW[{!MJX̙id:Ll$_^J-3hŏ7ڼR{,uop90>" |4DqʧgFF'ϊP,B4"I$ N:DƊYH %q:$>͛2+Vxr V8 :g 3j%A?;ATca3PRM|('tاRQe1s  |gb 5$ZNic1Iׁy ՆoX}e-~iGc.Y6w<wo*Yͯ<^"e-ݚbGsӕ1l[Ww^\?ho-%wPT4!]fi~(@'}m?(aw9xđ-XV4^ MIȑ0nzrHsu6rHyrCl]w_xdfW9a~;E-#K6SHm2;)*`&K"6ix:G55̠..c+:N-r1C4bLz!{7VR+XlYPZU<ڵ`eB*rG,0xz<ƜelI<6 1}ict[8fE}bNmp㋼iGd1 ZrAy'o7=3c s OLe 9Tl3 /n $eYـd27=O&(餘cgد2C%4Y2J`1'O=@[XV²`Y7WL'~g2pvé>)h_S0"g- gV6jGƌ>dv2rإ1ȕpesgX;2uPM/+=ZLѴPi: *Z!M[,w #!VʽO{b+ X*%7U/#5comYA1]O+yWv<[iiUPٸp./?; -YM2Xg?~90g:"@AY=B{z6 fq:=*+uki=B(u Ef<uFwZZ|{QúD1nG 'sQ QH1Y 6YR|TvQe^N嚐CZǪb[)X |+8o-%FN`}*2nGpeG;Hu6Ϫfxy0%;B32]2esk-Z T6mS^n,+ ^)4i;AGb5 a"'LM ӓJHyٺ>qh:>)82Q¹`@w"|}y\$()e :jpGE||(k^O?Ƽٚ[nCI5%]fOppê_NOFd)s1|w@$i'4$T} 2(juƂv$TYŐa҂w"bT h;P?F>:`-P&0 3j`SΑU>B^*jDKTz@MD: [i- LA|a.^p fP`⑌Mq6XvO 6iW {y(Y]9U˰׍qFhtL/sN ~cHq$u-į7],.IoTc\5/>eữɤôlvwН!k8tI{ULϞϓl1 I(P l@9E!Ns3X4=[ugPn/ʻ<J4M_hH u_&$1C=b -*Ů/:xw uxXsl8&ZwZi pS|> GӧkS7!G w31|4N}mX7y_]zxУ(_wآN&pO{:O;{ HÊĊˣ_J<BGݔXd5>2pa%xEAa= }c{!"# ^Sy wN][qwx鼱>]+Ɠ虯d T70g7D ,6}{&Y%Od/D{.OkBqj[5#8SUMCks"Ê:\EHy80|K'"0xgP J@1ΑQqG(=*Xj*쀞/a21j m!U4 Io/gdMeO(|yVCYbП@6R˔T{!P++Ls6J19upwگB[*&Tڛ0&M&Bg&A'(+%ۦfB:LPgQXU8TY8 5:k5TkBwAu& }G=NQS',_/׷wi xt"ozUDžg*1.3t̆^APpWҥZ ynrbȾ OJ>CU5+!b+L|_jcrE|4G95Rg2WoeșVji^9JRŊa1Ô]AQ 栧1E,9&]2$oc٩8}mZˌm_mdL84 %[OC]:cq,o( / Na|emU0BXjZ>fMC?R \TF֑sSUw&233P$Ҭ}yH~f/DC-M endstream endobj 374 0 obj << /Type /Page /Contents 375 0 R /Resources 373 0 R /MediaBox [0 0 612 792] /Parent 377 0 R >> endobj 376 0 obj << /D [374 0 R /XYZ 90 720 null] >> endobj 373 0 obj << /Font << /F55 8 0 R /F59 366 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 380 0 obj << /Length 3727 /Filter /FlateDecode >> stream xڭ[o6?:@~J\b_פ;Bk+p򣒽oCɢ"ZHp8 >c6̤ E3>0/!D&H!)yƄ3<%y5I`[$턝)L$㎝KRL|w ^9+*7+ S)+rY#tϜU:sn`M!jXf&"jTfDͅp}e`hqฏ P3Jf\"YRp fr 6>j+)t%ܥ$/qѺ1zG>ﰯ7fUź,JXbU|_n70P/y]CUyC&Y]E>q/1ߔzz23vJ)7ӗ}^nr-*hߗy5lm46xbBתz'cAMS/bc}(7Ԍ BvEd vcʰ*h$VdgC~ Ray9HF:.0. Lp?g܂/V|=g.L9m~LRp:$:lJ2E(re(`G~S F#)I?V]<:&zp@1%cgEJi3cDR}(IdȌSR)S,!ߴ6 /<3ڂmt*g@HW2sK&m l$iUQF8B13Bs c6\;v+jd5v9(g^jG.ӆ ~,i'9.:s5LCP&%3T,!yZ ^)gLڔSEƙ&MCSS),,v!ؼM/{L("I1\)9lRB)PGP&ؔDC 4,^0p@hq?"&~?z)dbfqy #6L%[,~2Vq [vO o0_2߇\o*d㟃Ov 1ؤ62PE}Z ʛ*&[](&PSe{}hHaEmpU/Pw_'FԏEg=n9HH&R$Ԩ$u[—%f@©c _ [mu]h[r)>(m')6Ē8 [iM8|WO>z</vΨZpܐaNRJ7)tR6{r怰`!D_;ypkh ew8 i}EV:Np*:?OCA«T!|Bc~kHQ!bncҶB4 u\ccfК6Lj>,sEzˎ0n/(q꼢-X7* `\ƞY<>L (^sBNA?PΙ K52: _ӂvn,;3eCK| ©3/)FJ6D }GrN^o/ocd2ԙL (Tϳ:DxaXӰp}T.L%NWq '!h `-!8NB*]o?]|Mrz&b }bGj8r1IB]qg~CD"\%G aN] hK%Oϓt"\y&fdޑ'5x +DKS2 Oz^|*9w֡1eTUMB&Mhv.C.A|^l6~Dwf]] ?L,l$?T{z1[㙩֐cG٠÷>rQ[mqjٱ{Cн!eYzu1Y#=;ۜnamZ< +aq17NфW@PLB8Fm U~wL!im+ldf/ tPIg㳂4<}ى0t"0 !B Љ'4/9mS,7娻>3$5c Kt$yVdt%$roŗ]A#Ց7"*3tDz$)7~<;+:7%Mv(>xB>7x7x a/vn}Ju qnkM  K62 x1YLx"ޅgq0|>o25$:R}ɑ,B\*ĵ~Z^SD *nJW2%yйL8޽y:Hw BW* 5N4X*Í!͓pMÛ_^J P,c'*5]G}'3 ߏ %0{wHi 0PWX-N:DqVy0&ZN( Zsp]=!cvj}"DArw?-Ly :H8xfRL%/>x/]go.?\~qiTax(5-ȕgϱ"_=>GEmbpSAj+Fm6jKS-O+FTWn Hhzܷwq?ȏe~xu2 ^U))nm``rv{x!Fe~hڣ "?8Ȍj7$!;/wAc+|:0ԷxR%mf~{hUPx+K}eO8 endstream endobj 379 0 obj << /Type /Page /Contents 380 0 R /Resources 378 0 R /MediaBox [0 0 612 792] /Parent 377 0 R >> endobj 381 0 obj << /D [379 0 R /XYZ 90 720 null] >> endobj 378 0 obj << /Font << /F55 8 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 384 0 obj << /Length 3372 /Filter /FlateDecode >> stream x[[o7~ϯУ_n"w@[<jf~Hx|5]tQP94x9SLOūu aD-Uh,S"O5wOqLGR3E'^ fZo\`_(9-7J`; *s{Ƕ[XϬ r3P8js_xK0 QmibҩRv% RZ NFHk)ġ%sr'lZ_՛f[w,}Vb/aΫ*xLcfVՖa]q)HTtl?P"[.̠o `KMצ:odqu?6:G-7s$E/(.-NEQ1u/J0E[~ۆQ{g-uyx8\3d }>VY7[=EpE6Ys M> K|!Q)-aQWqUXq`HI%CguB7 )u +C ZWV,./ <^] @?K#%<_a;4W90/9H{""3lҋLJcޫcNC 7jueB׳t|_M$qѐַd+z9gH USpH*ՐcR=j*@e\㤦V\5{U2D+=Qh݁*^Hf[{c:qHgp$"0"rhW#5]^ a!5)u@iQV|܌7i]Mu&nVfxIUaK^FE&e5Î@hj`|`^%aQM(CDVQλ\z p޴go%YVWZ })nj}}jz<Ζ3lfN?]6#9o tV:mO~5' 7# ;7q)cIDmUrfjC. *(<QhF&jͪ,7KlKMu]75KFd/$Đ{67ifVD!7:=J.LUO5d |6c40MGO@yR'xAs I}-< ɊAJ9J<&.ո̉%F|(piȨHXYvz?ݻ&id`]3nsGk(̽U*@-t;KzS((s$4SiZdi4jy]*M7u,,&GLu$;2l$#!:1v8 Z ϦCDٍMto- Xߎh %|UD. T( Gh(v^-G)!ՄmҪ: Evjđ{<ʀmEpwQh3|ثtR?/dk}@:2%هN?pvyl/m+o*6L sVٜsYy&l6gT((43= 󃎤N= &' d]~=` mEpmIC%fZ*=B5Ⱦ@/QayoW%:=0y1/eh6uPM|IJ^\|"t7[~&NgBE[`.# 9FKq3Ʊ@wJDr#goh{.O_'itr Qed(Q+D/|C;(C}P)7PI᭙uHQoYb )ѺszieXmuJݡVs ø@=68ŕ􏜪Jd/ M)@4tzG[hW QE5ՔVr0[Ya_Nࣧ 5>ԉlxtZw[ǷOaS.xCl~Awn?HE 6נYyzgKUױcNDa(JU[_ԚfxO=PMY6 Uܢ9 okd[:pb?Ǵ:jW|Ԯ:z{Sds&|b; ysOUº`GiQZ7RbZʍ;,|~sO-x>\g* ˳^\v!wGqGպj4^FWx)8,8/ȦI:|i7DzN1 `tFy&w4k54cEsp۸.4@cmwVz_xImLc;g7luQ0p.i>%-2 rn*XɡʗN}:t 5XJ*)MgfO_fN[ G7))>ă&uܼ?Egw[4< ͔8Ñ=ǎafdpڝc%T]R>5}l+O+Ǭ}p`뒫\SPX+26_nHY]z"0:J7 )d5]^(j;(D)Wbz6k# ԄY0UczB:X} @`MT#*pZh{@ElϷv3z 7_CGN>zh){=tϻ4pEHk@WPx}|}x s\X\{d=׾[r|/>!sCT].)H_ Bj]S ^P nR> endobj 385 0 obj << /D [383 0 R /XYZ 90 720 null] >> endobj 386 0 obj << /D [383 0 R /XYZ 90 681.185 null] >> endobj 387 0 obj << /D [383 0 R /XYZ 90 257.849 null] >> endobj 382 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 390 0 obj << /Length 2842 /Filter /FlateDecode >> stream xZ_oHr4GͦYI/j+J%yOp$klM?p[`-qfHIOR'Y:RL|*~B׿a&N3'~u>ek!$2jɹcnbb\*R\mU s1鸟/Mn2+;mT6Ic5\L(8$p8 C!ZLԆe"/.9sqy1;'Ȣ`&Go.M.=Jnٯ۷).>oD1qPj|yx23F*e%TGp |oRL5-)- pvVil[HBz[.e.3_-TpMVLH_HVeQ} Y-5 J$6#Qtp\HqW-*O3;Cp_ԂXr}γ=Ŧ?H뼨HeL4l*|pWz^,ƌФyY.vNs[EKdBĊ-5lvsK0oǶg}GjKr8i@Kk|޶7(4AᎶq2| 4IlH)v"j]SmEX&)H$WŲțb3c9d@znM,'0:uBƁ&xY}œ[,Z^KWn7底ShmVIw05VXY0-!wˌ{I @<++eH-l&2p5V庪o({7؞,ܐ LМ.ӸjHlxvKʳN~*9TpH-dfIX{ fb&~<9&-YwFh[Hb̓-(֑h 73sY\\xW,lt2ƾ{LY)x;]%%ȮUkV-ZnP,ZqrAHYQ1;HfށȠ$`QA"oî6D Wsy*P1æeni(>HeX&6bԝ/&W uGe}]z$u)P 'z K2 >| 3ßNCG.?#_+>Yd}Ƶێ{s1ܱ,d0{1Y(2!"9C-7murMq1G kA2-S@Īv<d0ẋ\rhNn{X6vN A)|'ZYN?kzKl:b endstream endobj 389 0 obj << /Type /Page /Contents 390 0 R /Resources 388 0 R /MediaBox [0 0 612 792] /Parent 377 0 R >> endobj 76 0 obj << /D [389 0 R /XYZ 90 720 null] >> endobj 391 0 obj << /D [389 0 R /XYZ 90 357.006 null] >> endobj 232 0 obj << /D [389 0 R /XYZ 90 165.836 null] >> endobj 388 0 obj << /Font << /F55 8 0 R /F59 366 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 394 0 obj << /Length 3452 /Filter /FlateDecode >> stream xڭr}BT'Bp>mԝN~Le-$=)l ~&cN$vؼn|O?ca 6:;{JM%)Mnu|뼜΄t&Jnlʥ_?j:4jݿ}kq+H$U>Gr)"ݖ 9p0zyXz^bj&݋CYf;Bgz-"~܃fRّeYIA rSlf>z}!>MX2dEs.PWl<e~Ԙ}B)@qHZ;'{֟l?u)Rr )9rQx_]sŻ2V0^r95f] F6gr/n-2­ "3Yw\ɏg?DMl00;,%83QmL$zr>|2TCU[VJBFjv:l+d*Xx0 *ja\o~ajEr.%d&FR*Ron~m-7 %9(vT#[(QEM.թ5cz(GЈ^%In%mTmm oH$'@ٕC d(kviύA|U&Rhu ̂Y@ 0tZ聯cHJ/ET])kFKPPr@أvϫOXKdH9QBWuTT# =5Ij0*&Ԩλ[M8dXumJ5)&%kp12;Eߖ 68H}Fy=o;v@RAJɈr #x5A!6AqyeN$Xf=3-/_hAQ$_hS9_,? *oGH*/H ؊2Ĉ*f}!J=D$* 8(# %VYΠH.m OMAB(T}]ۇXD8z3Xφ{̼C=_h]2Oko3R`3SXOߠTf@b 2M ؙ`}u5ӟ-62cT@P3ulQ@7jX`#>ݚp ,10Kn ԛ=į;PlvFhbR(τ2~Qh[JA3d=BPAj6 cze-ӯe "֏%,kp~ oD7fDkvYh@A sneƍ1LRyTMEH1Λt\T>=3I(Q",z Brn4Tʘ[X2Z_  fG9k(h%Si,h&~-}SQ_I:08X9cN>r1pB@bv^`!e/[7`zgwĀ(G"[WaqAi rp{ST E 3\]D3>V]SB%T>뛈^!HcE?NPr槏>^] e-"U,,dav#s_8^b;d:SZ'W+c,7(v* EV>.s|tU3v*rOkO 88*`3~28nWT39aQ0a0)]1=JU%]hT v1>.>~@-v( a AeM9Hh ;wҋ[@1I (Q"38a4jq3`~KΤFbA .xXȓC JC29?}4e|.v'j-! ZM=bS9̜ʕc`PF1ZX#iqU(YvjfބCL`PIrHES1CTQ;cT8\}qh͛H$ĭnHn )7pwWPl0w0ۡsP=3]QR;$>&wQG٤.vLvrK1& u^s aUڜp7%G@e1b hsMhVǙ= ݰ|Kq_ԳMVV" RIVCX(<嶙78M,= <=e!;tcm9_(=ss # _Z3RxWb` NvevP=+/wsK( im7-Xa_@.q+ endstream endobj 393 0 obj << /Type /Page /Contents 394 0 R /Resources 392 0 R /MediaBox [0 0 612 792] /Parent 377 0 R >> endobj 395 0 obj << /D [393 0 R /XYZ 90 720 null] >> endobj 396 0 obj << /D [393 0 R /XYZ 90 472.319 null] >> endobj 392 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 399 0 obj << /Length 3554 /Filter /FlateDecode >> stream xڭZmo6PN|(lC[$jm+ɛ3Je;`rDq3/%Y̌Rqb*q~ƍ~%9G#~wi:I\$]ߍ^~<6gsT>?kFW]Y͒__]q/2dv7ίީr4**|:JBvL? Ɖ*+h~IfKRxpzST*i,EFNJL-юڎ{Zs~[L':0C,G) )#"Gf橣0 K+}' M%!heN :cmd[d1/l32R@FCQL2ʆ}4R}xQuu\LJNu;NLw,z= [g0z< U\\Hga d^zt--EED|~N p.CFw5 'DgJLh4Gr]=9gWp NΖiۦP(Ǡ^ci#@ hx|Y.Mc|Ͳڲ_x3MqWRBtjx_^_e:{tVҙYQu"T&U@QIYr8|ݥ{J Vq|ngn'π_5=EkN+5֘~&<ꪵN&! *䑕WBB: 0rt^ .6"c@ Nit٢;3)&B˖;,F4FE]*;Ł2Bi芑X+*O \ޮk1`t0{]2KL Wmո5>دk}m- 3yM?--,/.ߞ>gi!Xg0`3W|F^%G-BT-W5jjU>Kdx]ﮩ:;%P"x.\K^s P0 ծ]C !5D$~O@o6P% ܗ4:^!bk7z^ ewZWѠACX?Vs0T"Fq sDt ޜSYa4MA̍;9Tf̸,yL~^w!*aP>!΂d)V'VisP߬P'\9`]ߒGEDŽLJ,";͖'71OA21krjz%Իκ3Ἧp^hI* #-TI_f"Cqa^qĐCx"rEՎPZhLA:R0 cKb\۠n s#~eF+B@RBdGwFg&TFh۩,0|e"id!ߖ#-NT&H4GW:*ޛQ:.J%0XEE~䆴qR*\8 )z3g3lDL3l5S/>+Pn!pVH֡%,+R/R]r/YMWh,L!I^DL#g1ʐ%E'B\H374ŧW oOUQ $CќJ{ <Rf'C.vml[{s : I(o\mf}4nRc2oP͸1@rSc뎩 //N o_^_\x>cf<g ?/"|y~mҾKj-־tLT!ɒC)ZP& .E 0M8wq4L 4LB1 - Fך¸ .\pCC=q/ 7]WK'\&x`wwn"Zeha bV/"WҧuBu;%G-Os Kӹ+C}pa1fX'G*MI.O}L=DN$<#P!nK6j"QX.T,&H">C_njߟU%18i2\|tc\vn_Ŵ#[?NXݭ~v"r:(iIZsu :%]J Qgԫ\ᬩ>~ȓ}/& =N/Holq\N{%,DC*^)xɿ 8(&T:$P >l9WO70pF[= S itW!L+[,J<4jCt5{fY\V),o<U>Bɛ77o(:5O"8۬31fe76> endobj 400 0 obj << /D [398 0 R /XYZ 90 720 null] >> endobj 397 0 obj << /Font << /F55 8 0 R /F59 366 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 403 0 obj << /Length 2038 /Filter /FlateDecode >> stream xڭYmoF_H@/-ב2m!b+Q*I% ofIS.w (cGF,6g4揃8:c ggTj(qԱjX>[F&|}~I#>#zp{SWdRny`%]Fu/J& k}̙&T>9:F^OPO`hhq"-3Vs'8]ʂ)#ɣtTy(-V(n``AjrqKd-/~esUAUBrƉf&EKRkt sXL8(kr,@psi &pRE?(#s-` >[8nB#Ź ~pbeKw-0hҒҪnظn|u];XV=آ,h[(2Vi~> endobj 404 0 obj << /D [402 0 R /XYZ 90 720 null] >> endobj 401 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F64 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 408 0 obj << /Length 3543 /Filter /FlateDecode >> stream xڵ[ms6_/'(_͗ع8(7i;Z-IJRqsv$ʔVdAX˳ D8GN)M/xFԸ}Bq0|o&/2f$8 <~l<[7yuvoε6MeՌz|@oΥ2?y݋ɖ72#¥М lՙ㦘fMQ`&=\dԀԨ_Z~RN0dSـtfs8r9RL:Ë1'a.{?qa8Ȫ21@]bvR5{4%~SfhV9=E)@.-%vxƭ?EvZZfx,]Be.ke>QY>$yA;jnF+ـkj;;Ό'zz!XFSB`bni];mꟓU9wFiІPI}4[,}0 d%$]ĩ,_Mgֆ Nw۵v!j=s`O'nxqOid,Ei=(ӣJ4>qyO۷I{@*[ %a@/*[-S߈s.j_E)3Ub8vk,*_|.<MC%♦͕[|.$~Hq4XNWh#bM;Sdb4x6bO&q*Ǔ_PWd uK-nͤ&9+o//^#|cAAHے@oh)r. h<L{%9x׷RIq* ԣō0}c:hHY%}iC3sg"-;%2llEI0v62 #c;c@``<:i`"N,23MA|  LiI> om1nGV%?sثk7(FTZ0_!lA~.^W.xE\5.KHjDWASp@/'j Sbf9(ÿGL/e8Y{|2D80HPZϩfW{)YIA$աνt#p1y^$R: }jOA`恿*6[gvU7y6ð}xl *M=?T5N}OOk*|XۤM#`5?z`\O6gfTXz5%aڌugI\ڣD8 C($߾\鋙0Y 9tg2.aGqθ1_YpCH> y21U}W;AhH׶WC慐0Ukks$vK9,pf!T8V x#ݪr,8m=j:=DzI˫#x /Lt6x[DOS tg4LC{4q%tũ ϥiR;*fgD{4,Lh:X]{ab=ĠI[OUhSƭizar%X 3BOU;)"O3m֬ӌi>E2:+,KuRy@{l`Y$>Y-s:m=!+ A6aYaXqwBk&1,sHB? ez|wT?;X `OiGաb/[FmoWmWzu:+NOjSW3z7wu˦9ÄLVa%C%0B,`E I" d1wbMYxv6[z 78]1uL~^yvx~d^\΋i}2Ŭ9Ț#Tߴ)ƻ i,|quA|0*j}s{?sJ\a|h/n3ť aYԝY`՛蠣 dBv;xR.ϼO;Xe6]uo`S x frއ _!H`7CqYL-xpIYuo"*)Rk.[%CSI'hV^ endstream endobj 407 0 obj << /Type /Page /Contents 408 0 R /Resources 406 0 R /MediaBox [0 0 612 792] /Parent 405 0 R >> endobj 409 0 obj << /D [407 0 R /XYZ 90 720 null] >> endobj 406 0 obj << /Font << /F55 8 0 R /F64 13 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 412 0 obj << /Length 1413 /Filter /FlateDecode >> stream xXKSH+t\SܼPlsJRjeɑdyHA h|uÏx "Pco8f{q~|@\AG#! ΅Q|&˙= ħ䯃Ѥ[PLZ!ʰD!^sD@h|8::kB2UЩȊnPRArgf?Si۩꠸*k]V΂ UUr*ԇ8p8,dG̪MПCmqȺVem[E@p7]PB(92>zKpA\íj۩oiú|:SYZo+Q6~#urZr@cv /2@ߦRxabaΫ _-)S1HPs`@z%gKwۋIc. (ؑPA^``HNJ$ 7rcGOxx?6\9!:ܩy!Xǵ9/L ZeRc 3Yˠ(9,s 5gcQ4.43VIed;;& +^MzB`N*GBU !cNT$| ,f{BU09ғQI>(ld"cS#8Jwj"L^ 7 VyOz6A endstream endobj 411 0 obj << /Type /Page /Contents 412 0 R /Resources 410 0 R /MediaBox [0 0 612 792] /Parent 405 0 R >> endobj 413 0 obj << /D [411 0 R /XYZ 90 720 null] >> endobj 410 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F64 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 416 0 obj << /Length 2679 /Filter /FlateDecode >> stream xڵZs6_g"$7VʢNguV4S6K+0jERe@NqK$)D,vіܼ7N+eJРk8ÏpS۹H&" Ϳ"XD^qBR !y;yCL[~[]`FTx^KPs"`5B,$#ŢHwI'>Y9BOԦ_? LtMdiA. SA6A*NAupP(?hJT({W( hF{ȯ DP&QK:F{ ਣi̞pӮp 5@G! SN|8Amu[w㾻+-WMHAƐ<Y?;)zZj̿gw ubB~a#7 v;p)*9s5яw2J&706e6Jl=@b' ]^?OǓ^^C Im3kDJcӢkE6E [dovE|ͱ#Q.E$8^*ZpXTB7ZE ! $NN-,wGЗE{(kHH=eL]$;2YBrTJPiD#U>o P+ۣ‚ØEZڨR4{p)ڵGXImeA1) >҈ZxpqG!rLPK5NiAzt> endobj 417 0 obj << /D [415 0 R /XYZ 90 720 null] >> endobj 414 0 obj << /Font << /F55 8 0 R /F64 13 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 420 0 obj << /Length 4247 /Filter /FlateDecode >> stream xڭ[[sܸ~Gꔇ!@Γv6NDJթlijsђ;ίO7HwXҐ ud #D]v <,?b:.G={(`E wPw/ٛ򩫚"ZJۮܯfM?ZrŸo 8Iy>K=%c6 me΄,o~{s;>]-rfW" .pm^WaY]ʮ>c 0Hp3- ?0`jB `S-Qj"sy>R&c* TժzJ'S&CXrnAT-PFTW`YWK-*WN`Dnw~˕ Jד)Ž@Oczw_R({=fq.:(,Tq'sO΅@_ Y%%J'uDׇZ_a)K$ 885_LKd]%+f }@ \`_ $a,D h+1z23cfxd  T-߃^oL˹'ᵶ#V!XP< A AԈ\r< tj\ D\8gD޼ NAL`@}l# /2Ri})NT1-  K0^p(c_wc7x儇) Q1C._4^ & y!lG񹩺ͶL{#ȃ]K ΍wa8s{cvo( %%aYBe=?MsLL39~6IؘdFJHA_]W.a8e ee,%%d.sƄFQ+re4f]oEIj\pyԤY{PuCm|j]oEƟ'.̾fj*4 <8]˸@UPc8~\ jui3 ,J qtT@3l.\iKKqT9=b6 M1/is2V̳L&!ev)#Ogjɭތt/DpPlWeP/² 1&mI΂59&PH@1%g 2%M(VI,$EXLCX,4 @0xnH(Hh¹ J9l+jttVnƱc QǶX6kpĮd&/i qA *}7b!fH!tcQr0zވ3Umpc3u{t3n$U+g$y[ ;G4U{86,/vv/C (۶~O CT]G21"/E;YУMS O1SMb2ΉYh"/&j0d=Aպ.NPLgm I L\ ܐ5\D4?ǝ"67lq0 ky788A 0fYƁ]A1D㊶ @@-޾{et 5 HW~ڔmx5u7gUTn 1 $50kYu bCʏEN@lPtI&͔5&g4 \N kxH*;IS@^nd(ɤ\dD'J,S eB%XD$YZ:IiLKI 4>JD? ,xV S1ZK} ,P{ jXْ~B{5<ߧYKs6acC:.Q_zM|><?Z=Ǯt îqwQŘ%Ox9LnwjSc;Y(`(O?#dD`/VR;&ò08E/ -ʠܒD5A:Kj<;i=$mu)Cld ڢ'؀yBslajOu(`h~shTszAExx-#Kђ46 bwe-_dEBce=lC Z֛d(E$_*A3eOtGV$xVF˄l6ǺR6.@?~)-¦g*DHZr1sv,FO: <53zMU9y5]zS\#&Fٿob#`Zk;h+6V 74BtT_ʇ[J.ڢS_4D]2p(pizCz.d簳,AhIhhIFnXsAͨC`+*(FR/oF|d*hʶxՁ$`DPGFqQA|?RA| :F=oOiZ*Oňm=bb&A9 x~ Q'4 Bɲ1n؀KLda;gӛ4}M>^G VGbkeYM V~-3AO*Ip/oͅߟ&}HD\ˎ ̥ SeFb䀴n+ +PS4` ?RZ(b6OZÛ b0@*`\apDvRYX=h f@/;zm /<6=-5ITXѐm|Wa0xä1|^ =afuipi/ɮ[ fK=|5G?8qky`6Eٌ6C(IhGNw\Cm* +`㐶"`D.2mc338eI 44|%4#_ 4D7kY5Z> endobj 421 0 obj << /D [419 0 R /XYZ 90 720 null] >> endobj 422 0 obj << /D [419 0 R /XYZ 90 626.77 null] >> endobj 418 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 425 0 obj << /Length 2637 /Filter /FlateDecode >> stream xڭYm_|1xi}%\80RHV'6ngv2j"A>̒b,g,Sl}aoú9{+zOzcݯGݯfD6\JoJ]Vy߿{/z}5,ik!IZˬ%)Kg&UK]>]u8ȍb ^x䏳dVngDU=(a2NH/QiƄjFK! tPZ{C)uЙIk㇦yʧА?Ia"h*ɐh1FB f0XA{ *Vp$ZOWܨ}[TDON(vw%Ҩ-~ﮫ~N7y63Q <Dk䤩usʯ[?P4jv5יv'?J(/UX9o{*ckL™X 0s?x]wv$t6H8 Ro냽jJxJp Ӊ<ڐȗW]捥V;o?*/lzX@wz,#ۑѮj0AT3a1,6%<ItR)C! p$U̝N$oFgjB/5|ws{G52E΁Q9q|wvn(JFgMpUe@KMpIٔQĉ5 e&&2<8/'<˥ݏ)Kbmlc#4az"c4{8MtXFsCS>󭥌͙GIGkR;Isѝ8q'i)΢7XLBe6$9<l`q|z#0/6r<ipjs0(:MS9X.},$` 6D[CSsVf>A~Sbg+yh9E ~f90O(qGoƔ(Y;N E: &蜚L蓌ޫdIɤn~Ʒ\*&4P?Ɣ+$C,+#HWmZJG`0'>jHSvyzӢAH] (]ضqC&ōV#yI!LK3t٦ߗEϹut~a]b:<8a0Q"B:Q,0PL$\qCaJ!uMu(W]@qu]5]~ N^pN(cS(݁ӀJnemi40WG=#aB\SF DyFjl0*$:E$4Gi"V# N:ۣa f%)]IњlxsٟR|*kQJ?Q)C4D g55<,TĤ<.W䐄JE.)DF0^1Zij#W]"A+?\~O|)e3@0R3).,)\L>J'ooIyz4QϡMƈ+`vM^V2)Q:˘OAjX!g,,ɐwk #=yep:ԉ2zԶXjAD-6!XZ-(*EgI0$Yv'`e [PZܷ+.?Ad/LusA9`.Ma, pO,#G _z=T/x9`kEio(jln;@m.sbkA%s/F=낤Nr[tcƗ dZغkShSbL=r4Mkb-ђL+d%z^=uǏ;'p瞓 쫵m j d endstream endobj 424 0 obj << /Type /Page /Contents 425 0 R /Resources 423 0 R /MediaBox [0 0 612 792] /Parent 405 0 R >> endobj 426 0 obj << /D [424 0 R /XYZ 90 720 null] >> endobj 423 0 obj << /Font << /F55 8 0 R /F59 366 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 429 0 obj << /Length 4047 /Filter /FlateDecode >> stream xڭ[[۸~ϯ0W>d6;&n4&Vˬ%'J4?h~Rr&3/f։7n<uyƅ?<%:^vzo_[;"}wo.Z;Pe_r>pŻ7JZ_Ϯn[l8IxiwZ$un:Hmx-vۺZ`5)dwL^R$<*J80JE,z% e:iphR^NEjwonHP%}XaTNNgt'% & ε\lbaRPF 5 |@j(^0v2Lo:Vڑ'1_) 4&5lbk$0F}?~|vLߠSJէX;!#X=tOI|@J -fHKC~ǫ뗣> ,27b!? "<aEx7$|0ߢIϲl H@\ASf}Y :AqXI7LFHvLg KIPa ڎ94$f2M&1J"fFt!_\\zؘvз䴓%EǣP!XT Gho iBeӛltp%WqL:BpT,:9$%/qSa]/ѻZ_ fG h]y0ݬѨMܮA ]싑x~29f3y T.rjW3(fLx BCeZp:SNi 2Շ<QLL#?p&YV^ 9>dK 2dp4sjDI߇}$D'[JH* zVb_zŢKYB2Y#"!AC&ёQ&*dׇ|](4׃~!bz}w4)e(8N6BwY9C=BIp¸>nU,F@M A"f8A^'瞳*W{59,i}I(}=ߝӨ6zWWM!}7-VJ%'XUQ"`dp6., %lJ?eyqx H8/Ι>i]f2TO: zO2t )A<ރn+( =H: Ӧ9+W%H ``lY%p`qP 5 Za;z|UzMnE <'gָ&X6Ũ~xq.?+ $ %l$1߃lb꤄6@.BVT1 Y/tw}A $EQFhBKIFOzc2Dr+[F6Nzl/)^X+hA#@Mf[E $H`#:8a_3)QXy(G~J>xvtvTi jx2엜$6p2]b` Ζ(FJ}:[fS R&|DGe&ob-&MS$C o#mTt8ĹJb!0~ GdZek5"DžB"%$QR9q7WYۻqDmhVxT1m?Fͱ ڤ0}6M&eԏ5f@,{THtӹ/Cv ^ټ!Q) 0!nXhM;_@xuߐ⚈$ r[%J617bhEOA) xCD>MPv'i \d>h4A}?(yXCN42y >wk㨽wY`cž̮3=G;KT,jANJ +."P]g׹rFRi:XxvPVl 1(X`S YǙuT&S"3NN#ʱP><+Á'L, S I7#.=fG-Svdo bqxo"M9wu*~>4l3|O|1Wvv\!xxFߔu$7ewC W7c@$SYc/kh|)U/b#ٿ4I6Gُxi=pF}Jԏj6FV4PƉz/`a1.x"9a@er/Zf{,xMywXz[fXL s@PLBe"͡1#s"q%\B\`0%_:|F %>KyTԘ3͠}CS&AcӶes45/MCOl"0^0( D HO\J(ҝ7P"Ғ }țƯ\PA eub/(K K;<ϾqJ]Il2˖=W߽}2\ a n#P7DpJ:jB@7dY|ojRĸo͉*nqr)DuToe#JQR[=NLSM4{X0TNJM'̢6BR_y}y }*7v|$;a(4FU}}ԋ~  ҿU, ӍS =-CQjٕb=m810eW({[..- 6JLABe 6&o?*/#1mY^)-1K%0ŒcMMc# p? endstream endobj 428 0 obj << /Type /Page /Contents 429 0 R /Resources 427 0 R /MediaBox [0 0 612 792] /Parent 431 0 R >> endobj 430 0 obj << /D [428 0 R /XYZ 90 720 null] >> endobj 427 0 obj << /Font << /F55 8 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 434 0 obj << /Length 2089 /Filter /FlateDecode >> stream xڽYs6_#)>Oidi;7MZRwW6RNfj~2 ( 2 jfn.O0Q4?BQҔVe{x=y=2mreV/8~3⒆BN|2o+οQN<4 tLd'0! ӫKE,% "!L[ҡ*'1PK5$"7$b4a*|u a[d+PRcdݧل'ljRaVH;Eڇ| "$ L1+etVyKpP` k:dׁ \ ۓ_}yBbК0QL q!+ܺcVg| 2vN_b pj>fuΰ1lc?}|I6t؈3rDﰿ;&Ms6GzPM¼j;^¦݀G[ S"k 41"XAYy ¿]G(.C߉6fz}ukq}՝ hs9TdyY^| ;P'֤RKu;tv6®ڴQu5?\to.}3%Ǜ+v_ΝKɯ[i2󜽝]iJ/{ *_azm$h/Msh$%T4dz" sO ݬunY\{Z!w6UX5p@@9_V.fsJe]me ,OeiL,{y98uBPn%ۖeU!IT7oм> |\ۢߠ#м7]XQq-xu8nZPA|c{o%MxRp%D&l%cza)8aP`) l%41DYFPQ.?fUP t YD Mg.4%Z$Ԓh,MɢA1JJ(]KL.60\EzW\u0jij03 ]YL`mR.݋t;+^,[QA( b/W._bb0@1T N1 GU#KT0%r .fƳ|zGz4{̏AO`IRaDFÕ!y}f>5pOV*0X2%0h8RveWp/fPQ8Ɗ$2c=.N }(xu{FֺQk=4BojRţ| 0B&~[賺;`/bW-0qN T@wXVh^y<Q0mXvg١KQz S7yILv44Ukک&_lv7]k9-?;m/m]^OvR&qҺ7~)io`M >%Zpi~c8VEn}e~L54MԀ5WK # IXv `sDmL=_ endstream endobj 433 0 obj << /Type /Page /Contents 434 0 R /Resources 432 0 R /MediaBox [0 0 612 792] /Parent 431 0 R >> endobj 435 0 obj << /D [433 0 R /XYZ 90 720 null] >> endobj 432 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F64 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 438 0 obj << /Length 3278 /Filter /FlateDecode >> stream xڭZrF}Wڲ+'[$RRT J`l d`0=?1ITk7^~ŧDwoo^1&yb|xlT)5UߝjmmG__ś'O9_.nzF2I3piKLX4k*2%!g;qjZ,y>忛M9U{"+?m'2嗖כi1-͢eA`%F17%iXzz7 6e$馁ɦ(mxea2P0ӂi|*mInTP*݋tx{}{꧋۫qaD'M2TN/jV%6"EWEN-tO$͊oZ=Mz-hKZڬy ۪.,採SaV˲%1ZŔxxMJ_c$#ͻ9:MoΆS)&V$M32_~K's<.M>W WyJubl$$3^fc;BW*{*Olb0F'HD=5Wtm@6TV,eQq_Tk\l2l+&p~?7z3dF A,𠝥6UӖW~4#J{^lm^$J֧߰ XP.\9DέKYy\E_]1jT꧰+a7e Q @&uC(kz6O@@cuTGr!(lUb=щί>-m675ܫsfK3?{ N_@UxkDNzV^Tǜ0: K&rDe2{򃷝EwQCiazf3ۋ?^>#t'7LwZB]"g󘛝Viϓ]>/uR1Js 1RfHa.mdHpE3" tуу}a l (jßዡ9(~p ,3Q퓠dya1Mj+Z6Ϙ팧Q[#CUFGB^gaU %po:(D{Ťb~z;GbkD(PTÏj*J-K;lq"u4ˇt"zR#|S͒/(|ZvQa[yDK^"jom3',kvUڣā; ٫rРN2ٱ0.KQk 2B`L:{,Oh5s,; \ mFE֗ov)HNmPl.>2n%XOR&GHsD}>gn--"{b]*FlHgؘDEd9H .-\zy`sfz0wD:Ɋ1ѼZ|{R!F#B0 ɨܬuz@HAT١&3/et^N17)d0GjC RtDiP*uA"x{3'[d6 PlxG]+.z\N.T4C09?:5(_P%7V0dO*|q ][u6QS: 5@tWN 4e[闒SS"P4DD8P8 IMpkI/ؾY8IF֣֨kuP2HK=}VDG G.1scǶ 7 pԏ*L!^,CRpnzC|]q7h:]Qi,LN,LY4 0'}@ .~.zo#N`1(2xvQFe_'͘Z @o'AfJs3c "9/YAhXM4'swiio1P6i2|GfJ9'uij#a{CC?0yD.@{kbFMߖ\f<۳\:# ? !/0tvV.û9_U7uc|aU8҈1,osכRp>4Mpʐ?N# ?`輋o"f 3xUH .ӭo$bTs@1/cPTPܧ~@_b̋ӥOrۺlf [M ߂5$CORql.4#ZmU}.kEgN4CeGF˨a2vLfPEs>?T(eAelaB9Ԋ]F+)6<fi 8mElH9T@-H IH]Ew/ šb \Vz@TZ窡jϘ倮w:/F` ru2 us}*o>ꒇoH?Z{1 l-r endstream endobj 437 0 obj << /Type /Page /Contents 438 0 R /Resources 436 0 R /MediaBox [0 0 612 792] /Parent 431 0 R >> endobj 439 0 obj << /D [437 0 R /XYZ 90 720 null] >> endobj 440 0 obj << /D [437 0 R /XYZ 90 316.359 null] >> endobj 436 0 obj << /Font << /F55 8 0 R /F64 13 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 443 0 obj << /Length 3614 /Filter /FlateDecode >> stream x[[s~_K !l7:$-Qk6e/Jn">u 988E?ȒE*%˔]7[Y=a W< ,f;uY|q?E}R.+uW^pul)ů7{vysĭB"ig20V1.'bG$YzoQJgvy]-)]]ᣇr]4>ɤ˂81LkO˪G5e= Zk<&.çwяmS_i[ɴ 6ni;܁+ݮc& Rpc, OFIG'?|Ic/}煗I,qaN'.3$b( u`Dj ۯw]W)h fNfOB,_1;PzdŊ/? ˺h]`և}mj}?}x: dd%^'+l#R&2uqs u%DgyYf`bdX'%[lu&@eojOУu03mNg OIr9)=rnHwh3~( BgvB(!tF92^cٍNc+ ) #{p yț\^n, 6]x݁rس[h́D(_M4pB6D 槗//l:0?0aʍKrST$ tԀ88He$I΂#Dx?GkT ETHM"[]*=E ,@]CWo\ r"*,?TYꍋM`l{i |?Xތ=`pb |%T:j*E01Ve<Y<]XL:mQHN]_[Î B飠.]TZ<7IrB=$ɮL;d0NQmKR.)]y8"~7Bqf]l MTA!=L -n:0^ 4B`tr&L?eP@'LQF[q2Ŕ@bkNʘ+ *& ̃eF艟>]e8ID`8FI*5!BsR/IY+6_zD$Z wT%D$]YRs-N i '$@űDmE!=8et+>[Z K: OI+E$al꾬mmL,5,MxG-lZrӕCB"٭HIRJ5aTe0v6cf0 J(h)̦Gc˯O`_x#|̷aғ$C+$ϧfT3|1Ƶ5R4=H2XAclR80[X+NP4&sB"X1NŝNYHr⩜g$bHW.N/v+&±a}s"'Xr5 3 O%4sSh72qrJ .ΣDa 6 O8'v 2r Ώ2i C!d O7 JIP=R;NpwUK Aa"¸iXYcP_? >et|u͸TWbVIVSyW?bO kې`^dUrsQAH GA߿ v7՚ =T%3T7R@g HO"u}W6R$kideܩVP4MƓE-a3PV@ #(jLτ4C4F#"M/j{EX</QEx8]6:--p.S(jP0T/Ju6$sm3:"'PI&>т!~%o Lʻ]p12= }d w)x3y߄>V⾡^u>8v 5 ~y`5Ph` R"`*On'UxR $(}SRl˼=ne1;yGRҧ]%\+=8paG7~hn~t. n yALCI%ssb"ڙ"OH-X~Tz0ˬEs>+ es$NBEФ,-S bK@%2Bz8S$S؟ a$%ppa2!H׎q'}3M#54 !<$J7v}{տ.oo^zjҊGlyM|^ hʦ-08[XF}XA/ 7,&:D:(4ow-TzVP'dH(IoDW]lm"/R<ճgl/W endstream endobj 442 0 obj << /Type /Page /Contents 443 0 R /Resources 441 0 R /MediaBox [0 0 612 792] /Parent 431 0 R >> endobj 444 0 obj << /D [442 0 R /XYZ 90 720 null] >> endobj 445 0 obj << /D [442 0 R /XYZ 90 436.559 null] >> endobj 441 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 448 0 obj << /Length 3597 /Filter /FlateDecode >> stream x[mo6_ׇN|zzIZ$h CBŕIs!)(ӎKQg8y fE>3BdEzۙo -0p1V˳"/z=z5yb!/RUWVe]]7?\^,b s^h+Ο$|"fR[1!=m}aY9n䊦|LY>ng,ZՋ22yLu]6?u.2eXLe&b?{a[v5f_×+ 8}B7}͡u_`K+i|Lii~Ua2R<Cx:ϸx q 4% AL&y֩s.heS^rTѩ]t],|Ew FAf[v*Lh AԔQ &yܞ¸J Pˎ;dr}c4Əܯ˶IZݕFEzږBy!dLY{i9qǭ s#hWݼ+æROnW^K[5aCo®Cx vɹ+g A~[bt:0]L*FhGe rErUAe5ѭ1y>Gwo~\\{@ԛ4{=t޾yLV0zkaFL0NUQsɹߗMB*+Z B]~`ұ%M++oI!JS >gIHi.Hڻx*< I*0'79iXt&RK!Y*Kt 4/LsDnjb'SS s4g RӈS9h4mʊF f"] CAU*$(v*\gq:s?%D)X:J YjBj|"-\Ges4I3%#AFT%:xz]Ҧmΰ4a8tK{w5 I;hZtߪOp@xjOx?44Em2 Yo9c;GZdtrPl>!Ԩ%,DR{ko٪@v-3e;slGS)_W{Sl\VC;*s쾌T.bɂ9h]D9h]D3]Ͼg($ iy_;F|1H|:RO#j8'P8&8;h&(PʁpGUX֣ 2&I,yi ܉D9W/LL)-ua<)-7A 4nF#.#}Ax\~yt[&4\H#z7u{G:87˝v`\e1~[~?Пo7bs`cy)Q=I`p S1&>WRA!\1x^hDj(APq';g-N_id(@*|+*oIAig֫GHE LOxO6́{ǻaGc}thà#2XӍQ#F.iNhvvH8TeB\xv:a%di P}AދCa_ʻRxڝ0ޗF"R1fBuI+1u<}c{t![8)(!lzc[L_VFg ?ޭ8Weݾ21ɝ<]zr/<];ԭ[>Ғ _@\BF>^iڽju('I"ZR*ÐhT.#[̻aޕcX ɗc ӗ$ܻPӣ&2>FϕQU+$I=>% 2?( oeTM`mJa%"hqQFSG4ڇ Pw`@7MSE >un?LգØ} endstream endobj 447 0 obj << /Type /Page /Contents 448 0 R /Resources 446 0 R /MediaBox [0 0 612 792] /Parent 431 0 R >> endobj 449 0 obj << /D [447 0 R /XYZ 90 720 null] >> endobj 450 0 obj << /D [447 0 R /XYZ 90 680.618 null] >> endobj 451 0 obj << /D [447 0 R /XYZ 90 475.96 null] >> endobj 446 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 454 0 obj << /Length 1869 /Filter /FlateDecode >> stream xڽ]s8=3C @4鴓syu2m\IsvCLt2KebJ<+7š< ->9`DjvIZs/al'5KJnUM eziJ*SnpֹRyͳHL')B= lעshS5Hw/GϚvB!uʅSCEVx瞹ƥi>;߷R8MO4by`|{YkpVM6WYI'&n}ӄ;"fYO`&;@'L<.HtPP<6`o踞br-n*&*1+p28KdFЏ3褢'MG4%#*ȁ\C%=pgX)\9c}4YhB[+ݜclB^nm{v*U "s ?|l&LK܍;LR?<.gΞv^Ϸߎ]@.YEldAX;Z]'!8w+Z)iOX\n$BM*hcf!KC/t`x:ڦnTT$,)0!)&^Q#C)ϙ"N~ޔqNcJiW5;_ͶIRoggnMEo6HtA'D}zц*\0#h_/QY~pIZ.&,͟jBI`@^ȵ~#+XgzbćmGhQ]BP~A<EKGwrP3@pi!f53lo|$JփFSö-E18(FO4.|~8wz7ߡY= endstream endobj 453 0 obj << /Type /Page /Contents 454 0 R /Resources 452 0 R /MediaBox [0 0 612 792] /Parent 431 0 R >> endobj 455 0 obj << /D [453 0 R /XYZ 90 720 null] >> endobj 452 0 obj << /Font << /F55 8 0 R /F59 366 0 R /F56 291 0 R /F64 13 0 R >> /ProcSet [ /PDF /Text ] >> endobj 458 0 obj << /Length 3561 /Filter /FlateDecode >> stream xڭ[Ks6WqO9)v"*IJbY g2: y % YPr~©e{/B,W=o{~c;~=7y=;]o?-݅XF9oW,1P0<-b؇((3"CbN|bɿ[L /}ReI  1RLH= Ke3ań7/\L)fZ`9+.P^j(瘋2*Е,,e7W/^=fs奚 M:Gɷ5K,f[͡yc<ޱ36 VWdp ^TێUp{=zy @X ׀hy@_3 be0c`P(`@4妜c.dyiV &T(7 BgEabOjvhlZ^m DADqoaVesC͋k+}x㎛v 6*)7Peer3=8yv5DǮ|د-51+)2Zˤ'o.!W)4r巅<Qڊs[w-:/=&u6}@1xADU,#~jmKBWmB^ )Tˊv-:n.a;2#-@HZe;RÑZ?ɃS?:>6X~A?iceTSe$Bfd(E~c*磑>ey]bW/Rkty}ޤB5iq߼`RK@2'5$Sf$x*Bv udP}y!nno 2ܰ)x,7hmؾ'CP7g nDA2xŠ9U?R4JՓXH$*4Ғ(| ԌM}Pl)u:?&VM@½to'_%W%4)E4Z :yÙmA WRۤ?8c{o(x9p|m0MWͶK-{crQP6s<~Jr%G&Ti_E؅u8ǘ1xsLE戥Dx琨yХჶr*V]olbe؈r3ԓ΄*T}ѪX_'*Yv`3 -[ m44y`%74֡:wrqް'Ȣ~/[="T` u)GpAbl[ƄcIC>ufGwL|}}X5wԻ!6WΩ4'"N0BYL9{!CI#|.)]Z`*9Gĭ- \ fSڔF!4b 1ۯ)ky'Q l 'b< ^+q,hZ?&~C^u"+d̟~Q{#,3xR?t1ց{h7>eX8uqb[t04?vw|ȉC}భpJBHQYT">KJ;3%0+sa E|Y8#CUv'/Pػڐڒ|Y !E#2Oa&f9Cl(HSg@_Yxd]s, 6Rx!V 'RWB+0Kç3MRݶM}”|W )_0DIFה0yV4N7Q:JȭSz/vp\X6J[`2&*&:X5f;U~$2 ]8gU JA!%> endobj 459 0 obj << /D [457 0 R /XYZ 90 720 null] >> endobj 460 0 obj << /D [457 0 R /XYZ 90 462.538 null] >> endobj 456 0 obj << /Font << /F55 8 0 R /F64 13 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 464 0 obj << /Length 3511 /Filter /FlateDecode >> stream xڭZ_sOGsb$)\4Kf&xhHBRob(mSkv՞7=S6.Y,stGW\n^w2--It{5U T1oMwP Mcfrvֳг oVy*wI y@۟cK&;CML wn$<^ ڮh4V$bt 1yoOoQSϑFEQO{qק$}7?#i3%xUvd'm!~mXFˮqmihvoTD@>ejWD}ƱJrsnoZ+o`SZY)Rsb>Ȇb."sg{)VԸ`-J b%]4u1>)//, 3?V>ho'uIe)ݨy￿94 [ opPq W TW)AV@ Ҧ'T Il]ٟt\(RBrQhޢxdL8bĥGl]􈼇>v$'N]$TbqI`KpdY־^[JjEsGڒ_+pzYHhdPYI:HєHo]Ed L3{)ьZko}<Ŝ \E0g0]3~F C6M5Fg1/8E"d,ZN2RԶkPyw;*/[.3~0ݍ}%LdMQDAm&fD]Cg].AX҂|bWӢ5E6yk5蜊-EN^)Qט"e~( Ҙk(.sPL:@#3=H[f7aK"><YJC)pC+jף$*@̱\E%OAPBC lKCσDQJ.qS}AI6P#Ji8QfTٻ }=Y/kL瞫2_bsxήz\e*t'."nqO控jat$~D^FyDjݔT>Yl4vSv>֫/887ZЅuc 44^39Ojn%|+< Ho_涫ϼDVt)!fvSCO <~B&LA}WlD—'g"uʊ^N/~ȗ˜s6䃘7m<^Bj\w_h }vk zGͤ\9p3y0A&Ȟ'fû36v R$P׋P ?IvdžDz jCߙ#Q %mmd.b? gRr 8%eϦٵ<]?iqP<:8A,w']_)od:Ǧ |:"cSBY)//>5O TgT>g*> endobj 465 0 obj << /D [463 0 R /XYZ 90 720 null] >> endobj 466 0 obj << /D [463 0 R /XYZ 90 536.633 null] >> endobj 462 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 469 0 obj << /Length 2351 /Filter /FlateDecode >> stream xY[s}#1{>)*-b<:DDLH@={+Ǎ8}5w((Tl4_n?`'O_R#FINs6.FemM=!x"Jb(_?ObTA[Px X$sH whG|z,K gJhr nD~e*OADz@ .;Lin`om;*CGQ?-JSp$45GK& hB}TH\<EI,؁ޞ{A#Y#!})(mFEK"k>=~lsBa9`Cfܙ:ryuQ>8d,BZei Q9AEDIV6!9r/[1+I(j>Uw8.}P棂fQveWׄ:nO-fnne᯹CU'm(QV~wjSCfB|Ol] # &^}.Sp}-@֟=ߪMw~RGvU}Gz!ܮ }ij8[DHGc--4R׳,'(MjE/~(̆tMG+HOCTP$ٜ$ְ3 1FƳ k*gteJ[O?s1/nXGlIy*5?{f]vU!8urO߅xjuV]A뢛 'lCκSYfnHBۺg> endobj 77 0 obj << /D [468 0 R /XYZ 90 720 null] >> endobj 470 0 obj << /D [468 0 R /XYZ 90 550.65 null] >> endobj 236 0 obj << /D [468 0 R /XYZ 90 296.26 null] >> endobj 467 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 473 0 obj << /Length 3263 /Filter /FlateDecode >> stream xZms6_OM#&iڝLeNo!8_D2D̝A H`elbӉ"Lgn&OXng/|JMXԲ;bmkl&fREoy?]\^͸bN%?/Odˬ%i"dF&LHW/a;X~uQMMSlTgL$LiʥbSi@uGx!'`8Գ0`!~M]~X)LKtKN;z" Zų_dSLf-բPY"R9UD꺜{Hp!Loxyft7vsƦTX1Hk0Ƽ}s/7~; +,@6Kd Wg@v? HSqb 3Ԥ>M$\6Sq,zX7S*:2k BDf[]Mؒt}gr^ ݔ g)̈́d3eLCR4Xy1BTcGL6 QmEh4&aZBӒT'F- ժmf1 2b&@ﷻQr&̔ٗJ\]UW`6z"Дq)J&lݗR:[OxO k[<DE9#Qz\zNJ)dE2eASͨM)9yr(a{T? MMwZw  &)vqk%(8O-if% RiXt>]9Wqz7Ed04Ewkvo9B^Y+sαHrˀS3c: wzVN:i%{3}v$B74cC(Tb̆iU䋠M_- N65xO}\w@w;p3\<#e+q giVA>hHJfvGNeb{~P,$}Q7?竲!EKbWmOW( _UQaf(= (6No3un<.ot9 ˜pn>E¿p^ʔiu~v:ӵW/77D="-DZD#oOQoBi*F/b> QH*I],b S'3#Ӗ1tl![־˫|]4E@錞Z|7~wPvl)pFUln[ R}- 9GB R1F%<=IBkRb* pXc#(DD)D[|U4j{bxBG F zv"Nb1zRa( F`D3# e"$a?B[БD0$>M8q<.8HC] := #t0(;XNv?oGp}<&u^08"., l _r103!Q,o%ФK%JK(-z${"eNp%_n`&V,lLM< ԚSղ* _7=uu^TvW- HnGi DL#usnm ]IF'yl%F~UuLtb@VKmGC*-B79 ]lo|w޼z&f,|!=Ik@!`cS?'v[vIF PMM 6Dx64i~j0iWchA!r; 9@3 Qg]jK ó8|[΋pR ]p=~ o|?'̱V8f:r!s8 |b@.as;9r3Lڅ#YU`XgY`Y#<ܕy83;2qźl򚘽xr0>8I%_,C n,R|e(Z>x x(?żގ|_~%2jYPOeiޭuH̸]=+9lZWۉx }z gZRBs  NEA;{ @[T|pk}D!@1) b ŜQQHvegJqMARH=KALjmѣ c ]UA2TtI~bU4ȃ=º o icG! 7hB>A<|H0){3bWsF0UXK9 a~^Ʈ GPj{KhQR!2Ql 9ѯQY"(wWha}gJEN(P*BS/a_P*B1jEkE|V8u|Eڼ惵"6Д8-dRD*vu*3jeY~%BV6jPbx*E⎲ǂcj` P)E";`\1h*&4 o[zC۩\ &'XDM~c]RuG@ޥW4S~AU:W;FQf:̈́[i*I$ brPt2@I6 vaXǙܓ$3 ;.̕Sһn=qKEqA,!;5 M*!kC R[Q endstream endobj 472 0 obj << /Type /Page /Contents 473 0 R /Resources 471 0 R /MediaBox [0 0 612 792] /Parent 461 0 R >> endobj 474 0 obj << /D [472 0 R /XYZ 90 720 null] >> endobj 475 0 obj << /D [472 0 R /XYZ 90 643.034 null] >> endobj 476 0 obj << /D [472 0 R /XYZ 90 230.596 null] >> endobj 471 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 479 0 obj << /Length 3379 /Filter /FlateDecode >> stream xZms6_OM#^Od|MV:k;Fl^eI!_bA$&žYbe*e:ĮO?n'x$#GYl'5[~ۦ&SX}7j|ȫgo/&S>דY;+_R4JG&ՑPyqQB5鸹~g^}6*ޖsj?\=D⣼\ n*-G7?hL۷y7t\Sf7* ]F]QM5чamST"0w+")2ϯǣ vtލT$jtǐ2Q,,H-jk6W }2cb^n˂uM͆I,1QTXJR}k_=Nĸ4Ŝ6%LtO|GV4fӎ-S{k$jpU4̷#^Qy*>:gXQW6B..徬o-h_i|?O|S}B\ȑ2:͠eq-Nb 6+ؒ"h2˅/X>B* !GCR$i;.滪`Kd 5Y$vEvUܑZ~S¿6 軣iy#0o:T{RGVyv!;:LZsk}]]QfndJߢ}9OE<$A(B:l!__]]<4Ds:nNP/w+f;ߐiQ8y~6zv Bjq Ŭ^&Iy⌠)e'/&Er3Op-,q˵hWBZD=&) aD I IT닳g:.@ βK֑ől=2JD%ja~*'M-n/R?e%5^A>>竪_R4h>}}^~& *KY I}}E$cERHmNHM˶SөqRD)ۨTSj^MH-mFj-{suzlZA:3L/гi.Iq@'o{:DV/#*a;h i5g@w>3]H  ;x5QjBv*>.>0ߢd)>TEaz6ziJ;ᆦMJt/ ش/n0oZz}x>\wpOی{vfv?%5Wg[OՊPVHe+b0aȨk${XjY 49 VK9J,-yUPrAK _TKGtZcN^(0 x?XW e>t0$B)`Tl9HQ!(!!*zw*I"T?\u$R>p&yi-A3v%e-j%}hǎ~]_t>̚ Ԥ[@9Y|jt^|G/$D^^y~x]4 1Te H`Ll漏yٟ .YI TV\Sґҭr1(@)Xƥ}/߆*'ijdˉxf\,vw_CQy:=Q._rc# (ސm@5}@.8@Iɴ{祄$\zGݹM?"A&(m)رC  %m/O!Rt1( bJNb<"S)ِ)!b \IdڋAnk!_\"+q <ڑҩ2FG12qE4P=Q9Kuѕ-G}y{aE̓JqDOu~S z"ew.&X&0cԣZ_wR` Nu-)v:ڞ,&ћqw> endobj 480 0 obj << /D [478 0 R /XYZ 90 720 null] >> endobj 481 0 obj << /D [478 0 R /XYZ 90 363.88 null] >> endobj 477 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 484 0 obj << /Length 3060 /Filter /FlateDecode >> stream xZ[sF~_'FCi;VjME q&~ӧA I/rn>kE4YT'If?ͱp>Xo3QF][]/gwٶ볹R*Pѯڬ<2<xl.Q|rq݃7R~& ,Nt(f\$hlAwy8j`aVu+9/%T۶l/rQ㳆G]˚-hM|Q /uQnwmG&m0VaDԯG%sL*K~ݸz޴n| )b?mYu@aY{|q.IјMfE `(;1n"#=E4U[9պM#EsѭxfnovHm EIL 4 Y,0CFE&¿*lVJ+K b˜VD<at%#, iM9oԶ|P0ljY Łd^AŮiPy)-$-a&+9sLT#7[!iŸvW_隸pv7W7_yqq}18h,LA1s AӬvkS93 /7BFKqs;2.wYoug<-|9^bVF)RPh>f))HcRRMgFMG[ SA p.1{&ݭY\#\M"{KƂ`+CݕgJW2Ih"ؚ2,QpA ScQ%HS{ͮ([%ϐfWFe)x(~R= 1jKj0Bd[ Di=-#>h9(U})`6፤iٳKJ!8N+B_ R &6b(zhJ!$> PpZ!m<%֞f*NIՆ ȇ؍wbE#i$V2&%)\4"Oq"~S@H_RW, d Q2is9,V`b(w}OPK3{bta[SMv̷-@wO^CY==\}l";vrq4$f9bs$9$.:M誶 XK2;JIV`GpadbJ.}x^[6іH8n0d~1n7I!UG G3s1^HcĖ(S|*yS^ܛ,)ϱؐ-td G$05T2:/HtPp; %4I@բD˾ rEGó\3uPvT%R;Mo! Xd:6rRGB#cJPأiɮۊ :0<0H?%v 6{˽+H7u npߐ~\*3qѾ49 WH̑^Upq='V.5uS|C,N;&[>!O˥K0H̠+Ut=f ٜqq(m%?$!h6mOIi,>Z(ԥZ~F8]W\ Hĥ ' ۝0q7Fa8t5G DjCS2ŷ [B}%K&_v)]#j\1#u+ UHwːi7D@熷]q1}!0:v7ׯu+#fĘbuhZ8]o~z+ կ.su/HUnnQW?r﷜o^\?B 4;˼p;M*DG 9ZeIxRx> endobj 485 0 obj << /D [483 0 R /XYZ 90 720 null] >> endobj 486 0 obj << /D [483 0 R /XYZ 90 496.542 null] >> endobj 482 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 489 0 obj << /Length 2395 /Filter /FlateDecode >> stream xYs۸_G@۳ݙe4DIBRIܿHg=~bfЙg >?a~_ ΟNNPfw>Stmۼ>9i,n۬\f;u.ODDB~][&ĝ(>J4ѳT ¸p@v~~,0ľp@ 柳Y ƭ}=2 h"-,YQ~*s/ӠgD=HH' +^`VRA=[zPNAtF=hup=Zs_zjo ktV_vyN묵jw>l]mV&6/[?Vo8JXtCC\^BC nƚoMl& a<@}E<'q #l|vs}w/Χ,JzM2>X9pH3}7d`$GKJI*LPcƧtEP-j8`0ZnO~$5@rz;ٷYmr!b] ܁-V^cх77keRV&KXե`bN өÉؘ&ѵ> U9e0  4'[&2qzG8mxi'-O?9ZH !kykyں6դX;vKo9Ex^4ZƉ7݋W'8h- 'ڷUuB([t4zu5>Mf9c\|o+DAZ*VDRBy MN< KY/aC7l}Wu7ߺyu]C,9$vӬ mQM}Jy] $ЗK^B(z EJX&KC*((AW GLr(L!yDm<,p+Ǽ/p(_}vqX,m:{odM8sUB }eX4n 5qVuhsn2^v[ǥ6]gמ^Lg¹9TJA>+ "M6(r6g=S%WxnX endstream endobj 488 0 obj << /Type /Page /Contents 489 0 R /Resources 487 0 R /MediaBox [0 0 612 792] /Parent 491 0 R >> endobj 78 0 obj << /D [488 0 R /XYZ 90 720 null] >> endobj 240 0 obj << /D [488 0 R /XYZ 90 544.496 null] >> endobj 490 0 obj << /D [488 0 R /XYZ 90 273.187 null] >> endobj 487 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 494 0 obj << /Length 3293 /Filter /FlateDecode >> stream xZ[s~#1+D)3$ LA:m3ٳ $;&^:%ٳ~VNRIN2Eal" ޛio_Nd*T׷_庩6gSu9c\ޖ[o^{{6UV"1xs}J}!g2FHmʓ4 Tˌkjm|,5+g27Y/9 nYif\vWjS_ImKĩBZzS5Ͳ'˓_S~hǓ,u ^cEծYv7~?YLv2),ϿNnh&|/.&ZLn>z4w cy؎Rc]np^`ulK<ۑ~4MZ)8 Z$4&_`BgY{`~欔"fl.RZiE[g3ka~*O ilڐD6yv.oYTۖes䯿MeS>oכWTLhmWhƈBfpNZ#\(v1ݯd1U@~$eꎯ!1cV~=i,7B6tNre 7ywYl#!zI4J z_y`׏gTJXLV^U&NJt~F(j64F>KTdz~adQ?\E3Y>Mq¸`~g&|W}3dmzB7nn^_!BܯLr<öۻݜagz^3Vapw7?$@pF<鶲\@-Ӑ"TҘ̠NsUK%TŨܖN>4[~-7lunAD1ERlX{Pn- aO T.ݠzvsrFsDFc F4=IɏZ8,3~XaveV[*d Ξ5)#8_V[ a5Dke "v $-s`x!.C@({;:pAQ21w,R?=g#HbS^[y(ܡr"W{&t',e+kd"4]# k/2"R# eq>.hE%cMN)J5B)v;w 'ZQdEXex1cLry0v=/ϴL’qHGf $E˝_Ar[|:)ߎFZ幪sCqy~V0"ox#K#glg?D ef7"͝ _+Tc%,&brN>Ͷ)vhM,b6Yn(吜a"YdUN',لp< AFAsQ"Fm;+|#X w1VBciJcw!C@T4x~wwT> Щm%̄N"ٞ0^d?dz!Uw~=lR)uT*%rݼ+ 녆{VvR6,qt[ LP6a+8o= iކYd Ai78̙8Kx#WW7C0>ʵy BtR6l5R_:*c =TVjb&HŦ*o[q0E}7a  %p;,Rf0$.4ݡ*SQ#b"0r1j<. %R륯%n؃ttsʕ#]V$ +fP|Uv1Sșu6v )@`&۔]%z=j=&m~TŭDVW!CnY]YBwm +Trw{Ir>y")H1`;tjO>S˧0~4k[Z*TE W!Q[!""VQaO'\Mn(\KgsV?qecHIUGG^G/aD|GzvJ%oXݞҪ(^^]9?|sM?p>Zh*76Itv.RPtk堗[%$' %rVp269Zg7=ke6 +~zƿla``]^IaۇP}Džcã}'`UlC1NW${] &z\и>2E1]R6MX7pŃmCnաxg#x?}M[R!}Wo#W_#1C \\W^ ?ކ6zSm+M;ߓwV]Nʔ h{+.4M=*9mmlm:lX_-A\Ky TۈXQ GRwnZﯮt8d`j,sh->̈́,RVHOri䕶 gϣ ංQǛ9~K0Dk>'h:( .VR]m8mҧ%ʧJ*_;M}ŸhȲ(A3|یJ81Jy=t 9 $\<*+UL e{|uqyOWjnm5x21DJ3]FZ]Q +FAElDQ .xXS}+M(6ιm#p~%%dVrȄg6E0<2$Ζz a%o82SoHqXc=??ݬ{\r3$c$ ߫jy$)@uYE S?ģ&i|DZNK Sen*5@n#!aSZ (1桝u|U,L 0'!yğ + C: Mj8ؿSQFm?sÇ"R~21a&XsC(=2 endstream endobj 493 0 obj << /Type /Page /Contents 494 0 R /Resources 492 0 R /MediaBox [0 0 612 792] /Parent 491 0 R >> endobj 495 0 obj << /D [493 0 R /XYZ 90 720 null] >> endobj 496 0 obj << /D [493 0 R /XYZ 90 479.967 null] >> endobj 492 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 499 0 obj << /Length 2476 /Filter /FlateDecode >> stream xZے6}WZ1̛8I/qMZII*ٯ(+:9}AilNgm>Mo0o?]>&,K,gcQMf:B$LJ̻b,}5.3i.}r8"iURVL~ڶĠVƄ)"Q?d%~u7u=f̟3ȘJCEMA6YjwSxnRc&3.RkLHvEW՛)K>5TJs8}86X]{T:@ijz d* @4r)0w--Wgw,'p"F 7VLN| ֔ĩF6usvEkc*=Rh.\UjQ V%S-DK 8 ř/t0bN0T6`ZI`T T$4G=R]=`d4SsUN$v+?MFɲuJl{Slv n1$#cr B<{Ae5fp4*a0zMd\cL8 #zjagD)a,<#4;*GZ&]pPS32A_6b5DK=Ge}63 awb\>~-,[Ra(?'MH҉2=Q;Q_coy~?׫ؐI!Ww҅ɛz3OKfAʶ)kWOZ2)eRZM~Ktj9 :O<竕m);ca:OvU- GAӳne|nG{9dPJ?妄RMsSƴƅ6x+}ǃL_\c*L/oۦl ˥rxɖFRbf\T %Q'I Hg%0K,+`==Twn; nVmնXюWm8^4CԻղgfK q}y)p[#G&Ք}I)vKs mծPl{j~wxy2Zm2{RG­mw4iÝy9z՛_^]t,C.oz|gMY_>A\|\n]I(eDkT+ TwI`;r&)grV?<xьDehdI%ԉ2ȃ" gF;79 e3‚NdrtDdeAG8!QVO85 PB,8Sh`_eG(Д._VO@j@ R>@oZn@[Eۆ aƗUcwcJ(hzXm ) ]D*4mڭܜHR9Q<{Kpa HC7ocA_10UቾF1"b^iAԇ^S# w'}7h]Q'{sik?p@1Jh1 "O 6wUUBI=Fyzt#ncrkL^Ui3D] DkP0&=Q _a%7Q%X*3u6%襐&яͭ ?pG|ƾZ wrjYĒ 4o^C4r]jUE܏06EcS3ݽ"rqb=I -|p!n I$(Q54%$J)Y`"z(V>;mČp:q~ډF;zUuٟZ-,9zS".72EZ GbJV?>xfKk~'~".@|Қz T~"{,vwGڜv WN,&+w`[?^7ݣo>u_ l*I:Qj>~ š[ C5ɚ>jC$hi_$ wʰpEƮ慆~ {x" > H[NKדD)9*'@/GkغZF 9GD4h >mÍ(_ce;w||Y.nC9ifwB!n~Ih?\_10L endstream endobj 498 0 obj << /Type /Page /Contents 499 0 R /Resources 497 0 R /MediaBox [0 0 612 792] /Parent 491 0 R >> endobj 500 0 obj << /D [498 0 R /XYZ 90 720 null] >> endobj 501 0 obj << /D [498 0 R /XYZ 90 680.367 null] >> endobj 502 0 obj << /D [498 0 R /XYZ 90 405.686 null] >> endobj 503 0 obj << /D [498 0 R /XYZ 90 236.105 null] >> endobj 497 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 506 0 obj << /Length 3433 /Filter /FlateDecode >> stream xZ[۶~УcH_qt-q!l@b:ς sp,?>JɼrUf8W<[`ᢳWVϘ)?sDw)&<<T93Hۡ=HQ2ae_}ZR9 [Y^ 7$K:L_0" \NN+8~;;5f=rq6n(\f.91V!3 MBUfs6c")[ۇ}ӁRS+7WL)N^O7Ds;QZE 400#mzL'J1q/plX,;pTS#3à [)o<7y XT +ʻp07Q%bYqLq >Ħap LlV? 9ڸ5DXy\ gi&ƹ:N(ܦm("_hP"N¨WeDJnWF_U:ozCG1l@MI }m/Ć박TC@r1ZDvd9dLJPmyQ+b$^>Qd ĩίBijkT8MzLJzͮjڅEz.'ڡbE'qz BjaV- O$= Dt#4!&uzIŇhXqnk|hCuzX6q?H{)WRfWܝn9ba0کUEHi0.#@1麰8UnqM-F 7DS[FGTz6Ϸilj@:\Dzǹ%W#o*L0UW| KNAB 0Mհ0"TyӅ0%zDe:ƅDfGMA`7idD?!,C^5rΫ#Ղq0лƨH{xuxCCz/qLeߕMy$k@ mTwS۠o˗!}!N4S #Y25SH"OA{dvL!@ ȯ..^YmٌC1QR~h $t՝&b;(Yߛ-I\H}.噪tYMu9.ĿW(#ӯF"Ge8NAh$۳0#eԻ8s`j!Mk& j0qZqdRn]6WL[ĝ$ %d|!m 4bV{XNhPb_iz]?Ź`o|i o&78~b=IծDe:X|#v<_/#F!XeAzWnniP.>|bکΕL~IkaEfT{ [)mՄ#<8 TPZqip6&yF? g0,wbyJƜ}f&alL,0eJ) 1 =;wEƶ6WѺ\]tEVHA!ʓdrX\Y_pEV˜U4\i/˂0iX?[g5=Ϸ3^ۏYlg^Q U`BQA A$x $H0}U8t#τuWP^djsge绑z SsJ)?jJINNq&QΔ*'A2akpT$_bU29 $(ƾ T;= QW&tebb>Fٛ|UtYi+ uT %vYi+ .q9er:e}q5$E#mJ[6TcjڮؼG`?E1"z88xiT"Zi>;yROvI4$zlڽ7 1gt[A綺N颩@Ul@i:>t2:m~l\ԸHc?e٬Fv|nRA,Z(~*`r @ZˬF(c8'!gB|y\pLnjaRK> P}dIi_mUί 2XkUD縚_7*Xwm 2)l(Vh5FGӡDAc]-a"vkz:Աe"b=*=|&_zzndSGnc; %ۢ(w̉ͥ(bD$}$&~FŎil<)],m_’<5 X2`h7ޫZèmeN]i .Cr/,B>ӤR&١tIb񾨊$ c =x*LPڅc%ld yh-y|<Tgdʲt9yzL˅7c2;T >}ufs6TSBV7]SʦN׵!6Q) ٞH|?e%?E<%8H/.y'i'*A>Ӱ24%Go{4G2[DF$;u^麎26 a1T;z"|c܊AOP A q/2uk?R, endstream endobj 505 0 obj << /Type /Page /Contents 506 0 R /Resources 504 0 R /MediaBox [0 0 612 792] /Parent 491 0 R >> endobj 507 0 obj << /D [505 0 R /XYZ 90 720 null] >> endobj 508 0 obj << /D [505 0 R /XYZ 90 679.995 null] >> endobj 509 0 obj << /D [505 0 R /XYZ 90 320.443 null] >> endobj 504 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 512 0 obj << /Length 2715 /Filter /FlateDecode >> stream xZKsFWHmANxTRFl9.LBZ|=3  ,9Ab'&8Xdzhu;By3Lufp?3e<]mb/fZey?]^ƋI#d6ǫ_^6R~4+OL( hv:1|+'+ ~zy΄[az^b&u}[Fj,rfQ8䐘e~2!ۺn߽s&V9&`'|#, g0u5Lۖk0m%dY潊Z/[,n<^i_bϊg̫ )d z!;*Xf Uhq{s+׍!_cXA=~CJA"X xШ1+JY,NF'<9 N1pMBj j7,AU > Jm'3ƍ9*&n~F`iSUBjb꧋kXr|S)^ѐxa=OтQPfsV(:rAaB[ż=m<({2H8tkÑe<+ea+*9RKe\_iPQ^ oo>ELěPqlB)1||m F69N&͞*'@)>Ⱦ^)Qi\i}0֍k0v{ͬnr}#^ΩwͩڬyQC{Q6!{`, 2 7 HJ= -RmXN5?{? AS6,qͦo˜ ~.xܕuJ~ +TO俶*% 4N0/ze,ٟvuh~uKl/yY'Ve|rXU,LhE1o6( ,aSj/@ۗJg4ex^۪8)nZ_IHh!-]0#ޕMiIWXU1o55I;ݓĂmɌ|M 'aL]s?Ғt쪇Hԭm,*z ԰]U*!1[N E9Yɷ/߼~a=Gӑ@^.D&bsRgzix<E9*fgl֓ ^3,[9brF=momA{YbmT͔5fڽxv0ӆ9 ~z1 Իm@Β.YꎒK窈ՁJi[nY8ID+-viKN-zOL38Wg _i &2}>ifHyDd$EeS)l ʕO E1z D} =`>N$MTؖ>X1ց,Izy#{QLqB`w3w⢨O_2o8.S#>BaKf1(l_p,.ޞ4:ҏI`?ŕyGTfP2dQJ/CrW:L`|ũNc}&q<KKǁHB)'A;m`5"?|L6C0}ҁꧦL՚>xc-Q:[t=]"ƄoC$ !LPDinRM _qiZy<řEJun(E蜅EQ<:U'! YF:E 'T|<+A?uHh[&t@8/$ݣ?ed%E֋M0Pjgr> endobj 513 0 obj << /D [511 0 R /XYZ 90 720 null] >> endobj 514 0 obj << /D [511 0 R /XYZ 90 636.444 null] >> endobj 515 0 obj << /D [511 0 R /XYZ 90 305.443 null] >> endobj 510 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 518 0 obj << /Length 2334 /Filter /FlateDecode >> stream xڭYr}W-`e4)F剥7KM}n Z"rK]N\XL8I'R,dyi/>Fu3,V?>3e<e_b%YәR*R?MgZE^/_Ͽ}Τ2 ~{Fʿh$<2)`ej&VbtfbNg"*vK[sk6dNJEƄ ësHM_=˃33Ņs}ؕnPLttKgҧyX<4}#N`ϋ+/oXز-rE0U~3f6\3eQ4uдyK)Tw[An5]ϫ1$耑X-SrQ3En18c:\]([tzniˢ4S۵[. xo%N TL8uQ19; wWזmr0EHjܒyUyQ<xamӌQw!ڞWYf_(X Q%roݚmZo$ȅ.+ ;.X4amti6ۼ琴> H-T/W`*q`+bu]۾=m.D5/_dyvK74zr?6r*aQHIzTSѪIj#Z=N^Gk"܆VJSgi]Gk%Ț# >#hDw|*ꚩz`1T 6(î([%}NNpXI{BeYfR˃S,(Ep>R'{(B9ԥb) $Q%m*G$ZDAIk,[0엃Ѵ^x oTdv"9QQcƼ~u,7 @Md2w(z$eUt:=\`zH)REA=It; Ʊr=-EcP.>d“9ҟ-}u zroQ,_᭝SBzHtl. == ȲQbX@p_Bmc%2;E€TH'WaF˒1>=ҀyGN|#8w:@T:I<†4*$v`@I+#bI&h|ȒK@U)"8QR JA͌%_@2.+{qt}^>mưvx6lL54Ӷj^!`CSp G!wE4s`^|<5ϻmLg>`(gu7ګ0 p3e0б^5vI;uJ=иEWmHq֨f3x@?捨EmP#Fji$_n ƙ^C-hMsa$S*: 2WzeQдa@2=';u ͠,f( aݵ2^4 (#NpMg,wo>f a^D7,/{x%WCihw?&|c[]^vٽ莋 |gY܉)*wW:z&y,_7Dk^KcU@VE׶嘐ѐ1ќ_a:2-ŗU`?<A1.1+N( \_Ci@)‚ 8 b)|(BU[G/[2\7f~L3$ԉ $/Å&Mghь9ro}?Wt:0LE)G xe^{N7LT(vn7 Hnw95ҿ)6M^ЇBI/Tvlӏع#m" D\d/-IؽzAF"G۽ΥԹ]BQ",Qb=ISkV*}:;1{__!ߔy=~e8N02afaDQ"{K8JU|M3W eLjB0-q hB &/RNf >*ֶ ^)?00**C񸏡>u3LN]O1i?CKͧ~}~l> endobj 79 0 obj << /D [517 0 R /XYZ 90 720 null] >> endobj 244 0 obj << /D [517 0 R /XYZ 90 720 null] >> endobj 519 0 obj << /D [517 0 R /XYZ 90 387.193 null] >> endobj 516 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 522 0 obj << /Length 3274 /Filter /FlateDecode >> stream xڭZ[s~_G!čCt3ݶ>%-63v;(FX\2fFJ攝-72?Z?B?q {ﵞ>OOž-뛅r.Y(m]*p{Bh.\_GZnV`efenR]>6M#!ce\Jh"/lgV>pzv_c 9L"庪|<=Li9M[ef׳j?}c]n{s9=27؉ۻCmF4.<̹;9YdJKO8rgyO$FKy g|kFnӑ%&xvT]=crv*0IP&Tr[Ⱥa<' O;rLxZ.[P姏P~4*ԀrmZjq/W0!S3'{у)&Ov)O LCBOnL6&$A{B4cyմ۱3;4rTRfU>ެLwI윳Lh9 g(IXru7X8)6\tjL>^DؓȘQ*{Ҝi("SI1㡄,򱬣lv -dOŶj6!"4{3rYAjbJ6*8h+ A-;ˬCYs6S,CJp ,`y|?|ދ4͙Xv{qS. |u[-J%8m BpD"Y3y=.N]TMTATN <Őv(oT\e7s{IFMMVC TS9s9OYG:)$)IvI?ܰ?}FHO" ƃ]1aIK~N~"Y; $kHKAlR2i!@RK|KXqnOi]oCDД) T#-}]FEU1"nz6Bʽ=0!= JiB {šVA*C |1= %Ʋ4<QC+)VSD0sӖ ʇn/|34I ПtRHdqX)K{^XW(7V./1OÚjyU[w:ƪzF٧\eʉԗbR}]_QthzM=uz 3mB:?f{@n%!m DIHyvb g9ʒyLd](^i j^,vB2 7'd2ѥ =C!)U [A*yR@틺ؔZvUn&tۧ삫yZU!'q&wM8V],[2m"@YnPL,2IrШ $ q]v JSNت ir Rjp2?U^(i|&'8@t N!Q5fS169xlbmP&u:Զ X|qu#vjqOخBN`W ^ hB3n/ DPV{?&I+MJvxQD0o8yU sĵ|8=E)< 8\\ Bz?f6 c>Wmhu7$ $yReARDB&x8V=4~:ULTr 䪁{p+cn/[<nV3gqg]&-U=LzGYloOAKGEOP. MJVgYmʦ{ 'KKY+̳NmYC PB@ Kh$B!S%(6H7X ,0=~Ʈ| o ‚ "zٚ#O] j8O `f gd ޤR&ס0ɩReج*hYݡ >>UyQX@DSF6)kцez b%W@rZ"> endobj 523 0 obj << /D [521 0 R /XYZ 90 720 null] >> endobj 524 0 obj << /D [521 0 R /XYZ 90 680.659 null] >> endobj 520 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 528 0 obj << /Length 2148 /Filter /FlateDecode >> stream xY[o~ϯp@X.nчٙlN]O3Ch[,gu4 r,GfoQ"<E>H3Au Í:2AK.&)"@t P=̅tdKe v JNk(1FE(rXhk' ȎZႉ!Mu_ڼoJdURVԕRvSb~S΄vWisryq)4,gwl)Qg JLGXM'54|{)er**~: aNρX?ΘSglNǂ)j7LC|rf 5r!2=nGVTea騂LJOM(W (oYzp )iV p NBr&j?cr@@w5ErM0Ry *E:\1Rz,mbw֬Oc#8nv}(֯ALA[lo/vuŰtGȅb!]QO7!tHǬv_9;y־mHxX& 'Nu{8x;@~duU P< r5>Y pׁװ wuru! o/L endstream endobj 527 0 obj << /Type /Page /Contents 528 0 R /Resources 526 0 R /MediaBox [0 0 612 792] /Parent 525 0 R >> endobj 529 0 obj << /D [527 0 R /XYZ 90 720 null] >> endobj 530 0 obj << /D [527 0 R /XYZ 90 366.186 null] >> endobj 531 0 obj << /D [527 0 R /XYZ 90 185.535 null] >> endobj 526 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 534 0 obj << /Length 2943 /Filter /FlateDecode >> stream xZ[sܶ~طR/J܉q'H}r<zًL.$<4$s||fdNEGYx郺Zg]\̥b.wfY60ex7sp7I+%+fPK6lUmnwwj՛0xXESM؆_Ņ({UV_l5&yËjڗK.30+U6sbsɸ/wvbK(ɪboj&1^.5/Wava*l#)-Ə!Yb#K]ėfYkc`m?^̵]-vavfSE{4Jf՛H˺ߗmrfm۩ߧ^) ¶.XnfϖULr=LX?Oi\o!eDSFIm'AN\'̥LcI"sWՆlUeMYHt6naI -Apyپ]-KMFkP`G1Lq+y%?_h}OC(woA"gg~wU*/0f h[C2X,3yB\nT8ڙ. H % qb'+)#<,ҒukǬ0`6qkRz9ЬP8n@/9B0cI"Y Q8 YVo;xz_ovR3 MB,&OMaJ-ET.M&<":̱ @@J9h(A]GGOđ5C ́u6-BϾ#fsޭ~@5P~'P8U5rc (A"EC샬qq`$r&ĉ{iЬH;UY@yL< ҄HI_=Rtzp iєb V9.,3;40G:29L"'@tKH 6(k0'L: "ņr<[}( P w;*QXA7v0pZ_?tuh2$骂C>9yO*o$rIk&AU\BE;TEo佝*艕J*Ͳ\/eE!KH]{y(~B!k#_b|Y)&3XBIV* u@w,Z w H'@  OFO0tyS E`0 ŸiWrRi4Q|`1@鮀y +y (tnS!W_0ON~aw*70n]Jd$dFP"T(c@ JQn"LO#t>pS E@.__n7Q:x?v

ѳ\0cxA #-]IǶnVh\v=[cz P{XA=%deg"xo qRox'8G\)p/ Fz,&S:*tec8CӲ(=qt K=fݍ+ 77[oӰvm8 O>wC~* ݄}Ģdp wTzkNќwXIuŧ}݌v @; ^*NLMs#etF0'pdT 7ܪv7V|$XQ9aR㹻A!Rq9 uoэԃ EmK `b-6k}\c/- ; Hz!o耈G; 頋j'\h#Pywi\\_,$7Br598nCe;xMIE:CkPM@]bSz J.yl$|=A('52qTQVӁ_AzyT i> endobj 535 0 obj << /D [533 0 R /XYZ 90 720 null] >> endobj 536 0 obj << /D [533 0 R /XYZ 90 584.17 null] >> endobj 537 0 obj << /D [533 0 R /XYZ 90 362.905 null] >> endobj 538 0 obj << /D [533 0 R /XYZ 90 157.921 null] >> endobj 532 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 541 0 obj << /Length 2635 /Filter /FlateDecode >> stream xZIsFWVz٥XJ.K1 /~ $s,d2)4$dg27Z_Oۗ7YoG?Pj’8K269u-󛶨3!D$~ΤTY^՗gg/Wgxtr8?Iyˬ%ciNt*c&c.4j\B|*=Q ,Q.1HxqKՔE_9S몜}-jzo]Xt{ }q]6fݗmn[1KMfN1SN$blPVmlLhԩ:oqࣤހ-.*Nr nVe?- p7nidA $ c%Vt%*:d9?2v>ikGv^mnE YsK8H!m*K,,&JXz`3?&ciy- ܞ[E9oz8{d]gPϴPoSP)+^s8o޽rNE)y+3N)];P|FC(WU  .PnjNNv'GEcQ&J0⿌€P&N4G1yU6Y.^j F̄T/a cЕ y됰ouh&B˰*om̠B{=vq|G)cdb$H?%)! R3KlN/V}j1Bcj1*:!bM(=ޘX 3e6"<莤S :? Ap%gؐg u4.<81!B329/fũ樰fRؕ&-Ep==i7뙝I]se/6U4 {@ڤ^^L?Tp:)Ѿ$c+d`Q=}5*S}VòsUfrXgA*T>9PB̥j"=)0GQ<~ #d),Jd:Oy^;hC{Mb]M^0pG;J J:PWh$&;Md#"A3jɂτQY4/WfyDyskDX#1zQ u١Bw8]Uqk*V*_U8]Mؠ ZE/i8îQQ,M_WrWn^ 0$NێyUφwzh"AdjQ%$Z^qu&0G~X-eNxu_L;ѩ߶yzơUM޴5AE37uvl{h; ر-sϗmm_^^Eb_LtVx*W[z5zn 7p΅^etn01J!Wݬd*g]tq'H nnwOzH˛!Y&3-oSBg _!:[VEO0bUxaœӟ};(qۋSWJ;!ڐ^^嫵!ڦZDo?,a!\ O+gA_.F28"h(8@/IEq1 uc78v"8c lB5̃6r7Q.!+aq@i,Q(e/1z Є1z" #ҁ(/F܁k+LJ f B YŜXp1?8u0mפV;A& Cdpr a؁2z^ bb!#xb@ (r JP1{# | ` X5PV7G!AH=WWuqw@x@L/I_-oEN|7b^ZJf%3d[ң<X@s0 ~| x|B;2%KFX> J r4o+@s Q;#]sEXKP[e *`h]5l1>ck3{辰?ڪ.&FjtD~v4~_!c܆1 -Ay~o'oyzyX^Dlتc3]B;.uA(VMlpr"}y'y'o]zU7 O^Ǿx~@.S endstream endobj 540 0 obj << /Type /Page /Contents 541 0 R /Resources 539 0 R /MediaBox [0 0 612 792] /Parent 525 0 R >> endobj 542 0 obj << /D [540 0 R /XYZ 90 720 null] >> endobj 543 0 obj << /D [540 0 R /XYZ 90 556.619 null] >> endobj 544 0 obj << /D [540 0 R /XYZ 90 297.542 null] >> endobj 539 0 obj << /Font << /F55 8 0 R /F59 366 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 547 0 obj << /Length 2716 /Filter /FlateDecode >> stream xZ[s۸~ϯT(ӗ:wzy#Q6OI xƂ@+s 6&)!H*dqf~xº,uVzwJM%)Mj%u|L^f:/3!D"^NgRd^geV.t>qx(5t㋷W{ފ#7+wd;V&(z~oP2#TX &9,EVTRf5dٮjY]l7*+?^mK?YY݄כ)K6`|QB/[9ogaj/οN̚xa #iP qIl޾V_dDKMOtg?N(QOʻ lY':dL#Emne`e>Kc&CԋJ_Ԋ,%Y) HwʹQl\+T5xai9oVPEL.p| ҤLnD_g}^+•qd=8i=4l$}ozTXeU_WUXڥՠPdEBsbTz DqئBBHhnrA}_Ր.*)|fa]d ^J!;p}LH`׌$s) :5_U8Nf7}^)so3xIjK?%ь%@;$i-?RKpz3"TJۻ]VwOW~Ul[0yj\ G ߋ!w{SLCʅlX]#U*j ;NEvJ 4f`U]'p«GN8Aԁ+ X`,A( B^ ,))$3`"p^'+JAYנT/Kf=)_)8ЇnJ|#)xan:<zmu _aS4H'q䔌0i7{ [~STD@Ex2?C/QY܏?lU kGA)!Y5 DZ4-peI=gI ._LKn#BJf֜jbƼstCjX:pZ—Â?`kP5~Hr B> _,A>l 1@JmBCA194'bJb:KTyO9$a)!^-ۦ5cpC>:X;Wǻ{m 8$ptkǐFb<4fˉTE_< XӘF24 >ʼn7ERM'=gPc@+o(RB ;-^v'/6=QC/UU*:Wv2Kr=nV&:; {g0T !c" %V~ 4;ksMgamީ)gsU-?]V7}mv[GnaoifobAP`۬ m^Ӆv8l배]zT|+GGPF6[D-N˦5|?4[V`1t,*'W^)|y2B TXp>*48H?`Ѝ؀Z(z 4Y2^_U2r;v,=jլcnI۞7߾DZ!kp$o~UXŶ zH3{:SwRDI'DPP-.|p( T=Ν3tpc.?u] $?K0 %q֪:v\3:%F᪔~=ݶ!LZfU` Gt XA 6FI ̤D1HSe^!P. eP. X#dyu=0XBݫ3.bSb]Aq#ubD)e]f*08J>@P)i9 g.קGU3 6XXbUh9S> endobj 80 0 obj << /D [546 0 R /XYZ 90 720 null] >> endobj 548 0 obj << /D [546 0 R /XYZ 90 643.034 null] >> endobj 248 0 obj << /D [546 0 R /XYZ 90 490.933 null] >> endobj 549 0 obj << /D [546 0 R /XYZ 90 445.039 null] >> endobj 550 0 obj << /D [546 0 R /XYZ 90 213.897 null] >> endobj 545 0 obj << /Font << /F55 8 0 R /F56 291 0 R /F75 7 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 553 0 obj << /Length 921 /Filter /FlateDecode >> stream xڽVKo8W(+.S4mSH-VczԢ~RY4Xp^>$#Q T*Jrp?0A%tư4GfNf<83z/ .eli ϒ0BngW0,0 6`;0 e<28yBb`\ڊ7)"4{rA$&S y'r%#lv_{asy%xZ,dB˛Gwr\7!@2zM'߆~NCpеv0eU!7vmY]gt>'_@t>`n hsEg<ތE80C9ѹ('xuS[~I0bO/y(Xx1OJDː$ .y$޼swvۏY;O:*,ݙ endstream endobj 552 0 obj << /Type /Page /Contents 553 0 R /Resources 551 0 R /MediaBox [0 0 612 792] /Parent 525 0 R >> endobj 554 0 obj << /D [552 0 R /XYZ 90 720 null] >> endobj 551 0 obj << /Font << /F55 8 0 R /F59 366 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 558 0 obj << /Length 1691 /Filter /FlateDecode >> stream xڭXr6}WT&B+id6v_zRF-%R!)@m<1bw{BY?>Y"%T:[nbG/f~| 0.?={,3>;9:YN|!R:zqreW/z*KH'7G/NzZIwL`e*XiRŸTJ5_h#nHwu5f,A` ;=p]0m am!@Ա0'd Vz3 2\8)98;:BE|e볧/_I!$ Y츿bPg),.X q$}:3?9\Lli>=g+l!bvX3'mfG֎[k,R[%{\NGȕzڰ4H %J_z?urʮg,Z81DAj:p凫%&L&YzyAm6dSL(qM"ޞ # gpsw3'j` f!c֑k%DOZ"0]aq.ВD=e ԉqhԮ{-qnLҝq~k5 ZOeݹ@]쯂 euy%4jҡ44x'lu^TDrL-Ŗ«)==D*ʩ~ ,,^P(&iEEb`+dЬ%jaṙD"˅$!m)޸՜[DD'8ȗ>tLGIʻ\ŹHUAU/׵\<Goֶ5BY ¥'AMG k+'}jȥ'ugVBDUTE .` Pja2H޼Tͣ4/Ei7.'N1oq8C}z GANtI =RK̷vB+ǩj4h#TKXqg]qLeS(UH;lLskN33cԨ PS' 14R[8@?pF>VAc,Zۧ]qWΩ.rȖAOG|MbOd$S5q|)a,Bn{ُwp suC+"E7}1Eo{/axS>&BΠҩXҥ3i3ILE 8 [B߄v[W~6uXl@͢^<ĵzeszh}OD^[mx3U[,Ի&Ehu&@:Cs%k a #>IwHei@MƮ[={ۼr[UǪ< k -|FPWn endstream endobj 557 0 obj << /Type /Page /Contents 558 0 R /Resources 556 0 R /MediaBox [0 0 612 792] /Parent 561 0 R /Annots [ 555 0 R ] >> endobj 555 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [90 627.011 223.061 637.92] /A << /S /GoTo /D (Header) >> >> endobj 93 0 obj << /D [557 0 R /XYZ 90 720 null] >> endobj 252 0 obj << /D [557 0 R /XYZ 90 720 null] >> endobj 559 0 obj << /D [557 0 R /XYZ 90 601.788 null] >> endobj 560 0 obj << /D [557 0 R /XYZ 90 469.385 null] >> endobj 556 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R /F60 365 0 R /F59 366 0 R /F66 367 0 R >> /ProcSet [ /PDF /Text ] >> endobj 564 0 obj << /Length 784 /Filter /FlateDecode >> stream xUQo0~MI:i/QƆXp $qpi?%vFx@|w\4!4JծOS͗UiS!'>"I^~a wWm0<"2?_Oۣeq d r9q1.")}*p%8V"GXS)Y2ŐKU~ SL%.cq#"@Jxq3SUѩ,jb \Lfgp[܂\ 읟 ~.,1{MWڕ*őxxXp<:T *M5+*\%n3BYD17 FbʮJ#[-: D [9qj]dUúK4C,;D#`@fm361uvml3Lj}L1YU]ʵNur,:e"v: 7| JBiYtVuV8A<q10J0kty=M8=ԀV\-J+<5Z3j[M{zqu9.v{G}Nu}ڍ=3 Qe*N9g|+fh8v|#VTmMLn>LfvH ٤-Ik]BGathY|G?lS;ٶ'tEo3~ = [ 7uQMBhznvsT}ٝr(5nnF'6-) endstream endobj 563 0 obj << /Type /Page /Contents 564 0 R /Resources 562 0 R /MediaBox [0 0 612 792] /Parent 561 0 R >> endobj 94 0 obj << /D [563 0 R /XYZ 90 720 null] >> endobj 256 0 obj << /D [563 0 R /XYZ 90 720 null] >> endobj 562 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 567 0 obj << /Length 292 /Filter /FlateDecode >> stream xڍ;O0 `` `Bi6!$NSrkeȽ_(Q*%U1ש="(]ă:#pTVkc9GUwj#b,RJ\ECDh&,gBcCuV߷k!8SǙ2 I 8Bu"pA( bs?tqtwd&"cq6UɅ"cfz\ BZUgW .=ֻ6 TIꩅQ*밮5ƞR~Epَ0|Lb)U| endstream endobj 566 0 obj << /Type /Page /Contents 567 0 R /Resources 565 0 R /MediaBox [0 0 612 792] /Parent 561 0 R >> endobj 95 0 obj << /D [566 0 R /XYZ 90 720 null] >> endobj 260 0 obj << /D [566 0 R /XYZ 90 720 null] >> endobj 565 0 obj << /Font << /F55 8 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 570 0 obj << /Length 3234 /Filter /FlateDecode >> stream xڭYmo~E>TΊިEpI&n! e6twίQҮ6E !9əgf*4 /"WL|ŋXnf݋O(uGaUn-ꮹ!xu:]$e`~I4x)hk̂~_|PIQytݗ/z7k7Ot-@"LbyqtMYBoT~*gFaR,`==~`M?ݏB?p \14hi`M׷h[;n03kAzOC{TϦj=Il4Ub"SkCpx΍n%2>rnGA?<7Ye8̰u'x3f@gڳ6)GO&30]뎉f/o$fpqʯd[w QNVq3ͼٺ"[ZȽ|?@V5.8aeɚ1,̏Q~|5xI.3_" p{t9✽-Vvl븥Vȴw4n<{ qnD.7Evuɼ|Ym~˒d48řJ0SCԝ~DC@3lcڄg[aY0?p*Ш~EA.rBu` 5bPo*2/ōzLaT34+Gs~ %PU3wD8<Φ> ӇL Pؽ&syrk|ݫװjA f\lZL-wCg"*΍#b'y-K:8&=zlB4Iny`9AcrTښV*@مSbrB ۂ ƹ2{-(C5Go 넜| @2"%L`9P%/ҡIVdy z6ߓ%* UY/D2 yj5UNNrS]vqBrV<kr&0G;2()IG!SG ø<묛rX!Q.qc+n A3xҲ8.. 20Ms1D"s7.k9# ;UKt$%X(7Ej@hI`0 6zLmZX x>|#'ќ#{{?vfx;nEfTzQi $`:~a^ҰO'eViEp/g yIv# U>QhB⹱DV+UEaP_Swq/  +dJBqbY~6n0Ȕd [lI^ER,ՆDLl"-2uV]ceڐ {v3vȢcFzq,8=iƌSlD= (tK>nR p|gIϐwB`/$ iW|"WQjg_>~e hjC3_X/]@Zb5fZt.onb?N}jgTA<(@絟 P+"ʂē脝<ҙyQdQƵ~?#<ˬ r6Z~{4m8l,߂7sX Jo-O:? s_aǟ_ 1'BPdTn$3DmDzO$paˇ.PjQjp݄_WLҵ"кP!(+GcIv1żdm o`_v+X==IFyBFrs;YMB ]wŒ7yÔ o~;nLK-1;~L=O#t 쯦aTAwg%q5%5? v0tV^.Ol#߻ endstream endobj 569 0 obj << /Type /Page /Contents 570 0 R /Resources 568 0 R /MediaBox [0 0 612 792] /Parent 561 0 R >> endobj 96 0 obj << /D [569 0 R /XYZ 90 720 null] >> endobj 264 0 obj << /D [569 0 R /XYZ 90 720 null] >> endobj 568 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 573 0 obj << /Length 2528 /Filter /FlateDecode >> stream xڭYo~(1\.@+j]صEwLjGd#%J)7;;ݙ̮ʃjzXk7 U~8V^Ff{ '[s/MmvSbv𵦂W/O̚bn=ΛH%+s^r iۙmt7YNŅ+9)H=}kiHUg )3q^4{bOhEQ$%2elBe\@8t}H1jA% \1$v$ S[h~s\FYPA;o8Zso_w.D#~4Dr 㙌aS\ܘ2(2uz>ٱ/O{xeB\~_wnP58Axls ]"g2*E)TDj"Aa + Hю P GRb#ˠWڠfFtj)!`VÁch}NL6RO~1<~:Ʈ?)ExT ^[^?=-""fJ ?`>5:yKvrl*O-bw|0ʺ'չd/S?3 endstream endobj 572 0 obj << /Type /Page /Contents 573 0 R /Resources 571 0 R /MediaBox [0 0 612 792] /Parent 561 0 R >> endobj 574 0 obj << /D [572 0 R /XYZ 90 720 null] >> endobj 571 0 obj << /Font << /F55 8 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 578 0 obj << /Length 2747 /Filter /FlateDecode >> stream xڍYYܸ~h%j`Zuk436&:zEf::v<>uQGb,6Mm p07QÆ~xoӛwh<72yϗz*7tnO]vsn[y5 XaN=(Cy%m&PUA86PImwQsaAD^9t0qePT*y;W:?xm8ܻohb8z ^cMn RFK0r`Sr߶:vZ VU'>-{^Gn Zs8b'(txngWq8w3OFa$.ɻS7|h5Oi(Zޗfߣ/ߣ.Ic]Tꦛ\I2>7GdKyn6'^y޽w{i.MX? }-Ft-FƊx`ci_ԢQӱۓ{]2o[$+ZKyz?Ip q \0^8SReC7ʥf] =czzu#ft[-3n)#ng;]6+ "Q딗gyV@r+cwsW5@QC'>=uhrcx$%x3'@hQ<&`J[ǔA׺ňhŊ5H:sJ1 x<0Qj+ٖ!`%p4 M,fY5 "z>' Um0Y42Q>}R|Sr,Q4T% zftdS*+va9w"h#kM:a֯ 32Ԭ[AF;+RL-Bv,+r@,b4Cޖ:TzѹCry(~nk 'q{ZI: gF8 AݖίL)BY>#L2G\ 5 fwx%Ӥ=hn IfI8Y8;;T93U~' -3a@4qig?jxp ^%DW/e,7@> %$iޯ\!G |) {xzB?^ cANs=QFHab:'DVdXEQwGDZ(Ew#iEa{Xi=d";5#,c˕SW.0,zAp pδ.8:iMA pz^@FZh\<γ`vymQbx]f,2ϩ,,9+p># )9.&JxbcD1Rv qH]\ endstream endobj 577 0 obj << /Type /Page /Contents 578 0 R /Resources 576 0 R /MediaBox [0 0 612 792] /Parent 561 0 R /Annots [ 575 0 R ] >> endobj 575 0 obj << /Type /Annot /Border [0 0 0] /Rect [118.8 598.138 204.708 608.138] /Subtype /Link /A << /S /URI /URI (http://fsf.org/) >> >> endobj 97 0 obj << /D [577 0 R /XYZ 90 720 null] >> endobj 268 0 obj << /D [577 0 R /XYZ 90 720 null] >> endobj 272 0 obj << /D [577 0 R /XYZ 90 658.585 null] >> endobj 576 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F64 13 0 R /F56 291 0 R /F59 366 0 R >> /ProcSet [ /PDF /Text ] >> endobj 581 0 obj << /Length 2974 /Filter /FlateDecode >> stream xڍZms8_ɗSf^-{MvwkfwHͩ-Diܯ?Hˉ{әA ":(z.ËX(߂׷/~zWI|f*궾WxZikjeYg|t+y yt kiNVh]ooE2h$bʯ,·NoDز_Edzk7`KS]_%άDLm{֦8s:wþq^mk~I586 msdI`h1gNAR`,C,^#Z!H!*[5ht3r1=L[FxLW:oqM}{ۺYDZCҺjgEq,2t :u86@'(4v8t2nAydrбQX7-h#w|$Z @*gE,Z9t GZFۅ,+L70?q遇6"C<_>Л^UH39!$C<Ӧ "_〶]ށsvUf*~rЧ -3mגo- /VtTQzoE"7ev]?y4Ι-{VH$89[$½"hVf3Q^'~_<є\0J DOÅD =LM洪Z@f6D 4S-ol*ҍo!XNx H0w}-Zc[c#V.gL"q&%MxK |:MVVkgxoZw$_YgkƆG [kL3a^h70Jl,nu- A75y0QbZ&;J9RM)g$)g2'U<8oAO`šgUSh<*OW 2T9AȍRYs,K5}Rc*< |GznR1M&sq*San}A+P& &>Mӡ%FYzfVt:oGCt9{;aGy`lI A,bκ5s,rUn0pKW_|>cz7Υ'LH.BKednEV\_+z+הedy/ kH~/%h'z-qU= ")U>͇K`WGX7 рCtg3ھT=Agy\yA`Zo8^F792)&ļȢ([XÄ};%|eM޼q1c/_G;N| LU9lS|۵k%Y2,kLAцaJs]7rGEE bmeŜμ,j. UP;E M!%]a銼ط| ݩ>C(z77?uw?u\ $+c~?!bAq5(ͭ@,MK;+u Qd\bT|U1rx/:k ~gp~8tLzydkLZ`B4(ȕ]lMbʀM %^g?C(6EL2=!0Zk VDr/ S!u>dE wF j^IS}4f_E͉+1w%ݪlzjiPwzt0HcOy\5g_MObQ-/;$MjmUKvJK8"}2)\r;/A /tXPZ+Ob3 hdPf}G-JލCB}mQ+^!_r` :> endobj 582 0 obj << /D [580 0 R /XYZ 90 720 null] >> endobj 579 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 586 0 obj << /Length 2776 /Filter /FlateDecode >> stream xڍYKWJEM-gS8Wf4߻\b4O`$n8 F"P!^~ ςqI{u>owa٦(nwQyDzy ncf(ۆD4w> Of=n7Y&b8__wxgp 7tv j Q&9:LS`zE]y?V[Z>ֶ| eRۢWow`I$Rm]./MU鎶+.膮7msIW!b{]>i7*{Rw݄M;~"C2oc[I#YfaA4v0Rv0LGkY@$`01EAH@+:0n[X=zBz~ha8S;:P cl6jkšr>>э@>5en m;< =%{dhފRttqDB !YS#v}be=2 #o_UERS=2&_sw~OyPNEnq}4cbn@C 7X1]6H~cX{:9a¶VOQ>=1x23Lc[U*6j")^9]E"+hZdaF0,& (@:R&p^3BZ] Bwl}O1ΕÇ$ O$[KJ3{?gS,*L ireAƿ{ ͜]F %쉜 {:38jՑb8'._S6|B{SBF`NV5@zJ"K/Քh24?Ʋ{7{BG6,b҅o$n77y!b`i`xtpd^YAyXР}C\BZ^\S y-v6vo· a oKA,pqűH戔\kYK榳͂eT0-=AX%]+91%Sػs ](Wӥ r"1q C~)YX9YMQٽ#@)#*f$JUJ➤%>39^Ra% WLB#_a.J.J5 29Ζ5*$C#WRPxx *r6؉)ԔD-'A$*;AģX XI|mlk"߽hJMc"!V#+u,&WUpOkGm!aJ%&] ^|W\⠁BV0:xґ2}`o |ɦ۱1AS9^ /S;Vytt"vը"6({quԷ!$yR|M=:,RRvA V*Vf!">0[Vٲ.lMԬ&X5,u `\|/&dȫ21-IDu7iQ8yvd"\,̌Fk8ULt=ߺ"$K)!YR!x:[M+D0ϝ{t3dw$$+՟ ::%"|9s~>vL{qnE\'x:BBnM՚B Rّ tS ^n[!l,IrXH%0p,386KG+g- giUJ!D\{UMހ #gx*|0H1J qvo"< 06K6 dy/'i(g^vbX@u()^*MLq, )Лg씄vu-s xYM,{IߘI./k0YK'\ZW6%8[L<]K"J(@{%9ڇ\F#Yk9D,h"1/{?qȤ0pB_"Y*@ U4JO- +%}<4Jb^n1v$ D oAZl^^td3])I+>/ŗ0]@ܽ.܅eSj4vWOd" endstream endobj 585 0 obj << /Type /Page /Contents 586 0 R /Resources 584 0 R /MediaBox [0 0 612 792] /Parent 583 0 R >> endobj 587 0 obj << /D [585 0 R /XYZ 90 720 null] >> endobj 584 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 590 0 obj << /Length 2590 /Filter /FlateDecode >> stream xڍYr}Wl%`w%oHٲe1N< ܉ſOb1s>}z6ڄmpS$ɮJ*$io߿:no^}>6Q*Ϳ76.6I_;_A˓iPCן`$Yyv_ލ{,tW&/]6Vþ*0-~`8 #}P5wZvtoAg9pjI0CÕ֪Lw'6QK#B좌Ow}/'M+2 xEpHP{W],(.L$ǣGcwijYԺYT4#$h@!|I cmh'Zg:N " yf]xIh;6*vUV7Q}+~c3pG9+o@5W ]S,G FKK-v/`>kOq|6Iu%EcVQa ,ͺwEDh! zP^B+=n{?"heӲ BcM(ah"(rۢs!Y#3 `}d$#NLt~9L*w#KP(X舆9tx3Xs+[yS +nu>!E1o (eHmݿi?j?y'_y`KbfkJܦ성I^738tGnC@6f# bYSfR,l@Z 80 i3)ޝwDK~)N1zn;Zh\[8#'2RKTCH5Zr\c˗dڅ {&17(gW7Y;/i,w i. CT0 k8MXH'A@肾 v#^R3g0FtSsQuLS5(شD!b'hxq0=> [Fh|dBkX)(P\h8U-)5ٜ!`o!\D'+t٥GS$Q 4CT\[NrFAC b"σX85n,Hna|8ebQ@=>2~bHJ];eUz͑ o{UF2/HgP:@d}@>JIJg xsJ?pTj'_6j"? >81.r*g˥M+rBY W*T(0킂-N$cЏ/0Z=LDp 4?i!1>8_\7q-g<Bz4VFhEm Ĩ-V@K-w$Me_J+˰O;05m`=31Q xPbAl=J`qat'J𓱆KO(lTy HUqr⠦^aqU,zuON+g jzts@~ɤW`賓b%,WnbnMPxнB;n$/9$.n8U[+ P(AyCm_Z0涔nzrk6O"!Z &`ALsVv/P E_ԤY{M %\Hw3H5xQEw lT*I& %d@{n E q=蔥d㥣XP@v @>KiJdifZ]s7-gz)B* ik)<*V6I6= ъ  W8_ ^ &BE@0/D et]qm,u힊F?Ɗ7[$ Amks}Fe|OY͗'uo5>=L(C9ߖ;oN!<"L=O1*Q@ pEjȂ,PS1/&VD^iIrpln>o98ݕeFe"I-{dFlAܙgP8ۓ- vš\2|$?P@鏋j$$P][^> endobj 591 0 obj << /D [589 0 R /XYZ 90 720 null] >> endobj 588 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 594 0 obj << /Length 2639 /Filter /FlateDecode >> stream xڍYKsܸW| U%M;{ZF[UVJ9PC r‡%_A @4ݍ=Y 8^Iq9 θ/o"w /CE n벺|:_@5~:8x^sy IplX m`Mqe!]8FQβ"YEq?L؁Hi'۵ݾ=R+ Z\jaz3[mS/39:]QoX_QܝIyd^CGP0n;2WQGpPcܑMQ\&t?p#Tfe:t%[k%faݟzF5,jp Ms-sDFz_ܩ4жkZg& pM" 6bd >++B xv#{a ~@:+OT ]"T#OZ9h^%"EH@X:#v+ϻjR)L,c[(l;"nLطN怆-ڍƤR߷LAW!.10"|: qr CGRBak=vSu]f ǪFIXH7W>4<F[|vٌfGa{TU?{<ra)krb!ȉHbmWD0|IsīPtS&P>338qQOCWѿ5I% ׾ NrHX%W': N- ɝ1㥷y @^g/6"r(8PN K#u ~&:9,T+BsX5]Wfgδ{ʞA̭3@s 7wuz>7?܋Sſ/o endstream endobj 593 0 obj << /Type /Page /Contents 594 0 R /Resources 592 0 R /MediaBox [0 0 612 792] /Parent 583 0 R >> endobj 595 0 obj << /D [593 0 R /XYZ 90 720 null] >> endobj 592 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 599 0 obj << /Length 2769 /Filter /FlateDecode >> stream xڍYYs7~P%*S;7eq*V$Qpi sH#'ŇF/|~U^Ir]*$_qݫHpyeU^Wa]mvSQtZ2mmIv̮QqV"v: N04$,nA3mQ虧bzDŽZ[mYZ.?,Ӝ>)zEZ[ ^-i7(7RwZTµ򌵂@H@|vF mwawV\Dm\oYWitӒ0{`L3;'f^a'(DZ&umz6* X<}4]\0Ks{OZǣ Ti&Alo>/,T4JA/Ó4_ 4Jbms@Qrp8=MS:ZdI<2 MA7Ε椧Ȇ OFxr0[qQ+l~Yn((eaPr9\.419v)MƵөA9w`yw"i%B(Ǹ/d§ij҉R0 ݀]٪F˒{cF vsɃf!)z 7Qi.vV 9ksLeZ܃jDyy 0VXiIV[~!ڼ$Ɏw$q%Ւ nt(V$0*̯zEޒ001پJgXؓn blBb2 08ڛ!N]f6JҨ@~>794ŵfkg(WYU0/i4s?#qv$L*am'bJ_s]R.e59 R#yOIY:`Iɥۮu*_M[s #6Q%IX Ϛ+#wS]sqKDkH>OX{87YLpEz,Xyp1GC5jg. |-}jsrn H9V 82sBVpu YB{}__X؞x(FqQ 27Z'6!7+,^" k# .(b7- Q$\)%MQ@S!l3Xg)DB6U%`5-L&Z.mMFh;2mxek!;_VP"(Ǹm̑(-\ 3Z|L=#p FaM7wJMQFԇ(|" jGR"wmGINFg) Q!8ٝ`"πiP~c'P=cσI7@QBNG(,*fk̇F[`PWWE`1֥*Ͻ!s4/$bgV‘`˚DPpQAǨoІ!0Vj~p{{J{ P>2Fļ7n>&$T\. Б =b ԈT aphz*@ m"mj1$F4 N ^yP[yTƨmOwH"&?00}k3V8Th} /r:"':(ݔXc#Hf)HŋVkD>J7!<.ɀed&>Q^PaH>zt#%*h,82UU VJ|K8,=Mn7 O&?ܓ"$ҹPPG-b6s!f[(,dJB o piS5je7 ;[$Eh}X2frI C1Iam A3:KمZzѪbA&ki]},kvRNΑ wا8KmCT?Ri&(o5%F 0ؗZQ z .<`?O#$>0c)wa߬? endstream endobj 598 0 obj << /Type /Page /Contents 599 0 R /Resources 597 0 R /MediaBox [0 0 612 792] /Parent 583 0 R >> endobj 600 0 obj << /D [598 0 R /XYZ 90 720 null] >> endobj 597 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 603 0 obj << /Length 2257 /Filter /FlateDecode >> stream xڍX[o۸~02;d-I{rd:`DDeG_3D* @D7Z|̟%aV,߿ ywp8?E3/3?+깘Ez*" CsXy VCt]0JC/N>C.W,NWKHaX/>|yT|ᷧ5)"?aMOwO{TvX" }ީbއ9\Qfxm7VU@^kC)uJa& U WWM ZbYu>>}9 /NRDWm<{UȎ sU '6ȝ+# 2o(fG < NEQ%I.eC+i݉Q ;Ш/BW? f 'P543#UuR|%iiB4כR\rTrk|,e M ,#X[ Sv@q~Qgu_onurׇRms=L,CXܗZPYn!l7倵 t!F 8Bxi 8^4m捒>n;H_="eC =g7 +=l>> )PQsJalgo(EݐpMD '0";"Davo-Xde,S Ӛjp(2s=aȃuOԝ|$xPl.m]58O\~P`D,tgN) ͩLcSħ@1 h0F^h<P `1#y%S4rY 9 gk ,@x1 Q% 2a"p0xFIO`k\B@ d@7/%Xv Y34aU1np:ae$M 0-ls˯~VצHO|%h\S*|$1$" 3%}֡s~4 X ǝ]ߨ ,7 G%ld|n+sHz#`ATMA_XQNv`Ig)oBH4%x/+#eFeL JX4x ى!(b1n{1|T]NBp:߇/X+erļ{pR_v. 4?DHZ׺SW2n0+i:_?s}5Д}EDN+4j ,ƆB$܇"%JΏFiޏL4w:d, F V溄,1C{2x%"*~80&qPȶ̥kF!@yDJGrEz?tnCB >( !e13Qpǻ+}lȽH2T:8P&ڇVqtLĵ),խ6hAFi|8w[b}&IA4bA@kXm01R|F.;*Fw[ζp i\ =5mbʚ~A#O52Mc %y*5=ɘznF*YN{(%֊ %wӷ|- ߵw(1k^d _8Tflo6WWך tn@=qΩUz~ F HC/tBzΠC~qWSHYAѰ)6- x zB8NNlY=vJɋH@RhHUqй",V*4EPO$_(HBWdڼ[b4?l éiyNY)NƧ'LZ%q7Ȭ -̫3/F R4+]7_0]X &n*|<.&5szk;YKjS@ԏnף_Qo-T<|mJJh:|x^cPiȂusڬ>9Q_b~:YG>yL*2mΩ%T[ I:銖:F;&NN+lC^ w=5~ τoy0@fDrZt&&trX)giV endstream endobj 602 0 obj << /Type /Page /Contents 603 0 R /Resources 601 0 R /MediaBox [0 0 612 792] /Parent 583 0 R /Annots [ 596 0 R ] >> endobj 596 0 obj << /Type /Annot /Border [0 0 0] /Rect [130.994 626.119 291.356 636.119] /Subtype /Link /A << /S /URI /URI (http://www.gnu.org/copyleft/) >> >> endobj 604 0 obj << /D [602 0 R /XYZ 90 720 null] >> endobj 601 0 obj << /Font << /F55 8 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 608 0 obj << /Length 2657 /Filter /FlateDecode >> stream xڕێ_!%Ksy^A&AQWIR0Џ 9s9s/#O-h'IXbڿhnM* ˨Tag᰼6I v%v :n:kLI=HCH,B^Q:Lt YChݻ?Ha y2t=Fvuϣ+KfyD'-o VǽiqcK)UXQ\_D\/uˋO>2O8 pe@4"nmfu@O7<\``xB} Mn]oNrt0;R0*PLű](hOg{~;A/_Ta2Gja_cS;']?wṲnVeX"֠ fVx9];ܾ8bwIgh!fäT1:o="nvqg.x:CGGd1Uߢ '0[E>:)_@Ǖ-Y@Z('=MLBN,\e )3t.IkM2b'Rkϐؘ28FܚpHԭD3>ȱ,.%ŗ;1ʢ0- l.H3* YqDk*un9 6Qa3b]dU[Pv,%b?:w" s>PL>T\nMGQq 9y.ސ%WT!:=}[/ ;57l{c]?ĵT d "*D8tHtqfɸn +ҵ<),nyV(Ll; ]RW CN8'+VakCg,Ynژ{IEĻg{l48,v]dH>~7pCCIW PJH!O?SIƢQ{0XS1&JIGgFT'|_/g Nr@z2;# Ӂg.1 fYO?z y=Bʖ][^kpK5iix AW\A&U; ˔Ix5ך=K8 /%idlEd~-[$%=BxIf?_{$¸^2QiZý*GMƨi &p RЂ:{l?YvW Ec塓d_ugsLp9 ~˄p9,} GIZ?XXID?SIͪDt/ǭv%(iNBJW"EC}a`.a֚RaYLNR5Q7Rj4u4u]*{ w4Wj^0{(B8SW :u ORuÜ=j;kwlKYp2T>BAdWhW2^qmM[3Fe(Xyd"s:6F!N'XXZBK`4obmkZ Xy.7X% S+En`lwMTȏ,qNhU.V9V)ofl=,1pjdϷm, ~9N\~Q_?#%1%BFZH;M1l:^*?x++cBǺN*Wo fd 2=|ނUpÆHf Pl&{qRE7]ӏU tF<ƶ󿥓 endstream endobj 607 0 obj << /Type /Page /Contents 608 0 R /Resources 606 0 R /MediaBox [0 0 612 792] /Parent 610 0 R /Annots [ 605 0 R ] >> endobj 605 0 obj << /Type /Annot /Border [0 0 0] /Rect [360.709 372.823 446.617 382.823] /Subtype /Link /A << /S /URI /URI (http://fsf.org/) >> >> endobj 98 0 obj << /D [607 0 R /XYZ 90 720 null] >> endobj 276 0 obj << /D [607 0 R /XYZ 90 421.345 null] >> endobj 606 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F31 609 0 R /F66 367 0 R /F64 13 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 613 0 obj << /Length 2716 /Filter /FlateDecode >> stream xڍ]s۸=R3O[ܤs\ԇN$I~l ,݄ݔM$2-nMHPwo O7>eMʰn%C}}oq6m$O϶ʓNHѺVv'Ɋ$Ϳ{0,bn0f_(IO8:)6 M4-OȿxRatn5+=ʆap˙g?HٓS8|4~ɣG9rJF,6JvQƲx4^ P> Fs8NWp8<[T+Ӻ팠Ϗf%QM-"̵Pi*y"H" &$Aԟ(d]¶Ju<8WX< vr+&Wk`Ӄg d^lCT֡ a4OZlAWTFΪ;8X"Lyװ 4TDW_ e)<?xH-,|2W5,sz\nq(gî3BLEx;Oe Yr"w"XXft+ħISe: omǖ^@}{$A(]7,j$$oB?5r VWVw1Y!]3Ȃf*+*g{Ik`@d,a0 T'=+Pzi/(kLTO7 xbxβW!$5'y0H\a3hkI} mYIb0Z^@aFg$O 3zT\nIpcL@¸m\& S6uqJ@q~Rs1nR_b2Kp|g_e(_R 7oDbmF_ha~$3_zX\sQU)}> E&w96rWx>7n_1lWmTX.!V}ndc)Egn_ ~碳QJݲ7͑E^] HlBCNwrng1dՊx݌m̽pZ /C+$[H0bݽEWFAn zʬUə4 r,ԍE'?Z -(ͳu_󶉣Sfl}|Tҟ' (ou ) Onv(ȇ[F؋O*8 ¬[I֝Tg"hʌ,;ns07Sw~c!^$KҩU?ʐ.|~ {dҷՉVs9E~&wj+D}!"ռ=ᖧ3|G{lN=nȋxe%?.ā]I8[¹[ua_q> endobj 614 0 obj << /D [612 0 R /XYZ 90 720 null] >> endobj 611 0 obj << /Font << /F55 8 0 R /F75 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 617 0 obj << /Length 2893 /Filter /FlateDecode >> stream xڍYKsW| X%*veV[Y`[_zN{zu39/9n8;&Mռ9hAy=-/Vǟ&<qy_u'qfm{$>v}SkiOq͟'(?0 ﲛH8Lnqp0p} = c|9vp/ <ҍ:MG/0u+Û+OK.MCm0;ML"-d: =1Ѩa$K "UPٶ݀kyBnJe_=C"| byBb&ƩZUuÆ kIsWCpAҠ;Tb'YƊ `i[J|1Bttexip$ꖀh= {6dRtROTձˊtBa!܍}e,_oa^"Pw %G1ĸ(>%?.#[yj}"` ׮ ^e$'ÜlIbJMf CD4Os>_!fy'EtfzS^ NCofQUc]*Cz˦K4'45#Od4w$ۿt 5r- ˬ/it5#3_rrXpײ|ݑ;(" V~/5:q^hJ.%W[B~r`@>Z);ܝn/^ PNoj fe>@ ~::z(B)Sw 54shyvQE>^0&Y0ZgJ:w+2Hq9սz=gPgh[[r}{pB^x8H 0=17xYOk^ ]Dr˟uAS/$8j 79l*{.d'؀fJ䣷6_ ҥSuS[' ̗lf?>E`X/1z,P(^%ӜA_1y^At&5aFMߏ.qɇpyi`J(ua# h`Z&<cj *#a".yp6-+6Ff9 K-P/Û J?|zjc ZEz7F2AGqYҬ,$s֗$-4j_GU%5IlU-Oǟ۲ ZO]ƇF AhCS-P[\1&{Dn )zn%\*T6Rr>Móck+VRÆ鲚qQU6#![)z, =u* m+`5iQbL0~2ÑHNo|3ơo WN]3oaK@ë7&a ܴ(ⅣH|qUDbeyxO*v"^٘J̺nlnti/ruKJ_<{ǰ$`*s;Ͼ+@U ک5Pdtq'p.!'۠%5<*4[RQF|b_jHX9X_I}\ź4G|L蘧ߕ1:()/7۳;6VJq"L5Kʉ1quB}o 49pDQ[ʯS%_=Kkq&wPB%GI&頳u ,Km endstream endobj 616 0 obj << /Type /Page /Contents 617 0 R /Resources 615 0 R /MediaBox [0 0 612 792] /Parent 610 0 R >> endobj 618 0 obj << /D [616 0 R /XYZ 90 720 null] >> endobj 615 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 621 0 obj << /Length 2732 /Filter /FlateDecode >> stream xڍYY~_1˪OG:'{6amq4XJ"5]bb]izD;n7J>;T|J=åڻGnКO4Movg3\El椧2🇿zSE9RevTin`s8լ-SHf3/UT#VL|:$E4}jd{aҲBlFl=uqqܳrx6± (Jw-Kzڲpʣ n< 7W2-_'IK<ڈ1KW *s>ĿqYdeײw>YQDv^-6 <˭ԳfzCr '0qw3DiGr'3_eޑ&Li %hۍ$a%Zp7k4 b/=Iyqm%^B-ByE4s 팸+J>᪝fml$#~5!{ y]ᠭ-VYSPqDje2|y|j0(F!6zuӁ>| Ɇ[Kaf_[aҼbI#iֶIVNcF(ВD2;Sjkj-qjre*$CkA"Zˎ#.Z* L h{*uE7aK󄙜2qtBZ|a5"D³ -x^ч2pI1A0}"࣑-72*6 8 8žsךx/B +/BTGt$63H.@ư~P @יJU\ s5+D,SFaC$*֚@=G0DLMWG67](_Ϡ9ʁTDD$p/2h4jNi;Qcހn?zBfƕ- NhLq5TS,Y`ؖ!aySp`SnjF;+ G۝e;G[J3 ;) _0TjpGA_Ʊf/@ 4%^c [}(?yhe j?m!̢SPx0[_$/̥ ꓌^cnYeR* _ 00ȿ sR;|uƂ<hݚ; iq:D941q˓34}c()"HF)uցSXx_vr0kfؗPD 24Mȅp޸%G&I2 %ddx//ŵ- ]rqCM$Z[K8O x.^4fR 7`U{p?Q%ޅ#"X v<(A~*L$/?%nb.^$BԢ’4BGNjAB:$u5z׻&$zfOni絍]C7A||6ya<ՓB2j/DFF > m.enDRY(䭡 6k8GVV~Uhs268?P RMh rqeiGiӱR/U &Pxb/x* VOIGbVV\vU&!]*C(+aAp /;Ϳ6Zθ# i 7e>—x= :oVT`,h5†f+hcyo /,XY.,6e/BoI8lyc]ղ˜|Uc_^W/MiI$,)'4 R?x(gѶQ3;jMdWUt;)Z] W歼'%jF8MzSΞ% cRJwT]I"wBiAe1 iL <Oα endstream endobj 620 0 obj << /Type /Page /Contents 621 0 R /Resources 619 0 R /MediaBox [0 0 612 792] /Parent 610 0 R >> endobj 622 0 obj << /D [620 0 R /XYZ 90 720 null] >> endobj 619 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 625 0 obj << /Length 2810 /Filter /FlateDecode >> stream xڍYKb =iZsq0{.AGRw3GRTWԣ[;Xb,~`uCH;=?ʷ#݂>MS/‡Rsௗ.ʃ]w<țNLHcZ3ھ9qA?{F,s݆4=)l\.-KSӦ<N*DӠ?֮>Rc x=^Vc5] 4*َFZAۅSb>W5kܳWh\L C`NuK4x>[-n!d0wc]Bp%qF,bP@2Vzt AOn&`ZKH'Yـnqbx/rVfԭ גݟwMv}E,z:twJػYYPWI&SD܅Ss8hdBu^B@;B!bp\.7MZ YI5pqaDåQ gELa,TS?&hB(+szNHJLFu9,3ீBc|]8x,=G ɍ\z hSm45!Y[+h+2 w0 ʾF}fb<`-{][tՎgԸQ qLL]UOUVi& oEx/ڭ3_G'tc E 7D/>Stٟ4/#Qb8@&% xCЦ#4Ɲıf! Q{^:Q7׶jx{G]tUpq!m]k+G,&%!LK(Qgջ2[H<ㆫk3J藥4ptynӥ اUeP3QZ.h̔%#E!8 5=QEUD N/;z7r 2%VWFOF22 @#"lrka ЙEp.?#˘I\P2K6 \"LJcިLdԔ|.Χ,: *sr7~Y[8=2[FQAZUw1 5I)m Bv]O,_wyt79(J~*C["ܘ3Cmm2()g)zEZ8-:o䷨[DPE- ߊ-q &Gڒ O|@QmB:眿];1,LӌEH*;h+-HDr֗"F M2bS WDrGj%*gzw1x7+<ÀsϊuZZn6Ճ"X+Տ_k{dբ@$@a颶̯u'or"ܻKa}͊Y(Jۛi>`UJf7 a3wl D"vd4uͪD((еll~)-IFwޒvBD_ Į2ePԞ1闩e(Z.2|8O9l;MTGחMR%BE3M)Y;׀RoaY Gar }z'>~nLr)acP_=> endobj 626 0 obj << /D [624 0 R /XYZ 90 720 null] >> endobj 623 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 629 0 obj << /Length 2958 /Filter /FlateDecode >> stream xڍZKpwꖔڈ daONq=ZꐒwǿU"MX,.j⇈2zPfCu}1Խ޽ҩpv㞚j:?z`B~Z@g:m)p=oԶWQ 3KBGr`C|$>š,#/vތ3ϭ)\Vq32"^ye M~ڑtM_e[[l|#'}թW?ثjqEùOɮ| A:*T4tRI[-u:= 2l]cZPÄ{"3HgeWz;>9U KmؚdQtb1()@ !FNP,\*t/sKRJK8x'?;Vy=m0@]iȗXVF̓,S#WT$oR& 3׆V7V@@3K+Jeteyц Ds&߽%~am}ұ$l[A aB#ƶ-C?Kt]NOQ]*$+s>IB_ڼÓ(*Lc: $xwi#< lq9U{6>KZ9q,):wUc$4 $jq2B`1QIxD6yDo'lŝ*a=`VșR`l<`qi ` _85mF'>yvؘlOF~C*U_)7ɑŝNeIda|;.)U_$g?$k Mj r3ݺd-B;[ krI)hr qebOG,| ̊LI 8u2Z U;J6v6j}h.FIMY:0п lc A,]]Owb9V6hE5]8P}+_:n9QCa^&SMfvM jEtìLn.! v, )/4HnN`MhZtf8h\!>Ѫ4.蜃i$= 71MLE},U&]Dm,XB&Vrn~H{P{zs/_`Ɍ >6S _;Tz34c>߸Nj5uPfCUIjHAl 9 `'dĴ'pQ\ mϛR"񣺔N3 !3/( !o l¿oUkε]?hNӷzT!5hrwN,e+FQ2?GVax~%]bpg{?0B< "T:%yv`A}sNb' 8i\ixo*v 8NmfM}& .K eRC~Sq\+o-?unocO CBf)^Vˢ4|tQҿ0C׮!r˴+ \i?5J' oW-пϛ.f9y(ɫfjԵwr_q2/'``Lllaj63379!½8s?_>VcOǗK&s~ yU@PBc^k0,$x{*n*ڦիD;^0Zv _<+R>o|> endstream endobj 628 0 obj << /Type /Page /Contents 629 0 R /Resources 627 0 R /MediaBox [0 0 612 792] /Parent 610 0 R >> endobj 630 0 obj << /D [628 0 R /XYZ 90 720 null] >> endobj 627 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 633 0 obj << /Length 2549 /Filter /FlateDecode >> stream xڍۮ}vE]&m-"8@Qt K1]R;7RM~9$ùXmR!y;M;I j_6<om7,7*҃Z#{N۴8w.KXRBg>#7=XP##il cL PhDv EXA-rVZe`fwQi8D-Qm=m&Js20ebJ!mpbcD@)NwIHRC KΕ΅&RF~RìV:#㓢%:=| #rAO~Gɸ\O"I0-e`2p}aA>eIA-u%.b$۫fCp)=8Ġ> YDu2{^k[D= 1jF/c},#HZ+cբKCHƹ0K +C^VEY^5̢oU@j;"t+ɰ&n:?٠X,.$ix.B7{|F  jld"|ħ f\g;_z\/־! +$r8Cȓ!!N&BJSBߋt j^X03/kɓPykY寻;$ endstream endobj 632 0 obj << /Type /Page /Contents 633 0 R /Resources 631 0 R /MediaBox [0 0 612 792] /Parent 635 0 R >> endobj 634 0 obj << /D [632 0 R /XYZ 90 720 null] >> endobj 631 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 638 0 obj << /Length 2625 /Filter /FlateDecode >> stream xڍ]~Ţ/KJerMi$4}ɴ͞,(E`9~P*Ep~Oo7,A?<ңn|??nȾ+uGXy&=ujߵ(EV7Hqe;z{~%beɶ"mFZ'fWd= "SU#D$jg?XZ]171ζr UwaINƣ35IXDS4` }O?Xof2Hr^# vv #8͗\H|"aJ ߅bIƼj~*W5|aDJܑe҄T_xܳ@U(IN|ٯ5) =xr+⪲yq~e-5G##IsP%ݩ͡&*T|Ԥt+TJݹ18@`PO``FHd0M\]TyÄz%-yyծ)s-0tU>S>=9*qG4'Adc>a0w5?_QFR"lF]$fȳq3$E'Jb{"H= ɓLs<0 f`0"ywy>q gL|{ىm)Wo!t.=+r.Ŋv/{ y[6ضKE w>>P)CcZVHNiW!8!kpC9#z׺5a8 uJuPP#Š%yhœ^]Idx8c@GeBG1X҉_RA54r{;/H 3bNi pj{|6I ?ņYpܜ>Kjg6Kml^>pT q2kƵ/+*W  `\8,q~$jkg'06#!IY9+~qW,8^[Fǻ4?C ox[ٷ){n] }K~@". m^zͯ8ӢVeREAҲP[)nH1I,<0w*]taW= ȶ6j!0k 1p^+LҽU $ģe7w9L o܅+{I|-vⳅDɞJ4Dؾ, KОʰ'W=a\V֒c} gifl\DJΒ-9'?L=BCyʡ[kp띂OE殼+u~S7_  +Yrn~wiitƨT!MU*Igǂө^PhT`XU޻W:4Sn!fY0O@ +ML+L6D=v7-e"_'| endstream endobj 637 0 obj << /Type /Page /Contents 638 0 R /Resources 636 0 R /MediaBox [0 0 612 792] /Parent 635 0 R >> endobj 639 0 obj << /D [637 0 R /XYZ 90 720 null] >> endobj 636 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 642 0 obj << /Length 3030 /Filter /FlateDecode >> stream xڍZKoϯ0|Y=[ܲ`ė v-Rx_Ֆ'Y$Kd꫇ݤlӛ(es;J_n?e:&>D3|_&K6y:Ĭ7Jp=Mb۽vPEțk_P&ΟຖUS$u}?}iCfymeMS>fE{(m;mpy:ӳJNOQf|N{~=vd˒y\bN󇣼Zq;ۆKe!1ś3Ins{]^J=e҈8L|6?=TMN{;hIM a*xnq!*=/7bdf:u pt|0iSbAr4mi Ӷkb}g]'!|S*fNj={&bg &aDђ7dpt U6i5`Ŝi?#"oI]ZQn Lj&W'+Kn&0iӅ<mvEϡFoNa X:W[ܪEi@l!;0-b^` XO ՓR,/YO$e˨q pYp3#yxCju9Zb.\"т[PD3>xxoO׌Ws;@ g7@a%OpgZ^ (=-G1x,4*`~2g\™fr{zUX^\ Bl'6$&[ϐSq#G ^iBAt H1y &Qt>?iwd$Ci`۠R/@M/ӓU2R!4?wk4/p!G&Õ!χ"Q#!RN WY%vH)B琅0K C{=joOx: Y*S xOv${urRt#̪DODOe`*lGĸy>!5OQDꠘ4=CƲgTEqh/6ܣA*Zd͍<%Sx b%r\Lrqyr}Ok ᐐZ? 5H%ۚvWNP)Nn`٪X9i C5<1`hg$N ݉Մ)29dWXȹ!/eSnMsG{{pJO954o%>@a++Gcpd$f^4zB" =!u:ɵJG5EL`rKS =bDl_?N0go r=xMsZW6IgysEk_y +0xO)Y߹s4 v|A1a-e/:Xzik(o,uy@i.=h%My$v!6#\'bg!)N'fԠpd,LTGmqo!zQʴ׮ ƴf}3e+YdC9a\j' !#R~Υ%`cVN55fLu54k(wB #bNNRkRW\r I?&jMK HfiMh r5lJP7lp S/ѳ9(@a=gJM>׊xԣ=,cN`״;]ۉ`aaR82VE?UJSRGu_I슉jWt/ %xY[Q᧜5{[Bq[^ }T܉vcI`v3Tr:>KAlb`ZO;irgȕK %_-CE Lwq @Zm2K),)V4,WJ{}]Nο&=lj(SGc88*kr(ҮkEW #QN^sݳ,7jܰ߬II{b<]vsǡ(#҂eKfaj (Sxx~zXjꠞ3iFvZ L:>(hm |z4sMOGL:e5nHZjG~XԖ]=%Cj͏k1I/\ f&t^%."d *"L?Nieg":lg̾;plMjEܝD )ȦDIQΟ9uNPP*| fME6i|(d[fI ad\>\3ŮSN_7M&GQuT_Rpu9SNt&ZlyҔlI;ciq2Fy^Q"×#|='nѩTWnu'Sί''Lq2g [ T>0g!EYH%ܟ!R~6Iyi\#ix~ɪk]2;VSp-^I>(oS t‚ji:'BBgFht^&(eD}Hg 71TjEi:6= endstream endobj 641 0 obj << /Type /Page /Contents 642 0 R /Resources 640 0 R /MediaBox [0 0 612 792] /Parent 635 0 R >> endobj 643 0 obj << /D [641 0 R /XYZ 90 720 null] >> endobj 640 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 646 0 obj << /Length 2782 /Filter /FlateDecode >> stream xڍY[S:~_Ac k[I6 gfjgLql%-p%Zݟ[sfßs6Bz&nr#.a1jm9`lJiMKwd"~_zg]z޲%,`<+kOѪ!pSY?ug0<] !(hhUAI_% ?[U1d_X]ʌZ(!ވ:&?$*:9b? >K"F$e@IjBBEH2TZ9hBdJhտUQݺm`Ss#/C+݉980t>xed 7@h,KIr~Ub;6 V*.\ѡp!WG Ŏ j7pZȥkDI zQ\֢/;^ʄ-|Je1EBF%&O@f/i͑ds# PtTȄ¶]qK@0$\WjS%f1X Jv[ TQVe~)<OLyhÞI>11n;0]m`-7w@Avz2}YxSA҂A0& 8pIs  ҅@ЇXrA]h<O"8Te  a=r8 m4WB?a/2Y7k"8 b随HrZ- } Ѱ-,7z#1%~ ൥6zˍuD3i ʄ;jFC1_Ɖ'4$=uv˥ גhhV#˗C8;hUܠ|}Ve%N!+\iîMxf(lT-雪!)UkD2 n}VVIL݅69Q¨ź{tAKg̈́{Ӭ;u`8t9]bE狍z'FⅮ܍=pІ(Q&LoU)aC =5 t@.Q .- 8ގ3BC{ˑ 9FeְK=0!B'(FJ]'T gr#|6\BH &xHFgu6x,ݕ=#7n&"(i04>P*ve>| #KVDBZ]M.dj2v ;7]Bo$!\ܞ4p˭(TGw3v'/f= ABx݀<c M>6)qA ƥyr))y=1*"E mt/7XMGMCO|$yALm H7+EםyGĪ?{ %N6!Ew EMV&D|F}tzYw:d9b11<21_:Bf'Chb!xi}V|Wy7Nzr@5ˀu4_q}4ej{2br!{څi*_*#4go~MXrc2Aצ)sdAKƑ7QOP%!,[&K1%^ϞV<w2悧Dh kshDy!(GNDROnl{EAtbC >BV3Ǜ:\ɛ";n YwbDx5=HCci?-e48fՑ|x|梣hd?&oG q2@^t]Ǐxqbo-%7Gu nK*1 endstream endobj 645 0 obj << /Type /Page /Contents 646 0 R /Resources 644 0 R /MediaBox [0 0 612 792] /Parent 635 0 R >> endobj 647 0 obj << /D [645 0 R /XYZ 90 720 null] >> endobj 644 0 obj << /Font << /F55 8 0 R >> /ProcSet [ /PDF /Text ] >> endobj 651 0 obj << /Length 2593 /Filter /FlateDecode >> stream xڥ]oH}~5Rpf1W8cf܃M6aW_ 0{:Eц?o7c^c&l` |b ] [5ʇiXm[h]g2]e ͖8W +${Gk:/qq:=G':7Eʿֲ,kx=״ot`>_ G Hc&Пanʨ64[0 &Or@Ϛ=(ۂ-1 4?ĤՖm $B[ly^'ۤ 5voI2Ҥj]2:74YϘLyd 7c8Bg<fq0<}t^: 99K#Y,oE0<ֱKry!8٢ٲ ";Z 4b8[[b487FDۈ)(7dP+=CK.3'n!s弐GMAyG#9$0FA(4 ?uQh m`<^>/=G S->ۑ4q 3Cⰶ]kL`Lј #狡 [:G@Fǃ*wyv';mϊO&Ǒ3I.Nx/wJ^[*;[x&˻_5āS8Ķq+D"e=jmSH.`|]qޠa1[IVF{=mzxh2uH#t@Y<Z3 s󚌫\"cEMדZ#&| UqQۆbЩqX  gGˆJ`Дj{B)JE\2@Xdd QtT7dV:Uk)ϾsOU߈qu%.p)ɮS\]!IoB%]n loi_iqA&58^QZdK-iu> endobj 648 0 obj << /Type /Annot /Border [0 0 0] /Rect [297.677 121.028 429.481 129.247] /Subtype /Link /A << /S /URI /URI (http://www.gnu.org/licenses/) >> >> endobj 652 0 obj << /D [650 0 R /XYZ 90 720 null] >> endobj 649 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F66 367 0 R /F31 609 0 R >> /ProcSet [ /PDF /Text ] >> endobj 657 0 obj << /Length 1374 /Filter /FlateDecode >> stream xڕVmo8 _K`v,KvS;lE72s%7H :izCX|ERCY ?6+ْjb-]1b8Ѽ]]->QlLMֳaIn~Cypan붴`OsWWG$΢3olGE tmn-1ai,ؑ0,IXp#$5$}O@x9PoKcG\6ʍl܉;liKnf@0&  ?m)Y;{ 1 3YF ֽsPgҒlOG8$, / r%Ad[ҸHDQ@E9?%jb_B跰MT۶y9dJN\XF玞Ό> F[nk endstream endobj 656 0 obj << /Type /Page /Contents 657 0 R /Resources 655 0 R /MediaBox [0 0 612 792] /Parent 635 0 R /Annots [ 653 0 R 654 0 R ] >> endobj 653 0 obj << /Type /Annot /Border [0 0 0] /Rect [324.455 565.446 484.817 575.446] /Subtype /Link /A << /S /URI /URI (http://www.gnu.org/licenses/) >> >> endobj 654 0 obj << /Type /Annot /Border [0 0 0] /Rect [114.273 496.704 383.452 506.704] /Subtype /Link /A << /S /URI /URI (http://www.gnu.org/philosophy/why-not-lgpl.html) >> >> endobj 658 0 obj << /D [656 0 R /XYZ 90 720 null] >> endobj 655 0 obj << /Font << /F55 8 0 R /F66 367 0 R /F31 609 0 R /F56 291 0 R >> /ProcSet [ /PDF /Text ] >> endobj 698 0 obj << /Length 2257 /Filter /FlateDecode >> stream x_o8)h5OO۶&=tۢIރk9c;p?JđdncS3gd:I?:DsN0Ë$w?/>]a ^퍔X: Eݭ&L_0sΧo1Ju?ޕ%c=F6 M" !ZCz \(]>h~ baϬ #ӏ1` u/3[ͩ?v]PcYFŬ%˹ }F~Pr$~֕qMS4I=1GP| \i L;[ەYfMIC4z&rI ̄@@`@[z@Ӧ!#$̰"=<?gLwǽmY/nSqo'(H"(@SĴEqS%ⲬV3f񐅶9lTp6`$05ō"!]4sY$/EdƻZI[ƛuURK!ϯ!9!J򠰦)hcOLiA*P|*2WVC}PN6SjJ{>(UlR%Q2׿efX5'`DI1NI88u8-9LCKMq# mae3 z2gߎ5ݧ!OLJԗ{ߧ#߭)S=(#}pd 퓋1ъa!Y,`K\u{*7D>f`@IiMLᦰ3~hrtR&O$frL0vᩨ"TASTSܨj[0 ?^X1 uU°1S SLӱd! ^[M'5ԂOq<8_?b]e%-q+ $I&ρVu%|SMa$4b~zIˇ,Knޭ%L}^7,q~xs S%e|C@>ePN3]o|ud^62ab? |Bght]mQXDWZC(-6 ׻nVv[,׾Yp`Ќ Mdw6C@X_Tq}V0]X"X1CXynp^ӈ>Y* T q cZpftԢ)nyrԇWW^ĵM&{ qpWCG;hFWk Ch'FaB~+#\ # 00+- so'v?ç%A2bñX(E1]X"e%u : D--"J˜BVs46b}O=M|S&;GJGwRa.6pu%Er{1X8ˎv˙=> endobj 659 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 629.132 297.029 635.259] /A << /S /GoTo /D (3) >> >> endobj 660 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 585.929 297.029 592.155] /A << /S /GoTo /D (58) >> >> endobj 661 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 573.538 297.029 581.508] /A << /S /GoTo /D (8) >> >> endobj 662 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 562.891 297.029 570.861] /A << /S /GoTo /D (5) >> >> endobj 663 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [282.182 517.69 286.789 525.66] /A << /S /GoTo /D (2) >> >> endobj 664 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 517.69 297.029 525.66] /A << /S /GoTo /D (3) >> >> endobj 665 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 508.787 297.029 515.013] /A << /S /GoTo /D (4) >> >> endobj 666 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 463.84 297.029 471.71] /A << /S /GoTo /D (62) >> >> endobj 667 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 454.936 297.029 461.063] /A << /S /GoTo /D (4) >> >> endobj 668 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 442.545 297.029 450.515] /A << /S /GoTo /D (6) >> >> endobj 669 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 397.344 297.029 405.315] /A << /S /GoTo /D (69) >> >> endobj 670 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 352.144 297.029 360.114] /A << /S /GoTo /D (5) >> >> endobj 671 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 343.24 297.029 349.467] /A << /S /GoTo /D (7) >> >> endobj 672 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 332.593 297.029 338.72] /A << /S /GoTo /D (3) >> >> endobj 673 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 289.389 297.029 295.616] /A << /S /GoTo /D (4) >> >> endobj 674 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 276.75 297.029 284.969] /A << /S /GoTo /D (58) >> >> endobj 675 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [292.421 268.095 297.029 274.222] /A << /S /GoTo /D (3) >> >> endobj 676 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 223.148 297.029 231.019] /A << /S /GoTo /D (69) >> >> endobj 677 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 629.506 522 635.732] /A << /S /GoTo /D (3) >> >> endobj 678 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 619.041 522 625.267] /A << /S /GoTo /D (15) >> >> endobj 679 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 606.832 522 614.802] /A << /S /GoTo /D (8) >> >> endobj 680 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 598.111 522 604.337] /A << /S /GoTo /D (4) >> >> endobj 681 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 556.237 522 562.364] /A << /S /GoTo /D (3) >> >> endobj 682 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 512.619 522 520.49] /A << /S /GoTo /D (3) >> >> endobj 683 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 502.154 522 510.124] /A << /S /GoTo /D (8) >> >> endobj 684 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 460.026 522 466.253] /A << /S /GoTo /D (3) >> >> endobj 685 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 449.561 522 455.788] /A << /S /GoTo /D (3) >> >> endobj 686 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 437.353 522 445.223] /A << /S /GoTo /D (5) >> >> endobj 687 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 395.225 522 401.452] /A << /S /GoTo /D (3) >> >> endobj 688 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 384.76 522 390.987] /A << /S /GoTo /D (15) >> >> endobj 689 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 374.295 522 380.422] /A << /S /GoTo /D (3) >> >> endobj 690 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 363.83 522 369.957] /A << /S /GoTo /D (3) >> >> endobj 691 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 321.956 522 328.183] /A << /S /GoTo /D (6) >> >> endobj 692 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 311.491 522 317.618] /A << /S /GoTo /D (3) >> >> endobj 693 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 269.617 522 275.844] /A << /S /GoTo /D (4) >> >> endobj 694 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 259.152 522 265.379] /A << /S /GoTo /D (4) >> >> endobj 695 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [517.392 217.278 522 223.505] /A << /S /GoTo /D (3) >> >> endobj 99 0 obj << /D [697 0 R /XYZ 90 720 null] >> endobj 280 0 obj << /D [697 0 R /XYZ 90 720 null] >> endobj 696 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F2 699 0 R /F8 700 0 R /F31 609 0 R >> /ProcSet [ /PDF /Text ] >> endobj 751 0 obj << /Length 2154 /Filter /FlateDecode >> stream xKo8>S޺ȢizX,k+QG_ɦɉ.?`Gg#4zvqsH#YO}dPP^F)-KWЋW41JNs¥i1TV#~y~NsENh3M@ E]M*(ۡoz9`~7ZLN2fZk2T+4=FrSQ1Z7Mc Zm2 o:JG EE jdZC_UYV8+"S[eҡ8t(?5(tPK^zx茟Ν3U, .ne@-}eP匵Ͱn)fc:fnǛQBQ%G) @М@+}.G_oj=YOvpPx_>nňf^̖vܻQ& C :t/s]29lb39uVt.q蠖>нtA,rsL#7jǸsspnPAQn>ܼ7N CpNkxŗr~3,;t.J+ 9ʪ)贬Xe3t.%9@I3z9=͞eҡ8t(P(tPK^f0M}n7[UL=ZFd %DGZz3!NVt.J-w>\A.'0jFBi)P/sTiµqbDJ>X)].jXKx*}\6d,G ' >zWSo?gf(]%U/a-}Pz\;O;(o@TNc[-Z^zOfOwp@W``-}{Txho:JG Ec7J/s2D@{V>̲^tq@ghWH- br'ʤwpP~ƣA]ĽqWs"xnw~lzCsphPA 1-cDVqXz9ə_aXlX\ Ho.,^(Y%zaR]'Nx9(hvZ}XG'?cΈN5='=PNv<\MDg#.N^8'eNMwosMX\ (`]Xq,Ґ,&v8 1(NX&O`-*.^Ƹ&\Yn)F^j?2`q8.WQ\.\^8f9*p]"AxB:] /dut22Eh{O2]8(qPGq/cxMyn@=ʤwpP~d. "e*BǑ-6upPe]ˁut2F 5a~?8`h4If [E `g֌0X/!Orqp@^4:SutYHN "޽{s?˫WobcAb;t.\ꠎ.^8GjS7=T]tFЎ4 ro̰.^8Aavjt|y31.nHJD`]25ɷr䍽8;`E;],'M{df?q{8\">8TeV79u5Ylr 7[[N|kbBD޳_e endstream endobj 750 0 obj << /Type /Page /Contents 751 0 R /Resources 749 0 R /MediaBox [0 0 612 792] /Parent 701 0 R /Annots [ 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R ] >> endobj 702 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 644.782 297.029 652.553] /A << /S /GoTo /D (58) >> >> endobj 703 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 634.289 297.029 642.06] /A << /S /GoTo /D (31) >> >> endobj 704 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 623.796 297.029 631.566] /A << /S /GoTo /D (19) >> >> endobj 705 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 613.302 297.029 621.073] /A << /S /GoTo /D (20) >> >> endobj 706 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 602.809 297.029 610.58] /A << /S /GoTo /D (50) >> >> endobj 707 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 593.435 297.029 600.087] /A << /S /GoTo /D (17) >> >> endobj 708 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 581.823 297.029 589.593] /A << /S /GoTo /D (48) >> >> endobj 709 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 571.329 297.029 579.1] /A << /S /GoTo /D (57) >> >> endobj 710 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 560.836 297.029 568.607] /A << /S /GoTo /D (47) >> >> endobj 711 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 550.343 297.029 558.114] /A << /S /GoTo /D (37) >> >> endobj 712 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 539.849 297.029 547.62] /A << /S /GoTo /D (53) >> >> endobj 713 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 529.356 297.029 537.127] /A << /S /GoTo /D (54) >> >> endobj 714 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 518.863 297.029 526.634] /A << /S /GoTo /D (35) >> >> endobj 715 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 508.37 297.029 516.141] /A << /S /GoTo /D (46) >> >> endobj 716 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 497.876 297.029 505.647] /A << /S /GoTo /D (51) >> >> endobj 717 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 487.383 297.029 495.154] /A << /S /GoTo /D (49) >> >> endobj 718 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 476.89 297.029 484.661] /A << /S /GoTo /D (54) >> >> endobj 719 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 467.515 297.029 474.168] /A << /S /GoTo /D (17) >> >> endobj 720 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 455.903 297.029 463.674] /A << /S /GoTo /D (49) >> >> endobj 721 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 445.41 297.029 453.181] /A << /S /GoTo /D (40) >> >> endobj 722 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 434.917 297.029 442.688] /A << /S /GoTo /D (42) >> >> endobj 723 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 424.424 297.029 432.194] /A << /S /GoTo /D (45) >> >> endobj 724 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 413.93 297.029 421.701] /A << /S /GoTo /D (41) >> >> endobj 725 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [287.813 403.437 297.029 411.208] /A << /S /GoTo /D (52) >> >> endobj 726 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 644.782 522 652.553] /A << /S /GoTo /D (25) >> >> endobj 727 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 633.812 522 641.583] /A << /S /GoTo /D (37) >> >> endobj 728 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 622.842 522 630.612] /A << /S /GoTo /D (23) >> >> endobj 729 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 611.871 522 619.642] /A << /S /GoTo /D (23) >> >> endobj 730 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 600.901 522 608.672] /A << /S /GoTo /D (55) >> >> endobj 731 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 589.931 522 597.702] /A << /S /GoTo /D (48) >> >> endobj 732 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 578.961 522 586.732] /A << /S /GoTo /D (47) >> >> endobj 733 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 567.99 522 575.761] /A << /S /GoTo /D (55) >> >> endobj 734 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 557.02 522 564.791] /A << /S /GoTo /D (55) >> >> endobj 735 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 546.05 522 553.821] /A << /S /GoTo /D (36) >> >> endobj 736 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 535.08 522 542.851] /A << /S /GoTo /D (52) >> >> endobj 737 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 524.11 522 531.88] /A << /S /GoTo /D (24) >> >> endobj 738 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 513.139 522 520.91] /A << /S /GoTo /D (47) >> >> endobj 739 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 502.169 522 509.94] /A << /S /GoTo /D (53) >> >> endobj 740 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 492.318 522 498.97] /A << /S /GoTo /D (17) >> >> endobj 741 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 481.347 522 488] /A << /S /GoTo /D (16) >> >> endobj 742 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 470.377 522 477.029] /A << /S /GoTo /D (17) >> >> endobj 743 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 458.288 522 466.059] /A << /S /GoTo /D (53) >> >> endobj 744 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 447.318 522 455.089] /A << /S /GoTo /D (44) >> >> endobj 745 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 436.348 522 444.119] /A << /S /GoTo /D (57) >> >> endobj 746 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 425.378 522 433.148] /A << /S /GoTo /D (42) >> >> endobj 747 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 414.407 522 422.178] /A << /S /GoTo /D (43) >> >> endobj 748 0 obj << /Type /Annot /Subtype /Link /Border [0 0 0] /Rect [512.785 403.437 522 411.208] /A << /S /GoTo /D (39) >> >> endobj 100 0 obj << /D [750 0 R /XYZ 90 720 null] >> endobj 284 0 obj << /D [750 0 R /XYZ 90 720 null] >> endobj 749 0 obj << /Font << /F55 8 0 R /F75 7 0 R /F31 609 0 R /F8 700 0 R /F2 699 0 R >> /ProcSet [ /PDF /Text ] >> endobj 752 0 obj [285.5] endobj 753 0 obj [571 571 856.5 856.5 285.5 314 513.9 513.9 513.9 513.9 513.9 770.7 456.8 513.9 742.3 799.4 513.9 927.8 1042 799.4 285.5 285.5 513.9 856.5 513.9 856.5 799.4 285.5 399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4 542.4] endobj 754 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 755 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 756 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 808.6 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4] endobj 757 0 obj [388.9 388.9] endobj 758 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 759 0 obj [277.8] endobj 760 0 obj [272] endobj 761 0 obj [1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9] endobj 762 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000] endobj 763 0 obj [656.3 625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.3 531.3 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500] endobj 764 0 obj << /Length1 2328 /Length2 17121 /Length3 0 /Length 18474 /Filter /FlateDecode >> stream xڌP n-;m!; -+9*[V{ 'VT25813rD5,pNVÑmm!4t85tpH;[XLL܌fFF8:pD ]Mri[#W3|PS8>: ̀ƆV[cs5srf`puu7vuOjdP:\&$ FGP53wA8278~8ۘ)Y_βr wsLLMlhllkmghnn`jn(;9}ژhhhobhnehwq!%s4v0srw4K#_i>,fc"bkm qr>QsG}66A6&0qcP1wJW ݌"PumdCCprpz{ `bn0~5h/qnmƏc0Ofbkc+fQRmtl,:f6& yہT1(ecj G˿'kC _yۏy#/Kw+ߊĝSnhmnoyvv 9ۏ -I9~lWQ hhdl!-|$2*:c-?ǏX15kpdXR߳ `u|:ul A0A\"F`  Ab0HA.}+q~+A|}hW>v?ׇ4/bZ}\Nc^!p7h'/|m?GC Y?bngggZ~C?G3Q?>Bm>fq?B>4[C?3}(qCC*ۇ['M|] NftC?>$9~tC?#d?z/cgƿ_?/b h dkdQX+Jw07O~JM :&3`^(ie}ONp:=AEA tPwX|:UCW{/uK6i\{gN$|GA ?&Bke_բtKI`hP/ݐQs߉yEyjm3<-zlT2;haߡNRx 'Kc-{JD-w!ڳOc)Gޛ 5V%iӍQ2ʤ_}Y(0dt6oEtG%}z̾?g1W Qvy7 Ls~QR1&3(ljwK~PY0-S@5='Ae{rmlLt ĸs)J~v,a#TJ9۠zRC|JЯ%Sesa?MjMfg~K깆!WWLIEE/*X4 z'fnz1ٗxSUqFHp*1vI3[,GhS\kޯ^fvuv4Et.s[Y>!A. \[8Ʌ(Ӻ@"c@WRNCT:ȥAShs=/dvh 3$7\ Q>k8]S`0:v,.u]7^6k1:j]Mr_uڂƚL]S ¯<U燢%&oO>GQ?zCk/W2>dR;3iLʪH&n0)^wq2D;l2DŽ{c)UYy`͡Z6{pvUq.겜lv8)>I7xa}?a*ZRs* kB'L V /gIjP5O>\X9tA P)̏qOSYL uIeg*~Ml LLr*jZAZEogK%>qkR Dž?BSqa-ojCv^"hd@ՊJTt,jc'6VgZѴ.LqoǷOjmn^i{@0Ic*f J}k;:IiEНmt*QԼBCnOsXq8'ݘ+t {`0EBZkD``K֎U"5tM"zfUBKt53|b1 hF.>xHRx$#eD PfxD_j/yؔ`mP4l;Ҷh)ZatW 8(?Yh֕l0((C)^?J'ݕ8 oD0UZpe{YfW;&^i^&!뷪Pd3o};[ &s)Mc 7E/̎=odE%0z !mVxgL +mDx9 - V1WE$<~!DKݤc~I$=i9f?j- iv冹Ө<"y߇KbYׇxh).1ʟ(ۧuU3! * %vU Xx,k,WM‘-=z?d]y}Wb@MO/ϒz$C^p [<8%ձ=Pԯ7a\]|-]TG ʥRtbDދު vFj#L}"=F*9\ϜC&do)IzN +==%07J2ԫ| &5 $\ : bQW=$ {L4,RqV܃959슌3F6J~Q-u팠\jiN]/y>5@H\LnhrգX14QUJe %0J@#\1RV◬鍩C|D-Ԅ$q:GNVdf2Ck)dEeqWߑ eoV$hrsCba(l%8wicO,E8Gky6#z`sKt~~ݮr q5ҩJx퍿=aT7[nqU;n<_#v E] _sßs{cS&eD2ki9Z<%R6A)]G|A01{]e̤(@oj1*NnSÈyNoSZ%mh3:O` }2G>G_߸-ݑ2_M2p3!;~^teq%8|K8_[܇Xw#38q0,0(SniD(.WFHTmMS@=$@>EKx+MӠبqjԲFEW<&i250 MMGW9ܕƳEc3Sl bP5oc`XP{8Iz o"HGО_GF"[$zI:e:F;{d|ԓq Ÿ\1hj('le{{R".Club= OL_KN+S-C΢ZL!5*.s?]I_M/BPǶ|2tOT1kp׆h{9K0CyV;rvKϩGvJ[>-5hC'NJ[ aaҙ5&D$5hn-a[fKXd] ]A5{7H(W]7yNs I8Q!nDΦ)De<$:LZۦ.Pe7iQ.elu*7~cFJ=V1gCRwsк 6kq(E9Er+?JGXrD-G urMxۄcيϦ[g,D>vYXfNOOFz4vRq[ݬ#rvAg RkyO:I|H;r:9 MƢxJ{(‘ύ}yT~?Yqȸj[`wd["PP'Vdu]pyok ~w_AՆrMkU59qC1#a >?q\pNzsqM4XY;e(Ɛ"]w?tW'N!* 2x*\yWŒ,94$gx͙2U,m9둛գ]ᇆ(ClɄQ۹tcHb~ΒlfGu$;^`p!όoEF(iEL*~]M]w@nPM#<>3pCy2h&%(.G~ 0Ono_,wX JW6 ۢAįݯ(.oYوJ!X×*KԨAT5~AO*-xϒA,&.%/'qqD,Doɫ8ҟ"p@`GncI AwDžA.쬯uԌ@DX(GQ,uDXD g}YU^z@"K0sy}';;DN3 zv>s|Y oRߐ OoޱBũZG5}~|VHg) 9QՎ^AH/$-p:Ga.|a2- !!jVzCrqY20K5[SVN'{ |_c+R> 3)~`f86HdH8k^j8e mթKu.VI(CL(nq# *j&]@7k1rck|}3oUhG*D,v*ݥ*sv[yʗ`m|Y^D,EB">ʤBN&ݍİK~4[?1\!Qs0ϝx}u7Wy'Yjp+.q:r*D2b+ .MS.<8ڡceT en[/˲+O:9A!Vŝo@w/\Z"U㳸Qc*SfnVg gc}n \@W۲!Yw꘼UrPYN֧K܌aF=0Ֆ(Za?1Ur嵤#lMmtyJqX?'Ģ6icv.J$(OT Jig;i x2]\=?9x-\>ol'ŕ6#U0ZT1\^ @9+.u/&:+iҕywI.O}a(CVTaAd$|h ~/tP5½Ϳ;pNt͑𮏻:ʓ^)cq<%kWiə*um6C4rol#Q˵dд{Փs0i/a'''ٴ9}ƮPGCqDCޝ ڨZRFt"& 7V)dUT<" zXQEuW#S@◠~ !N& Lt,]8HKZ=č*R۲X`Рj t]xvov=b*g6YtΜS*0×F-Rf?;"&GB"SYi[aMcvCA z3Ău}c JlVqq:L.d]~lx@^}[FG+N]"6 \S'[)ֹiųIŊv[p8WF3oBh,46ĪK8$3_ :nP baJmiakWo .D!{i7'lxdqwQ],v7ܕ_Ŭ9%[$?68cmvo>:>b]1I6'G};㩷1?}1L"*~*f8%=q> pX/Si4  \F߹ݼ'^a=Fd)ꔸ +\\JLیhS bBȋu:r-%#'%W w b|X2?.j$伟T~ߣ`hGiѴ2KFbx\My"cA/:%b= J,HHT۽Ҥ^Bw)1xqd"V&]/fqaX;6D_=@GjtA)~O cZ|НpIkXr)J ߰˛&W[т%gp2APX;4N>) P<ҳ .1_Vٮ钿 .FEmB1TL43I6h21b{ :{7m4&~Ļ*Ḛ S t*pJ#(q'OT[0FhXt6ǚ$n ^O'Ls% C@-PJy9g鋂كTW:^E^H(sL\p(GLUA*Ԉ I 5[0H685PaCk˳ҥ` 'cEJA"{qClPBv,bي S7ӗC0Jw沩K^3:|uo {֜q=D5@ix_]ʳ2LΙ+\Q`KmGCL -Y-csnl_Z2Ub3?Y|CUh2"מB9\ڤIo>BLP['{7m7_|'TOCՃ"]1&] NM^@ q9}7J#W&N?݆SbY殸y' (p5v6BPoZd/+ڙ˸>>-I+W%BvYGn$/>c'CaH)sBcq_ێ4[ȓ,%x+}OGu vj[mBsR~Y `o辁14S OIW0Z;x&f^<>*LԶر5@ҮV\UDym%\4m&c; bDHЦV"" y8u q;VoJ WG?2'-h^阁qMk/4E-^\.8N\{~Tpbooa=Uځ:L1mҫӳN7 :[Z3pL F E X'Fu OVlƙ=>m$&?z.VES0Q)ĀH!%w鲑ah=eb ۀE`r0&h,,GRfVPUrCy}Z7 8B4+qNuqs?8CċZ^>ei!^K76EiUnxR#cE-{<:um)z@vϥ9~͢[g:Ff`r=D.2$3w8씱U8UOҥiUt&mg~ԛE׎X[NIcP[ƕdf%pr  O~z̦LOĠ+o/C:s%(Zwn=.-uR޸Jyoҩ{o4R^%TSm=]=U}IBk&*J9PQp!==co?uVn9-'-s61ѾK]W 4,5K 1'ɵ%g ~B9hp 8k4Cb]),~[e˪mG+tdgGyHv%lr k|=[{5Q]P%6]a/HJGňxקcj5h$bUrvQqt>kh[LSMaD Ep F"5|CSUHao|‹d,,Ἷ2=ɤ{dlwW++W\\]+wtyN9>^w,-W/+M=^q$u;yKy2浇RDJ@ t[|K BfaFe_KBs@;ls$vLհϙA&7tj)+S *5 ڞ9A΍) h) .RLY2l^vQX˃eqI;CDڵF]A؉bWP~C%>0k~peD?1in1eEyAT##+kҺU]qmyVSrE%3I~ŮB-ۏNO_ڮeNoiCIvVe r@]\+}l5%gCvF![ח  '\u E|4W@2o-@N'a {#u;RIj_k{fl˰GuDh7 3mֲv!ΑH7^+Y >Ob]WDyS{̊$ a?R%e5 &ADyC=`DCT5CQjuybQ!M ̆GuqWsVc3xKt_TYrR<ʗwf37$KܺȵMjxm-w{ɟ[೙xx y-m6¢;l d;//nSYy#󸍿5hZJmG :Xf GF&o-w2}j!W1t߃:9 CsT]J1 L`+9,:zFwUZ^h ֋ҩ B$SR.Zs-V5) Ck٬%@K+"P6)qVS_;a$^ю&<Kd#L3l5턢KCYfi  Ig%[آoѡΰAiJngwa|H7zuTx4W.}l rpD:}1Ks'.g3g(Gkye=&hŒ9!Ŷ~\L}'K)Kz.^t;p1=`,S뚚L'ˤzfdYŽ\vtBm$O 9*6%Z)ܗj;#I'X!_)`=V9ҫZD`')*/SX`oX6-\30H˼/3^:Nn)SV&,o)z+(cExl)1ftYB9ܜDFc<m\y;2mGDӒ>⌳:'9 0Z$b)8)м}F/0bɁD ܝH1;/&T6!{ R4@{vx=ilmoy xB"ACK^@A{?V ˪?[o ÏbY~Tc0:]>f=*RPF(56-EA^gufEx擊hЖc+ "u7޾qzuCfv EuGbM TYiJ/ v'3 p^5 LdQbfWQ۵DxC`O-_ )ˈȀ]Ԡ}Xn^ʹ(iz_DRs'UXyR^N&jNuXz*O0"@a fOT9}tN3m0gL~E;k|Jӷ/6QЌ') $^\<$2v3wWG݋+TѢЎa3R3cÊ9BhV6+=<?#~Ep6c\}omIƭGB1tPa47y%ַսͬ]:ˮtڿ|7n$t<~kDWzK;9>\UJ5,z!ڶ~Zh۳xt&χr\P3!CfT5lG}Q;pc+Ԙ(`\&„Q0t@S  ՃYΌHI/wb~APi쬨y ΂h״|UnCM}NhHi1NZ9|yXPq*Zgb;zu:SJ}~HkT)T%)vPԅ"R)[hebf#ԁ+1ivxc+-̨L$5BiYsss 3G:}_pn-5/Ԡ<ۖf@ExŪiICǟ #xa4BUVj 3VW^$T.T`(mA1md:*AVt5?U sPYVI .FW [qAKV:B@3U'*B+T} Nҙ]=qW 'PGB qtJ6ϮeL巸g%K ꆨ؞2Svwc.΀*M5~u:РQ劯k#|5șߜ)>GNgT}:"bzlsDu͟bT닩Uh"+6\ڃD=euoI~!(\wVDA(DzC{M I$9Bi NIf_,bUw}|ڪ)%VK@{pO[ϢyFژevq9>)ՎE s"9o^K÷X=%p5;fd (45X8M L\@U"r7HQMuk~μ[?O^vM!\<?bO$eS ЏW0E/ny~TAb IyR2 檃7t稝EÕޥچ&?gʛjjy+/oZxGbXsKTN] Gr1 +|O|nw8N=9Z_#πy.9[[՛@Uy)mE,횼V/n$7nU5Zl+S섢GeӨp#Q]8Ʃ~iкp#fF,YgWɻI;$b؟LkHGf|C9+0EWt02=j]6$#+^Hu>J[*4WF}QiK-nqWV j>GX@7bH<-PCHf~B\8D )ΌL܉:[Dџ  :tÍӁ+vR9OmS̩+9JZ=q"eCySg+X0XqN/ , )*U<h}ݱ̈HNhgÃpgA7,7jw- a p [2J*XALq{+KF%Zbgr>xjO@R @uk5V(ZA:kNŶC-ܾm;By2$>^:~)]Dlw2f@x VzY?bN̈́6)8]:Aց#ۗ Fkf1+5='IJ *2o(*,ԋk'EcD%q/۲bEbP镑aY'?E= ̻oHK96Fm\%h3MD'/Q56oN-2bllּ_uteI V2&y(=V\j!w bgUډi|Ag@/*yZaaUu^S jQrbadP;ngl[yIq3z/2Vn&EG(-]1sGy}v-G)X/Ӥ'?@\ Bo|T!S]1&(aNS\PԴSȲJ3m CH. 4lxp! \HPȊ>މD駋Cq̌;P52H`sm ]G~?O/X+t:[s8X)LOa&xG$ͣ}ty"9=72iM˺/|,(2},ԍzLh{.UY5^ytǴpbp5yKtܪ,vn&*`b6)N;ieي:j# \L3L,;m=2W]F°/dZUUes#EjrBB ,)Zӽl-g@ *xg@c.PM/2ΌS4ܧKܹ 784j!w]Vq 5psh/9 #',؁bJW2Z4s1졕5;jf $K~ʻ ' 8d,ˁYlΟ0*,@Aޱ: U=XClɖ@HFFH1,i>xtzure9&vJ ayڀbvsǿ Jf3K P)& OE %`bm_DxF+Wf@2*D(2I"}8kO LGn4/(&26au\;3|_ӻHdT*,&k OLH|9;^e"7dT[ʵ4;5)$" $0lr61r딋|N"^ P~ Ś˙AOenp5ZY))(R~)O+z}mW$JF1:xTbl8o_ɵ6z#̎~%b]]>Z:T1V4GrK2N SbKʜMa:]n0(,e ^d~'Ѩ +*Ȉ$KJZ *Ula2k0e޾6*8j&K20$@ (NN)hAZޏC=Nlq&TH9_8LwyjQv~t_a$IZ} zYcop8AF<=:K5!0 fEF @>f)1"IۨXO=a Qo\Bv2e6Cer`91w TV=IYBGIc|[̥}[YzDr| *IJavINxq"!v7$Yֵ֒AD!5 *q _f׳4<ɻ1 \&úzmh,6f@ /&rDlsWwCNjiB["X?snx~V;09R-vro,v"ȉ?H(css"f`) Y-OBNƭ,)&Q-|֜R^u\HL*wU\T%̠e;'p4DUo}^,moUKtTYzpWƕnϧ U[Ng& j0s_BygHW%`H cKb HV҇b  3&Rsvـ=^si< 8ޑ7zcrS.QTuk>-_qK1Yx*iS^|R]1P 2%QXpZyЫtF}F+xLX6§E6R0oƢ>O;u'y}X 6dOa#oYA廭!Te$N0L o endstream endobj 765 0 obj << /Type /FontDescriptor /FontName /KQSHLI+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/A/B/C/D/E/F/G/H/I/J/L/M/N/O/P/R/S/T/U/V/W/Y/a/b/c/colon/d/e/eight/f/ff/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/period/q/r/s/seven/six/t/three/two/u/v/w/x/y/z/zero) /FontFile 764 0 R >> endobj 766 0 obj << /Length1 1420 /Length2 5888 /Length3 0 /Length 6851 /Filter /FlateDecode >> stream xڍwT6 "UJDPHWB $$"HoJM{ RR(|{=~<7׌La(; d`f o;"PH@b($Pd7e@ to #Tx `@} xUQho GoݺyW8PA@!H>w%TB\((G ~9G-#*)qŊ0 7#c<0O@+5/0EA ,g],aqs'?ϡ`?gRLR ` $;I00/EE(!HGa?-) E_{ T6ة&JSxeHl+P}J\biV3.}v;>˵\u\k\v|8'hX&\)tqFuP)Myi}TqS'ՠ$S&f>]r>>Zbέ+v[|pO(^]CMb&ҏbt;MFMXw@a5Ď#Nz J*&756EثpLCh+=59]7EmO0 x~/bmBy- C+o hbk| ȭ27wv2/qYp۝l.S(?y8@Ѱmx!+d{uWk'Xn6x^>r:+Nҥ/u`A%vm͙: m1v^z ڂZ&}`Lud5m #{ǀ>ٰL]$;kHvNRe 179.!xkPQoZJyǏso܏OhPHب/m01̜ G/~G2N2K#Hڼk[qYtJ7:^^fͺH/oģkvs2Y5$ i'%en,{0]>¿Lq;O R`<:٭q뱓Zh7(ߍɇo77}shǹefוǚ.֒pWPgTF`wlL܈GS>vf/[C?~- κ_p|~^A1qj,C꫉g jy MѲK%0ncDPiRSIW2ubNI[Zx;.>6j YQ-|ꊚ_ =AO_}qdPdVM n EA _PjWD_Drt7+sON]$.ׅ ?^0C r068.f$I3dIajd9> +(@ޏأ"! Q݊ {CJ˹wK%9%Gكg JɽGJ?PV ݱlAsM@͵zm OzS3a.fZ}ȑ3.yOl2Lf$*Dkך Xiʎo5KbK7+Շ"־VS`AT彽B.'7ӯh ]sB;(w N_SkL_@^QlɶX{z\kŌO`Hyo-8ke*O,>*i]۳C~{wE^h p`c9%* I:3|f973<,#:Ly6zFqW T+VM[4S I{\\..egچZvFȦ3)Yq6OCKr>,̮&nk:V,t$n$J~b>R?|azLX1zgBy{ۅޅ淸\$[ _?Qu*2Ě1݊Vo&.4tJxM[^e"My_pNtdjO8b<dVdw:"mYJ;Հ(pRXW'ŧ:&t[WjmO=rHLE} g"R׫kY rR8pK׬sH"MaNi;c6p:K8Bs7JQQݒt^zjoڕS#vq3E}ɴZSO~8̭ȜF<{;4K9X3GYEruG0IiKkA%+1d #<*ϨE#c?40'hg ݥ@X@@nozK5D|17Saz=΅'uVF*(nh 8똚IyLG [ŷj3 ʧҮɽO6Y46|~&VU͢K ruu)Ju(.9ɈR_![8̼WXއń8h4Sy@GϺg'.DQ2(y6c ¼{vNKS_+V4Q y?޵t1LI%{SW">)Ъ0CУpbB_p4qLm:CAixԟkhŸ _+'+͛ 2\x@^NUdn~7K+M6+3TvqJW4EB)i7Y BF}u\`2i}Gsf2]uO/p5 FU > \' xfuCm/6v~FX*)ŽW_<1l=[0+ho**3U.W?h$G8 )rOZ/cڟX>qJ)Zruiًlם`I9soT;~ˋ U95 푊-={,<Rq{}ڽkAT\2ٵK#"%03zQx0 Qib`Seib9COo{3X17ׯg" ue}̚%҅vz\l5F@漹[z.T^howѴ|~x%Cl:MaiFUU `<~ln@Kx#`/}zh,E7:~nxţN`t(ZZ [<,ylN8#kCLh+ $ʆ9ռ3'!i-n1>Tat$UҮ5ywJM59ZI#1,g^rCfHh؏٥㪏.FU1bbm2]Ŭg YkZϊ#hpw1ۗ.sΞ+gd DcQX@m~c-^6|zL]`.ۍDc/rѨ8)!veM⢑boC+'>_]katTm1:; .ٟ=̬eN,[(:񶀉\z,IȔcu5-֍IP1e3NťЦB7R>Goٺ3 Y;9B~wn6S3bO*6Z{N]x]t?SUEM#IgsvLs}uw3H0WTH޲.8-[|ǹuw/Ȉxִҥ%D9}ۯJh"쎒2s/rX…djN?xiAD8-QZ/JJt{kWjE^p5(?FUyw+tI8d|y–n)E6 tB)#VBYܣ^O{C&e9O )ÜTC?=!z뭖8NjYds=. r)@m@[މ@|!=":Yfhn>e%Uo_?>%'!HF? Q{Q' 2 lzksh,4]vL'k=9[oy^]'ɯNW<4ml<^zC g!yjv>V'Ŧ|M1wT 쎖b=/^92ե9],1arg6lfizTr({Be,&>xI+\գ# ޭ3#'}CRo0f# =.I.7pthr9i,zˑsn",fI1t\`,Z;]iq%gz00b] {_M d3@^4Oi8')F{`9#2SڦIݴpwe6Hu=l۵rA$_PpjsdcVK[cߟ68HdI_4II))hDCf3l|a~jIrF&4}dx7Qթt4t*/~rs0{~GyKƉK!ɰ шs c5 YWt<")ɔE S0AX2NzmR9^e&@[b7?H+[9DH=$9vr{jCA[ _ 5*)EPFVҒ&? pj"tǣV6:Oyx IYܯV8MZuup?l}Wvkp%K|,}^=;<)~N%;n|k$?~uY RQ~&̃gwJ*z)[8U(A1r_-c'MP9D,1c/*`X̣ 3O{,xȷDS*⦑ pp,2]cSYIZz} {|ػ|{k(HY;Bsi&S6CM endstream endobj 767 0 obj << /Type /FontDescriptor /FontName /CUJHND+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/period) /FontFile 766 0 R >> endobj 768 0 obj << /Length1 1420 /Length2 5888 /Length3 0 /Length 6852 /Filter /FlateDecode >> stream xڍuTk-("DAJД7iRwA$$AH 7{"M84A(H^Dz|?߽kݻV̞g? '!"mSEp !i}mmu0PHHD@HHi80X$%100S@m4 lA i!!@4F vAB@ 4 pG;cpG Tta0 !`= Ap*%]]]X4.tE@qA?)u?@#;`Ź10 aPX|3 ݁Z@]G7X7r Y @`;"a@]U-FAX4>Fڃm_GU`8 œ07Bg#wGد Ӏy#ma'00oP$(?no? h.('K h?_#TS12C?A%%Г_Ł Ws:*l:Yo&.gon GBbB{ ~S}"Ug{_q߀#v@ڻA/6"~o6 tv:_E/t~o?tA8ⷘ=Cc?_<,!wrg;k?m~} b@0v%Ā Ban4@q 7$P?4g (-? G@ }W Y:T1LO,VRkQr13P]? 7ϱGl#7M 1zLPx! UcwnJh54Vifz1g6Z;90",Q'MSZN1=EmG0REQYjéB*O5 Y hsi-دڥ!b7rRhcl!gPiUѐA+= Zp{!J|~P4 Kz10ɂPgq];W%ʺet%5I#ce8ZhgXY46Uo돁<>[TW_t%Ƌ NϤJ$`mEy ZF!H3Ү `B/I8(+/YX6Y']u-ʣ7|{dѡbmu}F^ ]mޤf=QR;k;ל(szH2=te+asbhGKU>Xz|ߴs Ur0ot,XّHT3Jp)+3Yu-̖!^bJO"R0^'(dX"6zLhf,A6Kբ1s˒i7}g+< 8(dMǬM0:&j92%b<.` s Ff/cW2OLr.% %t7wd :6J>זI.EK6Oa(iGeKwJ-cThvk0z 3a(.zYbyIuE#K-ç+=U'e0LI5M?}h2 qvzjK Xp+N?kEsr Ҥ>nZ=I >amҏtk&* `cD+Y׆r$qO'OHt/8&K. ^m1vT5/Yky_IZޖdŤB1O$$Fypq|GoW̑ XZf}Xs`g\Ʃ~㙄󦦚s=O*jinXl;Da<&srRףD!uyNtdAZۆt - J-Ğ)FDEҩ8<}ɛUD>OR7nlx*:]Lj&ɇq_Upq ԭKGO-k,pBt_PrdQ[d؎j'|TBzPmH.j6r8 P>[OʥNn|C- ʃ K=NsWI{Z>yBHAXO5$Ci!{wyg1ߦ-?V3vv'MkH Tй;бMj={'s`{k#RlsWs7`1mBpX'z{4DtB^Yz㧘c*ZZHc :Ah (fvOGnP%$V*xp$IM g{_A-كu; -McG}TOUzG=& w0e4C\J9.t vZشfPh7N:] h 1 07sג.芩/KYh놮[ Y(\^3)rɸB眂&C}rRЇg j8N6BhbV}&ߺ{ ܯ'\،#I̞PJ?׆aN_ .X.)Sh~!˴BbՌ= L_l.A`qΗkRP6t6T|%.y}D_1ڞ0Wz)hæk[} &yA2EJriQUvGcԟH :a:uF; gxqex DPNnZe˄ ޝǑ<9^ڡС[0۞#FӯpA*N҈o#"4xP+k%ikbT=ޏ,I8N 0f录:-BQb ņ!:$M,n :DSYgR~^` Es]\ —nn"1o-""ȟ( xs)1%=Ͽ( b/:=a[FCo#I#͹hڠWkn!Xʞ=vS7@fRi&Gbجg^TٰB9q#U=Ɍmb0zn%1Ɖ{V?0Ad7 ԖӒJ)nO?ӠDBIpW/{l)vpee;r]P|>8#4(v#x@ N7K{q>\O$5(#mH9Lt(Βsh2F$d®Vٕx}I cZabyMWpӳ![d`IJUΪo2aʩ^$ `͢kOmeLѶ-1ڙnbM@nK6+!n&!et%Ww] <=9~%VzNvbܼ+mydƆ˫wy&9o|VGrgmN&!Z&${均)oXMtxKcd-Tw<tM%vW,lb ARC8(NW CӺD,|Xa`k|@2p3Aʘogo›GZJ9eD׌K6SYi.V: t.^ ?bdgm'%6ZxyrX`I=s:.K;i| K1CQTY7SbBUBaz;ESM WIftU& OvMh/\/of/ᵁ)O } bt\zA/J`Īa81y[-,UL%:T^ʿ “JQ%LlCci;^b> &qW"RC@SzֶG.YUOZ*Bvy+"}֊_VLr+NfC6LZ'[4VS<-?f $Ω@.SW (-o$X],eP^lě**]s7&amQ"L| ~ ~is^׭Pޜi>ڑ7cNY~FIZY՘' f5iv,/zּ/˾W>+$hg0rmJA=\D'.gǀ R<?.RW|o떰5 KJ8$8\> )]d6' |} FU"AMַIT(&*K%f\Odm y@ GXD! Qc>IEWPLskc-Ҿ7Y[+n>uy6n ' Su,gI].#u/}e_.d@$Z?l8<,%Tw[+q endstream endobj 769 0 obj << /Type /FontDescriptor /FontName /GPANTX+CMMI12 /Flags 4 /FontBBox [-31 -250 1026 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 65 /XHeight 431 /CharSet (/period) /FontFile 768 0 R >> endobj 770 0 obj << /Length1 1412 /Length2 5891 /Length3 0 /Length 6848 /Filter /FlateDecode >> stream xڍTTTkS@eHA a!f`f(iV:D)n$$T:{{׺wZ{ϳٙuxd%8 kj@A^ P]rqBH(& S0yp@/ /"@qja$ <Ea sD*:BP0l!`@BPj)aB9񹹹p}e xAB+O-#72^v-ۯFC`HL `T5Nd w??AaA`0 lP@[I厺~&pL=uYb~P0CP' u g-+¬ᎎ I| Pvߛ` k('+'>'"gA"B3^ +ӍAwXc@@' .oEQK FOwb,u1~3 s'~ttU5U#;&'wxx~0@6__yu@?Qf s{q ?{Cf`̃_%vRrqpa#O.(.4u31䷖5!VP@}l0](R ҁ.030 Tl 1!1DZOQٿϡí~Q@@fy?dR26m %6pZm8[-V7 /QaRz#sxM [dϝ;Z38zi4E#iOLdxIySI^sTpHt|QՌG~z ΝWE 2T=(TkI˰kץ'05Mbr޴V*{22"@)NywwyfD xIK /NvelyFj%nj9EeMt1^PFF}D؊ >8a1w8wzVM/W)}n@Η/zuNm?q,c` ]ՖW/;HL4_5XxE )U7/y;{Se'[O,X36AyA򽼫#gJC&nB,\U$KN|iS -Zc0bl-]>E h=Q.T]ߏ"<.Yv?;Ψy7NSetšd e)j$tunx 0L[]'s Hʡ ke oj^=¹OF>7wi1Fin/2V#"1s-r4 lA ;F7Rx:;D|{qU/H/Evaְcg·Yo4r$Kbx.˽[~|\ WYx5ഉ{=(-]#ᒈ˄yF3߰˹X'nËDž޲"1F[ɧzG9(e1 -˟/'3cT- P~+E|%3fnҳf<ѳu鲻cc3;o?/""m^ ӢuY6VWԡ0 og"k"@"{tLR!ciO}1m#J'2B_̮I{J(4`BW>ݫTGgdꪗ22Z{[~arYP{gO %5des6I* 5L7{K[Zf-s=MS]RPbcH}RZ$gNֶ+w<M9p~9A%3s`Cs_PO>T=}=p\x!B>a5l[cnk\WP#\|{)RɶҁGה,ط/3hrfbn3!aIy#RFc{|lɴr<xtmhvf]w]B8u"DŽ*`ؕ %?Hd>s @+S(i4Ͼ>Hk9L?>Ɠbģ>'v@9l8].^{$m~+&P|.Yp9^Lac6-!O)PhnREz-9Ƿ,#5'ķbfƹT}oR!yKwGUoK\FQI%ϳi\oIǣ׮bZ/!5Q5.1Ndơ_9hpO|ᇅz6kld\&5st%I"f?T+8uĜyHɝGЭyVKv¿s8]cv8k4[Tqw]Ѽ &z8=+=_7wddd~gbC5kiHrƉӔS8GRwS+R몆]j-g=07'=9}>*"~=R-y0Z[%W~ۜڈ *ݝẗΓجli [YX$'sN5e?ߜqa,H9TEni`D&c } /:ì=OyLUTEFdQb2KE*̾{ݸjv~e/cog0:byPSwPС_FӤ,JԴ>Rb|l/v˜ 2!Hč6fƄB)G>fՂblK/8ǢU.JaD$oY'?8vkCl'&rlj#N}(,VCWj<>n@sFe g FXYNxt `nc[j=^Y"kA45vA݇{9*c*;DNi~81[M^Wt\FRCr$Jd^-x ҷrJ_`h"ZpݑN0k[g2jy!db}?M8foi ypg:ڎۻ;_%l1̵|%8ݯ}Oq\$uT?>OPt"C{h=#1Te.Pes+|:GP8?Ъ[iG󙟘yH8Suq+X*!:+ՙqKFUGDŽZj4|+hu5=ҏ_41j zFߎ|:Q.ˁ/:D;F W͚x,/LX[c h=c?툈}Id9tyt98}"m||)54pF -xlaB6$4Mǵd_swJ}wF~J|N/,ϧ'&A~T mb%2ۻAˉ$  o)T%ц'%|IdY+8•sl #sj(w,ƀbuV4`"~q/'f7QSv=j|E65DM9"iz,kF mu X%91ɠ~Ɲ15(*hP58!c;8y^{R8kFT;KA-6*w>WmG~4^$Q J_};̩) ӓH'Tz;vӘŸ9暑N(0>L`֑ll35EJ}&oyP g~e!z)sIkTȥ6pz<bgx:#e> m;![^%Of:tVר;()N숇:g?k2pl O&Jrcpc'1Q~;׊W$㪶Qaf/sirM2y] O%*81p Od`B[$cf:.Sic)n$= 8 ]E1 6g2LXtf[Yk^dNOK~@mu/<ȫၦlx>he0khWmziDo:(Bv56t{>H .{^s+}j2e˭VPf'wBRLGi-jOCa=wCTQrf@p:^OATɥ, ֊Gf%jkӝ)R.CW;5\2Kc\ S+}9 =*szfY=1=ҍ -rnݤ,<{{8`Y^,FEv=:.Fcsi;JiFO~2Űiŗ$׆q-UuX/'q,\Zs˺9I1CFx}Iti>bG!D$Q9w@On r!˱ϼo9XU$gdF%+qE .s.ݱZKqw`ָ3Ig5BgZX|ubHzǞ#;ŐTCU5pW;W}[3/F3Kyϊ' C輶 KP~wh֑$Af[{֙,SXBs"^4I\eUˍenKWt;UT@ԝ(KNzqKw]/71b{V}g7y$p]_4?6vʋ.-]i:hfrJHqC5Ի/q7<+^kQ׺a-~)33,!}*X뵑\q,TUԡrICVoVzג(azu}J(CֆX!ǖyԙvC/GW o\иZ6gF̻۫b!r>O Onٛ =p+GƵ+_W*5yHx(Ti;W69j/Q)BDw{"͒pޮm.By}@ӰQ+P{7DiZ*z-o):L=n1/Iiwgm!er?GILc^JWfu^sH4&PKo\q0eE<*}(kk2JJ)tȀE90L!҂m3@a-ny8 <9OYq7TaeD@+UP߽A*ͧ_ gesȚlsk;\3M޻760/&H endstream endobj 771 0 obj << /Type /FontDescriptor /FontName /PQILTH+CMMI9 /Flags 4 /FontBBox [-29 -250 1075 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 74 /XHeight 431 /CharSet (/period) /FontFile 770 0 R >> endobj 772 0 obj << /Length1 2757 /Length2 23777 /Length3 0 /Length 25302 /Filter /FlateDecode >> stream xڌP\ ݵq .qw w[p;3M2{UUMk9MI b`twe`ad)0Y))խ\m)5.V9]A2qcW=@`eef23 nneP`:]),,]Ai@cJ `z;@lejlP0vځ2L^ Aohll!Haj P݁f_WO Pr[`a V@{JP(96-XY @V9:9{Y[̭l%IyFWO׷c{_ƶ. cwc+[c_̍"*cPblbeD_a@]7sڻ'n 4݋;x̭aȤao$-8x@'ԒWxu/G_J_bP~>sP@?+s ;S_02u-Gc<A`7}z9z6kLJZWNT ```Z2.+/?(coPW?kAA@c`6}>\(o IK6nPp5} @3+7q5mr)[ZC(=Pс@q/tOM)ao`X98^уtf@ϿVh r;8('Io `Lb7I70IL I7b0IFl&߈$F .o(A\#E7qQ@\#E7q@\#o36 (o"ollj]}^*@ME`7'/ovJ T7?XXA!vf.@|@W'7= *7A?bo fK;8/s7? ,ٱkh $#?3t? hv6@Pk, w?Jwd=ЃjwM5jP0GЛ?+ bZ)?FUN ]z7@3ac?OLxϼS:57+0iί=RշcϼJTq {\9ù4w pqL'cLR#Ǹ${0HGjH8\LWT* k9B:UyR3SFq!g]pd0Onx"ɤ;Vv/B%k[BZn']z ]1RoR+U$lSZczg9UTBe1c=W0m;fzbM J73cEZ${Nf?7 X4DI:u)o({O by;w d,ڝH6 Υ xq~XXI"s]xP1NdKyߕ P'l ?l)?@ʻNaA[5wP )7jMVV-P2{0J?|ӓd~ݝeF,K)B&*ϴ_}Q.-RzeWyN^& 6X0CZg:͖{9_CT-6$-W΀:[clXa%<,0sl^i( R *_Ǣ$ۖWu V4EcD v5i㠖c7aHFC)g1CMxA G鿼RɭARW~vʽMp|Yr~oД}eDo{ T36d×^U6v2ӭ`!+FU7q Y. Rak DFBVbT^z]1Ctb#'&L& 'yg)]30Ɩ֢3kgU2i^t{cva@φfQSp 8,&;MUn! |7~ Y3BDQ~yx{ UȜ-x,\RHR{hT w:۳`Z AT́r?njE'RQh|\o)(G ,&*1r3aRnqŰHZID@(ˈbp"ʮc*ԧU^`rHbX$1 |˵J,Q"嶞 qmdll<RV>&EntE"9Ɇ3 .c#}EBOK;W,(c8ۉ$cv]^Bҥ\9d`{ D2jztJÌcfbɌaBft*J;z-7z^A$놟ErBXܧZaa .[gú H Sp-_#ݮʻT:Iʇt*0hg8gydixxXD||ogMO?@pq 5vNJW"])gO$4-X鶷 ~!Gq>F4iC4ڋ2@Q}+nPl6$[-欴R\XгM*a;u@#:fx .W"v>ؗ^5RnRoYQ\^֢7?ֱTه> 9[XR= *&%wQS%t*Rf.aUʭ2kym'3> ol"e@+!Cy[Lڍffˍ1wS%njC/@xW3j}X"Ș1{B8zvwP bۯ'ΩW7ia.1}klt˼/##vI' !OF]F)']ʅ=}KyVZ/U41_lm_ v /рk81ފs̝H~Zn*xkyefc/NϘH7w:|q|x[0%xDWx&m \Z%E#u]h#}`^P9:H1_-qT:xN1MF'ƅܱC\K}jDDs^dOb'Xtżm Nj:hqS_GKNv2ƨonKiJϼvz)\3`j*sE%/sFdg) ZkYm) ׎5e}SQ&JĜ#pDq!>$$)AGMLƫ6"K>?L%BC"uz> IMq>Ra0$o!a$Q-6A;^lr$8zI䬹؅_ Uv4A?6án޸$[ERj :EN 驑q!uc9S]W7jڝu-kZ30m$-c羨CAO0{=EUlEAV6xwMݜԃ:za#oI,%1)Gt#;i1(8]C'=٠G3{ʦw>%i9<_rZ:D+΍I(#5yѷ%p7NE.H ߄ b7ɪ|U v.! z0"x˧ZKDNcgX{g}1kK|[M\Exmzt õݚe/Cd%coXֽ/8E}XJ\\& wK+ڼPLo([D8xB:Ggud~So]20)ꅅYLG򀩼ۣŊJ 1T$u./ qN1#0b gsz@~Ȕcǧ c]*RV)Yz2sXun\ZXgKk B~Ǎ t0sVJ~o;;ěG }̊=&H`yG4|q_ (nc~lP;)+Ur(|R,g4[&ݝM1ٕC^kt] iaQoDzׄ@:D%7d'G)'HRL)يqepwo+>.(ͦb ?v0ߗK~jGrvHuhÓLٖ@=( BiɅnHMaB#[(enD0"Q t 5֞`Ty&t[^(4 Gŷ.!6^{ sK=nA.ZuFp~Tx}oV2ۛ~yvsE:C95.Z yD\L9ݠ[oj9O]O5Zb ^07>ifb@DnKsy>~ٞz%" e4ۢzvfm>ͻ!:hPs%mVt3yb5_YQ㮪if7 p q-)rA#5nf.jICcn&3-FkeD#x$:ȋPm$J[8["ɩhb|I6[FT=HrlZKrY1&;䪏i93, 9~A6޳٥Byvuc&U`sso珝Jءľ=FK U º`G܏ 5A>h0>4LNy++ء2r#Kk02 N⥎pFN*9+]Dx7JDZn+7e;VЇ2UQ)mU[ @O xEKEhz@:+=w;̷._B3HBJVR48u ͋??P5@eR5\]ʤՑ;OZ DxjG`QA|ᢁҋK'^BIU{PyI<\~mOE}WNCL+ zy&Ƥ0j. j:Di{QU\H*''53~REr%r'3ߧzG#avK{ez}{gAd}I6UG}FO:%Kҕ"LLbk,|fd۱'}'Tf[Lőn({x܁6zϊ)E{|#QR౐[a)$tS_ﳚ}ÖEajQ}5I?187Q͌Bp7ʙBJ;qH~P"$:Qk-lC2p`M1T\h 9цFeAzĖz x% Ubeоlu:l2٢ F'|@Z!] R:+KE&C4F(HtćxOV 1!+I.hkuCl4E7k3126S ܷ+KGd;IfZdn#9jcRR81 yULć3X=N ccN#^gP-KukM_h;YF6iD[t/w~? 9Zʈ~,8!B9 =X1?yI*/ jn׹f!9΂`]KˏKp38> gal ˰๔ˬjn|m'$JW2>{&9l;}Kh88 0JĢ6]u%(' C[0"BnS]ub!,dW e3#Cvf6_5R;{5;mPVvF'lo9Lnke⡐sO|pE&v#F!1l(͒,ӯ_cgυTvr>e=+/F.aKԯxw֦V>mHLDT:Bu̡d60ov,UapIxS=m_Tl~OjW^;Vu pG̻3"Bh}aab.'{0wQrb5L?%N9fB˙gX۩i%0V8 0IA&LRQ: ɑO,HɄ"=ޯߊU1[8?X/=7rgxCW.A`)(vÔ wi68X?zT7* Ui Wrʘج~ ';J\&:>BaNq ep[')܉wϟ֣N͢[:IQpK7,Kg"ȃ%‚,K_:'n4 3FjSo΄)6rz\7Q4X̽uy.5Dr#WJ$9Q*QD_H_MfM@6y^)}abduΤ*sŊu28 MvUEfވzm١hBmAOtǶa F# 4Qj)l͏;6(AWޯ:bGD|H}9ZLq(}D]b&`4;zJc+.]/ᗗ.?oFx2mf39 4Q}3[W~i.dǎe,LHBj0([ܯaTFP`zg:}Z5*,UtYp~JB }Ǣڴq[n/>:@n歯3P"Q٤1X%XYF[L 7QdsY*h~~gp cގ[0*IsP*S bGE ml8Vq4Eׄ)KD=!R!xf㊍b@5c'm e3c}"g;bТԻ- ->tܘ \V`\s2oŇr3ϻm̥Ż'הeM(kzDlͫCrrw,r_&pi\TeCMJviTSIz^+={T7iʤ_eDrql7,/M(EC 'Wc隰cH#s*Z0G\JGnA $9uf`j%_ Β5ٸ^L KOF^zA(|'09c)r)iQi46ֈyl̆D\Ax5Ɋ%}431wz4@ѢJ8_DiXhyzYB%0{Mvʎ|[kgq\$fKJDI_̓6n!E>.re=fCum^~wUɃl%6q$X"tMz#]eSJ~h<.\As ;z2~ǀtNk{<̎q][!^~B'wmDY i43ᓇṲwvQ on9Mk$/NN"XspEom|CԤ;ܛ?߽l\9iG؝pvfԞ>*}w|!:FRՠyK7ipNPTկ.q- ͂'$ Y)gu跉:mk4O4W:BlvJ(%F[#El)c׳M*-xg㪤 69CRB9rZ/K,:yR`j>\{Ti I^ `9gT3nw~}į$qh[yQOSvщjZ]I+ށ"$7Z6SOKkG4DP\:&L{sL>ά' J5DKLu -H+qf=d;tLttor'|?IǸL+F3#C6h~ T--yuhy c RH~6B5pp<Ƅf%0e %_7ŶO{wуCl+9D#~QgmNݖ<6Y=0o/\ 7`.҅1gX&V*M~2'︟DBb0VJ&Un$j-).Ƴ4OK4,<τ2L5Ƞ}ʥ G8:˫83خS\UNpC@ǧݯv}.oQZnB)Zv4QPZp rA@+Wf'6.UCk+lV!`ix̖D; U#F ėk_!@6ϏADo92lJ21f(!g>Yxk͛ 8>i_EmE7U*JY;Sz2؄p=EaF-YXj\.c?W}4ayr~!cuÌRiQI4xk3CKM9݊Vq`}w_%OvWP%vuvh (JO%5-@Plz͟aQ$}ִUɶ_h Ϫto.$8IثsQ]:ȮlS:-0 >ھ[g02ΓJ~O)C ٚ|S%jt>7cņ8;[0?'8\"6hT0{jޮǵLH2ی)MuwTMۭ;,7Z.ƹdxЂ4aCbۃڥNE-őx2›8'a4˳U+!xk"VKz >GѓhNϔ ޺'1f˴^!.LGM.2 TNa2r_(dj%lRY8~Ne41 5| ̐"?TN%9@XO*A'_sTX9cB ɐ(t| y< % F&)C#2_ƃ9l;}+?n&6KIfڂA~870$QxKODNW=cq8*9qeN]R jQ壨WmXZ'JJ4Jya$Q^50p 󃟐Vo:(憙췤BF7/>)-3܄ ޠ,]Z+ǚ]NCK9@@ŇU} вDIRi|>xnZfA۪ٲ*>f.=1w[3Hw+N"+YcSoUs9caO! }hdn9&.IJjkb exM@%X_aZKc/}PYGOr]ZTa3I{z(4u b^fb&9ܮEO\ iӴQ&A=˹_a(Z4/V #' :gٍaPI'Br-!zPH̗M4i麭 YL觴H؁x_u0B 0 ȅ/ݴ2\DFƒ' a Q WtY;?(>{,| $,U^lnCҞ@:cGW7y7x.0ɶ>֦|}ǡw yKy\M$Y@/~7 c=5=7dA BK$= IN<8ʱ7;ru! !_%ˆ5j˹DEUlh #N8EW: 9k52rZkj̑ JuM#xōb@'1&z 8/u(޷}A$tv~(s$9{Cԭ g\mx`Z? 4u=0\oMI`s6 YGxV%ipFk0/64d)C ~ǖAo6)\]W_=_B+\~P[FzqJ_`ʬ{1T68j041'10 ƨb3»w)Zr8,{ng;[0yg5>d}3 Qppl[h&x_yke_V:%9ͲP[wZZ^e9bgvnTj)y&-;2Lk[6\${L{ Ndž>Pg /pV3u =M q' !1/y{Ss{.NsbQG詻2\B?gyT)j];nSI–}r|#TLƩ!e~F@Hw8%5Ѡ5~;V[3Z^hvU7~>1+6[ 쇗zw]Na 5\fs&A!mNp! oi<{7b7:,NcI xg2{*pwh¹\D\n]sv1nJEN6G!Zu*0oao@2UbV]Dz!ɫBlqűg8bm+>u32\Z,[X7!`!NFP10?d*;r.wzccĭ@ CJ}کGv%\|zm4i0 ie]bL2;9EF\,7ƍfI5WN8D& 0F*BI`yYKP|Y/# pCQi*HxP &WdO]($& ߍ~l !DWBܼ֜X. 3>HV~F΃!SF} p&Va4Ll} {b3uh=(?e!~{ ^Cn%CLO/ʶQ3Y3g6) M0.ݶf>nP`ud}ymv6]Dv~$?NJcFwJ+嗶<|gBi461yke!zًX">ej]ydidr3FYЍIp9iMqţ}=峤#={Nzfq֠~ma1p?CԄ,etD*I WK0ri1[<},3⇀m;i4JI#g<Md/`|?K)`E#k YeFm:0vvtY_E"{曻bVw'Ǐ;A%s #ꦑϐy1+('=KI$4zzҊq:(*bIC"и9iN|^I&D,'8ȃIܕ6T[R4ɱKT:P4q~nw\O47R(Jm/B'E;`Rw,*~D@R>*nJWUBiy zni.n%j* {`J&#RpB$&i# AdƌSԜ쟑Mw+Z\G |$Ѓdbf#6KbòhBqjJS/M;g[:}aq,Jr8V `"y0 }/^e nB,iK_< 3rˌBI;727y!@(k yXSt3.l}*;+}y罣:Ft:zH5_ɳ$8Rmiڏa7ufK7dו{,hˆd.4̐XZ\*~[M ؏Ru5$%+uLwup!A hCa}Ucёٗ,mlɋvŔ[> $YK:!F4:eUjP]Y8u,r/Z`{N&*KfG7ugMJEp>H/Q HCaaJR]l/֊\'W4e.…=%ΡDpmN.4Y1&-j ^|S6y_z9SSE&,^wȏ#W$, P'vvTI,>-᯸t4lxc&SK:xv7d`$i]ĂB(ns@shKg$<ݲ\sױa+i7Jif|S w%ɜx ~E8"ށRhTj[b(P5*(Gɦ /e ߧ"L} &J]GHj=+7M3CVm,&Լ&7I}JGQ.|EǖPlKzH=F$[YY+\U+G[i” 6ks%@aG#gp Uܔ^m̸H3(u!PB~X05V\b`sb O_'I6k_ә51_.‹P,C~Tp/no A} Ճ?W JB7 ?D1ɏ{*<~grAx%ARSN͏0>((΢͖m#gM[$#?QFs8W8rM 9LMlf$F]d,ԶB6Ēi:QhAurZ6Gs`pp@ͧcgoBeMtYh!`FZ~ Ⱉl^x(˩IB^pwNm6I6n|a JH_wƛrjK#[<:aixGl lٖHY3!\r5[WQ=nb 1 (\=V$w/BEz7%c <{Ḅ5>%\m/ }Z=Ofb(|$ئi2Z'ȵݰ|A߷~>FXOS*=pBkh@tȕ'x um~*p4pXt]t T-f\V8 SʱjԶ9%m>.#j ^lf6p$[g H_+4 KZ22:TS*C1*o"$!K$c'6:Cwbl8{?O:+;R?ifj|Erl`!ķgV_lJd!XnAy+c02GeI1=n!7~ lU\u+-76#, C{ \}dfd ,/p);$k"h=T>$y&|? cȁ#!C+9>1sDxڐ}Xn<[zڨyج'}wE&.e:1618xf_PRVfsKi^ ,"7|ȂCDZ z;r1ձR5Q*\źI(GlhXc5j {0Uh>X-C3vUL嵑 0ֿp윒 [|6 YSi;_篩ǒ*ȖĻ}~ٛ_! W!讆vI|cؙRG ޱ?f`S:aˁLjv +A+@=̶_fMpl=r;ttav~S1Sx)։F"q>X{b-)#bMG?/& 孪6R Kc_˿-)XiV 9淛o\j7UyN68WK#a?٢Dd˳UbB<7R\- SҁZ !1>vTl;$K:c>d5{byOk3ł6zsj %o':![q;>`2,NLgZ^;| a{UrܒeQ.H1c\4f vDg#]:S~}/fq8Va||cR% ~f鉬#/ dQ-DjZd\O 7d0Y$5\_\|ͦ0_*Je5ja 3zo1*\,4Z98z!|HN 8#3@bJE,1fk"` Hh(+p'<|d ۔_mxTMpf>ؔ,bsܞ !Dkϖ8J(]a9YW ^x@mt~ @5)Wޙl:Kf1@D3Vf!ZSnMCH08}*p隶h r`}`geY|Jȱl\<.˃9uyF [|; ~ t%}s + @+'K*&69PģeTX]>9BeS>EL gYH3SH/ Y@rubO=^nܚ'i6f)aawJ|>܇t!/ki\JsFx]r=RޣR %Yr@ĚaKiMA+y KlFSt_,j{i;ig*-EZw}z7IVzIRωӋJr _-&Dk;; X*Dt;3kpw}غ2;Pf ymx9o!XQ)ID#Ѯ_Fɷ?پqoOϔudUhZa{Ju-]FK䔶)t 9]QpѭYϭ%}쩟_]ci-D1@Z#oA*'})@֤#ֆ5[FfaQ-oc-uJg@B NUf6B~h[tbb4aL_uL"iJMp:M1g%m6UU6-lhU%a&)B;PgbouAQW 8yYBgFG@><^U!&alraIhX)ECeW?Q<4Mu&K/c;sqB^ԯqzN"ȢJC.;aigPȓAou^wV.C[|NtZ'p, )J r#Zx2Bm&fsI6aՙ}{Y. ykJn:T^y_i jIכ+!$R?=]MBz۲hSj'>Bk;k)--7h(,==\%ݎ?KV]jq;#Rx'a*&&c/45.0Bk?@,Ԩ8CS}z j/8T2tpWp ~uיpॡL@+|4sP%Wcv2+8c WSd6v|Cf  2 @>;bj{&o覵-<8 LρOt))&錊]ebEAJ*UG+&[iwqtj/BNR`iA!S / tAjيb S mC~m[ϑ 8r$!B&uLډc)<G84 577}jֿ&WtrZ<8>g(#14r]^1d6X糣bթԤJ6_ƃ18'RO_M&cRɊJ!Ňh3]4ʧaKdOuX$C+;eWzr͌8qA=L-҅ 4W*ŝ'[;6yڕ菘+z?v{U}cLc!vuDEq8b n *bL Ha8n YWhE A["OOB}7呛B P)]>/Ņ GsH}]@;> endobj 774 0 obj << /Length1 2207 /Length2 17781 /Length3 0 /Length 19089 /Filter /FlateDecode >> stream xڌP\ n- ]CpHN`݂=ιsz{c9nj`3 M `cdac@%E:K:M]dRof`#+`c!Y edPf(.HԒ`GOg[<L sS5-@lzO:!kWWGVVwwwS{=j P?-&ƂD дKtu7uv s˛!Pu:X_L W Φ`{GSOd(z2L,24s~4ٙ])@F\ `\̝A.,. 퐥,$@W9Nݓ:l r# (/o7:֬tdKV#`F  y~\݀T/BbgX]f@+ҟob[AclY<\:JJBf0sp8yoo{SпkcQ   =33ظ߾?.f(/cq[KGkjm\6BT%VZVm3{ =_9߃]@]3fv6{5s۷So)7o@v}sX'7U/ѿUJA|V?*_`UAo|[>?-[[?-`jAot|Eo:?Mgb_cWY-_& 7_Ǟ/҃ݜfbV8[{:Z,d7olo~sux؂dszZ0?BvNvauvުuu`7uG'޼-jo^@4wsv~{Q}imoE h0 6 n'rgBB_|#2ԃ)Mw-H}\֒d>݊4 xxm? "1؎ϳv-t3duXw}K#j;+y,h* AeJ]f`ȨG94VY`MJ.i6vPũl5ruXJhw[ڤ/O־fxɓQ#GWtP8rOG+lˡYURGC(ɑZ۱܇X{S&"˾B%kp^}l] MV; La0` \ l:CT|`_Gg;D'03%D+^d< Y0V˘4jUB:)& T_~X[!?]Š~|Yٺ׽\=Rȅ禯 v|"觍!n~4` l ĴQjTyHfJ{xKCe>χ*.->vpW8xSuMz @ B?04VXHK5s\^`Z?bDIx$e.&_!k Z)sCcZ>AvM>bL4<DP& 2|Os~l~;s;@س[F32 Έ  XU|6ҙ^vY)9C6rvd}(c=2cڜX-J>fWGg +[lc3!)YM#qMj6_NQז!\X~K+'Mx9E{8d_r}I2k+!RtLQ` _@#i8\>.8{Hkqf1Re1>t*:9CL` -a$^dJ ,/1WGw:XC*J U"н?_7 hZ_ .AذeW0s|#[Dpc6ća84fnպKVȴ7qzV߰B! C])HoREXʳD .pyi:r|^;hH{愆yNZS'*W|"ȗ!qmeʳki~~{BU1gȾ6OCsd% !~qDzxUUɓWNMnj9 ά6JmUbcNcUwt<׵ HzlF}Ƽ2F [^\&h/D95l, 0g)?h(a+^O?)F Y+Tۀnx\j_ u_ JlS%D>3{5{{:8i}_ 'cg!^,PfrPL*;h!>=!.5AKl,C Wqmw_ew2R_/Ha-mPU=83 rTҍ%jFלA2~;U.d?ۅ^v~ ܊{+@I=ƞɥX<l]0 /#O[ǰN??\׾@fˋeoQicu%`'ц3Om4:{;Yns3^i؅(rl :Q_Rhf!&f gU)IR59h8 ^L(E޻21+n=tj TlisUPL |>~'ѧ'35`+VߒkVɭp\I4`6|ğ]z"cڭ*++h6‚/}W?{8ѷe/]kZ- Brx/ӃcX?[d걋[ i%Xk^m:75@1+2F@m:-%suVbh#ĉ%%0G7EJ), qF^^*2,ͥbΟSg8>!q8[}Gŕ!^  '*k xjЩ4dz*BJUlJ3ҽN0Nrwt)Kjƚ2sFܑXyR4YErV6o8J@#KgYjy֜*S?-!tN_ E}lEr% m<>dY&I,'eqgke;j~FTO^CہwHk-6R+ra\4/rގiP"|uC⹻51;(ߕR8֯ \HFw;Qmk>qn6/ If8ݓvPI4ڳ~sK\r4o+4]/$(L⡟0Ǩ? Βhyo:Z"2 aau2B"cfJ:F 6=#()ŶklA)14jBTE/XĄ?#u6 > \gDaM6v'nĀ(n E$> dĖt r2J&՘H5Cm 1c&F?LdE:ه5ZIh?%VSظSRUǪ)q3t>}k/ ΤO yz%Z\=sa66k+񯹠,ta@uFO@kG4[DbxH__ũcla BRDhDQ$gӥmJ[sC yBi2uˮaҮZ85}_z{kV}vP C"}ZĻήڱCwdjpyNqX+_;YiKj.(;m$G!<  CEȤ 9h%CÙȉK,'>/Xr8\*V+(Cn|+ٸWᇷ' W}ru`7oc쾸 |MTgHKS{'yf(t" tVx*\%Jq z1nzKLw\<^نK JIp +s$v1pմ3"k0#9g0Bg$S;def*S`tsSIaĕF =A`4N6n`ݎ8(lyK84!H|ѓXt><u_r8jD}u@ Oy{IVCzh̲0kR<)01W: 3״ɚbP蚵s|WalsФ׃3 ~UD"(nOy _PȪr6P.w)Ey əp fJ|b?%!o&"y48mUdHDR8@DE5}7ni!!MCɨfe@kB]g;+$Z03BFLSyg*Y5j{G}uI 979U>YR!Ã(}hpʂ76$EDٳKf͇ LqW{2NqgJ>#WX1*lV/=k2fw) E>%<TlbnW sZcYLXn.P]Lónط^K@J{-U*P|wU7;4[ȬWoer=N|UC8Ͽ]\d\}8'Fo°+Lg-ji [e\]܊CT J#y%ɻ#5 o[ {ؿGtꉠqI%\_6 *"J1HуV"ܑϟE?a9!pi@!6*&kfz&!kYw= PN2io t8~МTv\g{s0{PY /HTGb~Tq|LW1758}tŢ44<]si'yfPŒ'.. %qA5 "!}t"WZK{ʄIlMo[K\gmc#! J傛 wݎъS+{}x:w!}E+Or40C|"5%iOIovϭPw%u֬INP7ԇ1ZiCcޠXg B{_)dH*M69@ǎ 0$hm+'3͢Cp)< FPw;nx҃?_%齄7(Jp~_WVQڢm 2c\{XshjH];M3"nkHFҔf*=ϲ%$w>36!YE!\PK{3:qv {^Q!u+ªY6BW(Lu_`ÌHM\}U7ƽ&~FRU.+ÈQVF ؤMBڍ,sA@ Ss o}V@N$#Cz=H_>,-ًє ZHnh{; nLӴ 4;K35 ts8I 1NPG$F=D3s S]'NJӂ3]nVͦ#uR<N`V|/h*Djg?n|[MDU-l~] ӶrMM:+'+W4 6#_gϡ[{QT<;1g>^e6ԯh6Z{D+Ox6`E|aS¸% F8pg/V˥py/U?lLv^暯YC=(vZr?l ;+&LHq!ZFb}qI7n_U\!ܣ;.jMh̦_\Mh!R~ü7)NC:13KD A-5Vj~,M#$'@[__FB8%"Z,F9UέI28GM [29be ;p(]C1ۧC2㉴:ޫn$j\{G3?,NW5g :!-\EjcHdN/jG#2ו6SFd} CI:4 -vz{6!)\p*B@P!d7?E|x^\h #/$j30*}\z"_FBӦ2~mwZ䞈^'3:o;s@Er tϚdG|׏s2lz:"kg(hӡ6ݳBh63Hm>eYvzEZOh:/ceG]^2۱"Y^)gG9o* + ړ+/KggAO!ͦVI=juny-ݵo9C{mbf;gJ)BįPEhgs^Ч>Fz&_ 4 JCя}mkd3EuL.@#0RR Z4Jip$>J0[NfKs)D`Ml7**LXv]- zAZ.}zMQ.]/_}%:.! :c{<#JX4g'._G?c ̱Z&/SQr~KJ>[Ӗ{QQ.! 6z㽯fq[W+S͑X=Iv2kܭwNjJ'}3x#PXe>j>>=(A33|e0^\y]J%/SaJR!m6Z]m-l޹a{wsK>^cBϲz* >hX!,5z)Xs?=x<9$V0>[?[&#[aq.7U 5#-?B f@u}{,4 )ogpA;j!#7 3oCw1D $8i0{|SPFc8wτC 7ə6. ŋ)`iCg/OT,ӃϐBabC/!:JNVXt'$_ցxzKzl>P7?Cÿ8˙J 3r_K90SNia gp\"Ed۳N4x2{fzaR+3y̎}xͲ߹A5f>d]D\&vVJw(wVSJl$T<ʖ2h5劼kߤ0U/,NsBp}LSb41SPD2'TIʂa7R|t #*Fթ} ,9ZmkF}-ȅ$:k b#~tKHqb>&2tYpNJ$(+Ŋ@^곸 N~q>ɮ~S+J' ay}MngND@I,&%g3޷d`1x> tN-|&Tb~:O~鐇^.X<*Qkn:1ؿI4:Bzw}0^ 2{nrOL%O@#IH_׸QU g̻z$$fGײ~. lQ95~evjAr$+[]~ب-Ҋ :)%__0(tiҜx\, ttz>}nPCqwM1L=tkن# ȗZ3ϛ ,>-Eik,w038ѝVEa(*(}_R0APPrߵz^*YCGdR"V'7 [_85;埌SHeFi\.v[Wa S # {^b}Uj/\&GɃicFKunQ2Iz,); }]`)B^R,iԇrQg|TglVj_?=Eow:_,hPhETS엶iLVa3\钓nEp1Jxd.@ez $DiѓezH Pq3(6]EVezY$aGJz)WdzkEFAL u:/+{$bM}w9 .JRV*냴yjkCZdij|,{,aNՖrUj7 qb(vd|+4Cp vcŭ,C7]r\&FP]m ]S}g;ħӮKq鳋0yPB6;]Kb'fWCZu>(iM[*i=8*$r4JBk6w?%f1!xɟZޘIcj59I 5_Ȑ&ăpӛ* 䳓7W#q-~@? a[7 a{q臘Ӝ'qnz^,}l?D3#)/2;ѽ h 6)1bfa4;7'쩪ա݁l g k)܄7Jl/LϜLa(^fL֜ |=]2 != .e+.qY+t^qޝ ¯TIZncs˯QlRUKGG |i =JreQXKZ+h0 qP?{(e].NYe[ǖWWWTEe(c,T'd|t"t Ϝ@\nc04WYq%0x݇5-hGy&~8gD@`Z&DdFbb_̥KFp<]w š|-e}4](~/Ԩr-3ZH9~r hHpWPƙؿC BP׷iF>0˚~mIrr2[8^}@`PJ8P Oh7N 1M4z&qĜr݀LnS]`fK[ ZVu~\1~v]O lکQ]0lSK@1#KbZ԰/)?Yiwv]#GOS$LU2aB`jEZrK-ؑ=ZRzXj,E Zr .*"UaPYmkF.rW@Мrq~lHJT˗^%en՝sia^Z`ާ449p=&i3aoOKxJ9 }O-WApv.W|f~jݥm\,44BD.Y@"5d7њb"5>51!^0Aac&"!DkO}/:~r7XW&`_H)if: 8^z6YH M ҡ~2@ksI3!+b mZM;(;OWjW_/~.(#2ݭb*-H3p%~lKgc6BvC`^;e_zn$+b&S\I^*,?9hFAr#r8+8L~C coQE%Nޅ%QR4GX+ȅGʫZ+#_ٶ|2a2FRIt5yv2k9HIbj׋Px#GGuV==뻨 `7Vw{O/0њC@l ,f6F_(f,ńzr%V'-LX۬L,FWռVpBS)KEWMfS/D,ʞ~JO̤YG:&Ɓg0oQ}5Tˏ}IN -CöB: @XE a摯j<ͺE/E@t7 '% Xl#DI!aOD+tڸd'M^Q8&wv"ʸny4>QR]B_R1>u45Md)acGmyV[:dTaBѼߙNNϾ!5bzzTk3zږ`٫|I=]ŽG(Q7.2<<98`-Ϙ 5fnԹ֕>[;nq=j40/~cB<h̘s8^JS:rzU S`u-! &9֡snV+ňFmͪKnOc/\deUS&rۢ0QB*B Us`AU'S.X::@k/4H? `.s}=oh:-5ގZn OO zWhbZHkю S$%K7JeO k0eM`NNR#]4oW7~ݤD1LMCQ3v8v8lrz'r=k~v\ &O)Ap9~V!atgPV_1)8:Y,!IJ YR}bB\ȥt@(5@vdSٚl+uG0ز%UkHil=ж f/UF \Wyߗ! wuzKجGWEG߫(cr@:&AM]o 7m~w2Ho9@֬2eBw3u Fԟizv|0!tL# qcPgBcd*憎w޵Rݬ现< ٜ:LZ޵!PTC40C^ ud;~a3i2U˩?_8uUVt1%lRB*%P"F)A{hb[&d(ard/bM"Y{tl8NIY/RNj9+Ӧˈ(ė/)m[\!?hx Pi&<'~KkLskBM-mVC)@e8yY^Lya-SeYKuyԠwgnZ5L]bW@+YV"'Љ.5u,D_d̂5:)J0CQnx8Jb>ϕ~. 2!6 ?Q˷J6gۼ_6Y7!SN~Inɦ L.ʌl_5Fr?/_ڳAu^qWb=}#7Ȓ͢w QץȗCm90R [Gm ΁~↽Vx3ʚL5jU+=LWG W)Hoȡ3.ebbqG)"e'3?vҝ$4(i7 |H bZ zn#H r`YWMOCa$^a7J*önxumJ{n-*-Bbeq*M#"Ĉ4jpM)ޒJ RjfJT=n ֍C6xgJez=qS= 4G 1T3S}cPuZ\@N{VW4eG-4Gnc'XxOwHƫ풞x5QtS끇IS*#MGt``09i֦vt~-^Kaz؁Vi1nիyI(y^mɦZ<۩S4wl*K!E. -hPHBJsDx'stb)A%pŌui[BŕScL3~j*S9rYI5s/!a#C4ɋRFWЀk1Ů l^.{'O-'@l(!3[WxY%p@\I|UӼj~5dFavR])+ci.yP:nP\D.}a`j"v3e"/1^Eb5[Rٓ*C@`q#k׳=&vd Ja- –(GPade܌a=CZh`3¢pI#YnRgn{vmrTNjTr9^CDM=|XzǝkU $' vqDvV{s م$<P-ex#^Q46u,Ab{=}[ŏ09;O$<4m\U|$EWbt5LFwHdp,ԐPk\G’٭l^'MQhY>[.[2$tOa8tZ)/Z'߿m:(cpBnT_4Q9!Dۭ{fWa@]6f$pWTD%5Wzty]ƒMqE%}dIe޵^6G$ӣ3avSz)BS2g6cPfDb3\l鵽K,L<^nGR(y?(3ȱP#Yk~n ,&Hll \^+VɆZ$+bi<iz>.4]$eVUwhZȞS!cubɠ6;^Jcgo9HFOI:S=aNа &3G(6fe cFGX H>Lv7ٯrXĩBh: k&YrO詝GmK[YCs~Qs)/Zb+2 Ir RAub1p$pR= iA1%2~uMkvC6+l"KA8i 3uD ~|^ Ykd|6ȷ߼H 陋F”j qD2-j3O90v)WCx+ͧ\J,n088b<[}țt.jYv=I(c̱f ޗinþ6cw]ʖJ5gv{;Y̢P(Ö+h=uiGgS?}d]͓w襖!IO5z*2e6/.$%~eZTDtp&4pioIXGbt][~bƢH&HB f#:g\7=}6^&MV"LJ7+]obEz%NYIrv;+G=q1IZRƳ:^$ۜEO&$c>PMC_p@u,GȻy yb(˩%3q5rE[nT =Gw㺄\3 l:_!!&zc|u]y$Y7I~iU3θWmp_ `Uʊ!b2gS$t%+,+/G2DcawȎ!HY9f]yp >2ʉ(x!7Nl!2Zg5+wtUҭ9MwgZ"T)eE/6$)P#˯z9]MRѤIʭ|~răz)ky W_^dMwb71bQ^H`R)4#OX) TO/WX_p^SV~3,EHBDm(v7,2 Glȋc{3F;dkZʰ@Bx m(:ˎ;n^"ܔ^@rrF9gBGŒM<b: Qk@h\R|z>c%C64 !ډ7].S,]' ~]έEoHpyL6i[CnK^*vɁ{c^ra'=L*+F%X7@߈à}لD;&ω n> endobj 776 0 obj << /Length1 1930 /Length2 13528 /Length3 0 /Length 14710 /Filter /FlateDecode >> stream xڍP.-@Aw  4.Mp'8!xpw A]>s-Zc.(ɔTDL팁v`Ff^ 3R ǎDtt!4čovgk @;G^)@ cg tBws[@cEw:@21-6oMv& J[LL...F6Nv. @t4E`d75F$J_U;3#fmRmMUi9=_r p,,- lN6217uٚ@@#L05+--э"7d;1:Wc5ڂO4y;w7_/L gcLH́`3337X0@//{;{   vtzy_0@s-?@w>3ɏfjgkOW̤%&*Couڹ<8Y V6ۇ V%#п_$N?D[4^`g 2s0b_U_'tO ozv톼ۆPMZh r^iێؚ霁_f$hXKJ [g|ogb8.bo[ [;ӿ6`h&7`y[US 01ځRofvH+'7I/߈ $0xLE"v7vr 'BJMI`CoO3YL?[|cafG6re~#f|#g766m,8ž_6m,?X&61-77_8p?[=?۠њk&࿟~ h8gghYz_)B°;ʎwv#Ae__-/|Asf/aJ J3%wxsS3lG!9yʀˍGp_vY*b *'bA}01+Yװg|[}^ z;nqm3)y+*fOwAä\5SHڸ2wcRhI[}K`lpƌ)P$l7];=G񮤝[~_+,UE ߯ٚ8\؇]xÏ>ԏ]ʺi*ˇQd4}T pUujM ̶'A_L#$̤~ ,\y_ GN~qL0Z>j6w_$nZxWA'Dh̀wNaBx=zQ. ϖ}N LŚ`f_"? V@ƺՔ˜d LQ=q` L#Rg2LgS$3ΔI.gDv):lA@Yx ? I!n؞3e.k/RuI g@t( e!N 5cMkx5I9O+F.\$hɵ539cpre]޶ja}MA~jxD߻ g}j?pU<$@RRl9QlM.ygZ4ase0:oÃxm~j'KKZixA >L܊)XZJS~^GfWCH\`01=_j B+FAl(|C'+ 2]ԇu _EȤobe9a<䙻Ag=l% Wh*\HR*x˱H0 v,hK?M\\.n/{=K&̀⤝;Pc+@ Bj@koF~Ί{㾘䧃$6PVe#ߵ6OMQ.FKDEm RT_VIg@dHlfZhHP‡C/i,|Hjh6q+zt!l."ҬZv>~K-lfv=&]A[-mZ%bFf)UsN7fV0+u_-tJ(">2'D1}Wy׺bjGUqx}_5‘@4 {M'P!9ve HmyLw Z{h O;>LT,ZL6Q6R'{zryIgZ@6/^<8z]-2vnRf5Jsb`:vSu r?Jz);kSTa~ ݸB9We1}ފӊC&O+xDyn%DA_5j}\"(%QvPp>-v Sn%a9ǖss\!ұަ\ { aᗸڞ2((n;'+zWI~‹VNUH揬/Id<\rv ߟƺG|Ξs}R`DeǛ$] :"9ԇtw+5N2W1_cCvncwv/\u #gp/_e͎dWQm6 =qpXQbӈ? CL]?B_J" A<4Sm#Eiӿ=;XX6UAW[-&-rx<21\sS' 9a B&ә˅-fJyMgOr,Zs |Xnps7wF~cˁ!.P#[7Bdi9M=6iΖ+H&|.^O0Ħ!5[|#X(~jH~ܬ7|=iU.# Lt^O`T9[s~ݩkQO;<  lp{g p` 8 TV!v^i-!Sgs7m{cTx^fL82^jݎw>ǰb^_xRH7.OzH-iu麬Ŏ{/\.t_Iuw5m BSvq6j;GJ foxLZ%XƿF|^k|s<`PDu'=.)0-:Rm]>ߠSL_"mJ&r>P^|RQhs? \\YaRyœyOp$wX[FNjtkeJi6Ԕ.ZVKsߣbz,[aҗoɗ{ -Mc7|zV ʏiU'yMBOtCyCa0d䬲Xd#&"ʨ̀9?ĖY5\[JTUZsMaWI)3vW #6߱Uan}u#͝7$.Ȅ}$OHCc;nV$W;kN`W%eѭ9`~6LQ&% Q>3IvquIu1vɟ̂O@Ӱ6c"T !{ʵQX!T4l?&pZ(ɔԷ bcMzŜbUH>:?GL] #r8aEz__w ['=Kz5E4%}m14>䡭6[nFcAwPffHwP 10wO)9Yr-'HPǫiz>֤_wr,~2<g :|ee'&Eg´4CIj(W((B] t,7W'0E-P26O:%f<.%gM?^ c"m#CvV n*;`y+㢙;:>ׄ{ N3͡AdL1wR>vnM_5\~$0]*ZE9)唞Qsz=w5$ƹ!'8SqP$텄 }C~oH0bIr."QE4P~9;..0#fd8$\=!+P #a`ku?īH~~YahS@X,ibųO $޴Z4SKȏT9<ՅOiK~_8^>E}iyrgsDn#zY ײCګsQo c[ :e:` 8\+ӑ6 vtYVׂ<۱V]vy(qVØoƒq{mr5?:26i!|(5K͢*4IU[-E):8֒ợ-ׂʪ0U(i0sL ǒx7y# .94y{ *>5l̉ř<垤iч nx!ٱ{ ԽFqjBj`ДccV,m'-<6Oװwqe:!h^ttX 8EtF^8Z*8wL4P|F[;B8`R-7񥦘ϯ<^^7C"Z5ȌtksCcL/l&pR8pB.OгN8%{ImSh*p[%w I%n7}NSɬ"h87K< ҠLlpKǐVK印.b.xiԶN97W:lS +N1sts_F,9Ws-]qni4Ay>ZH$ 7?+?Y`XƔץ:)^͸cEF3x"WYs˙ S5ZʎŨ S݇7jgn Kɍy¥~=r.gi^3fd$9 m%mTUeطVZ ZEAuⲃC5TT9*!Rw.q*LpC 'T;=\i."+0MB1IyYdPCb4qgJ+)t'Ө87.V*TXpQ cԼ+?輏쐔 [|'I90"+*WKZd?2S#c{ ;Տڠ &,Ug+IBC=F}:_VqMXoT|{]ρJa\}(y#bKxw?_s׻|~Uu5E */[fwk+ӘߠN7{XoxOruLPѸ!>]\!_kJsg Od>qDq|w), %Li}J>+7Dž 0[I:S-͸ۂN0YC.CrQ]!|nPl"_: ؠ.Su'SU{h'/ȮUFj޹a2 1ňTDMEP^/$1lqviqmtW3oll9x:tĢeX_#4kg|Ak|Kjm~7dE薻Z_O&YLh஻i9 ;lR9.APOseg\ށ&Y@UKjd;R!qZVK f,FV61ŧDPA/Ubs`M7oPJk\S_qR<vhUJ^y~l"Ka6/nZ qfx  =OR8BP] iKp!*`p憚pQ jU &UAQ"WQ@eh$w>zEĂ/[h Wz.a" C]:g_Zkd,%ٙF唡 D+Ca(K&Xdsu圙5zoAsIVv>Jׁuȡqـg\u{>xu KSįCZT-WzɛE{Fh+gp((q ǬZx/y&j/W. M'qv3vO9@qwNE#{*QlS(٫LF{+t*,1b8DKJF⺝ 2 iм%Os RR8G( {]WRUBrS9#d>7s"_aڒKrv[g/$9u^OSe_xt/ԓuʧz `*4 $t}?Ng,׷@{|}"7~0)"+Hezӡ6a^@Wz3|o 6N/yjFfiN2겿dj»āmQ]_֧:=_ujq%Ee~!$>zBPJ-{ú^rZw.J6t0(Ж3ڲt$'`_SV{Si<P?6m@6uR#{:Y'l]zPڇ]3σ6Cy:Ͷ{R1*+G2c$"}k$kdXn.%edIףC#ù*עuskA= (zI r7GaQ650#]+fتet(ŝr+[uK@h]ӓq&lOWHO|rm1zA3W'>,$C-ǚ"O^2r# SXI ,"O)&dPMweFu@E0A \|WJxQGiFi>%&qJ ɤ]]k+gʒmbO K].kjqGogNODU&ռI WqxdH)MėF#%)c#fűĖLO WȈ1x0 I ;A灂*2_??{~6,.'$팴G^촸0H|ȥ(Z"`mqn`'[^\θ]¢6)--b lkS{@vW|?bI8w CʯьVhEs} icd~gSMA@2wH j˅垮i''k, `f}t)aq0<}޺5¼Y YO$Fgd(>5&̤w-Cp 6=GyIf?%% u6uj|Qm@Γ&Ozab-/Jj--l@!󤬜cw$£b0`daj']u ?U .魌r#_$=Z sL j(#c7L1SK?ɿFOp)hS0Zʏr+j0, ,N̐Namߡq?l$-AM%NRe1G"Q9İ>bK2}W]BbKP;ţKF蚀J!:Tח2$8=>WQv:Htkʜ}Ag~93A@E2__mP+zM_ȸ/'h܎S2ٻ@ v+D\Ij2@GTZB"hl:Od 1R^ w 6 \)pȮV s^T%Ov &rkp!~d@ D]We b$pCHjz8X7%zKk"~ǀj{dQA?5&_'kZ]bo^fm'.0m͙f4Q}&y xLgzMgv T.r:n GplgiDB{]jW6ty&m'$S b…`%F D~m,Vt 3-;joGT} )Ƨ y 6C_ 2iT a#O$MEt[W% dԸgKT|To"]U K6:R"ul23N1pۚACޯTa.R'1y~Ђ'H' Z/6e R]Kỳt1fEnD]%.oP}`?Zoy c RD-{%3+IQWx+;=e&_|> *Fy٩V{nuPh/NkTqCuKK ƚ&x !jG(Hjڧ4rc6!qD)sn~)D5m /?울}udڂ!ѼBL)d챿:,wRNM~{ghY+8{^Z B%P2Qv)FТ^ $+U@*7kz@͔?D*c{2 AԍgʆՊQcV}ݔ*bn;?IZ0wFdg0 TM,*=L .L vCdaq@ )Ȝ,7] bvYf =idy{~VcI*(كF댚Zں9 J2M޺G* *GWt֌7YGIZ\Rٖ!Ȝ~ k'L>5pXU"(ҦJ v u! 7ɬKv.4 KD{f6.OSy, LAN<_2tjCY<SϱT~Bg倝 m/\ÝOblr9)b&<Z'B6!5%XȵZ5~&WL_׫_7rl^@4[y 4웧g'nwL8! 줆Tde% -Im$5؏gD{d+ԭh4HI$JY"kSQ|8 ڀZO}ma'ƒw|?@5&HG\'TBabnw0Vz \züo/q T>~?՚®0OY~mcv.XrscU0ff3/c'szMsDO>b8!>G.B_pN5A2+k0`Q6eeH~m3+5@t3spHkEVD ga-w, ʐ~X,_…\Nq.cÇHpl@QJ4x.iWeXE?`dAKMD4Hk BWhNhOD:՚'U%,P-L7׸D!φ$ü}xM"Ϻ)ី@4vw 7gwnՔy~T(ml_B-4ӿz5]:2,9& wue-~Z~B$2օ}9Q+2@,G1"b=9ԥʱ4v2D2('W"3{zz;^aa>m4ܣLkܱޯpo+(]V(so~0ʅ@IW`#k .嘺"."0V֠Ȩ:!G>-Y\y6 3A5QM=ʮ: 7Jn?TZT51 S endstream endobj 777 0 obj << /Type /FontDescriptor /FontName /NXCISJ+CMSL10 /Flags 4 /FontBBox [-62 -250 1123 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -9 /StemV 79 /XHeight 431 /CharSet (/D/I/M/O/a/asterisk/b/c/comma/d/e/f/ff/fi/fl/g/h/i/k/l/m/n/o/one/p/q/r/s/t/three/two/u/v/x/y/z) /FontFile 776 0 R >> endobj 778 0 obj << /Length1 1866 /Length2 10503 /Length3 0 /Length 11660 /Filter /FlateDecode >> stream xڍweT\۲5$5  nn и{pww A,8AK`^{}{Ϫj\Un -),wȨjhkp8y1!.< `'g^]`TU=@rsu *'@jv`:x:A]`;lbk9@T.`;؎@[v/]\D9vΜP'+ v; vreԀvqb0!riA-]܁N`` ;ڃN-%_d>'w _P;' ` U8]<\@{o" [tBl0_R L:[8A\9!Ur;h9{ l;?Yv\=l Yruұ8d͂0Y]°‚` kߛh{:r6tz;@0)`_% t\\:a@ 9 bOtl/ 'ք<ߟL`}zC\Rj l-- xsr8xepA$aYaiaeø[7,-܂0>:`W=ߐ 끿J & ;7L? [Ulu3Ul? , l<0ٞ@Lukaץ {-0b!6!7R۟u\1bms"|P#y[A_p)#1f-Qk@.+VD A1숳酚()Yb Iz޾ MՕVПpwQ]}oEWuE[?MQ^YntL[&eC֣k|Ail0 Ssr !މ>_=^¿g/gڽ`/^RALw$~H)_8TU7qpc ]ʰAt<,V+Tq8 8|?7FS~AVD.5i*vDzd-/ƴ~>:Ƨmeݪ]c0;&l+Qűsޫ~rF<@LKE3n&;aML_KO &ѰqZ8IQwf=}h=Ӈ{9XKhZ(F4ohbM FOPbVtЛLZ 5TX^?Tи<++m<9\ݮc[l Z%x*{K.ٹO $Z9[*Y8܏'B4TUc,a^V|'ݴVdbI:INW(eވ$mGp\ CLڿ4MdTyqQKe 9@ *И;qP޶KQr76x3hQmv7&sM{@Hڹl0@W'6 t ÀT -uwZЋS*x>QGHI1=PV]k܄)V KAAT(^u`2ҽ!31M{S8!eZ';6eOj=ْh1tN\Ɩ=v8NF/#.cCDYCɕ5'˅h$ (W!Wdж>γݷrQy3x' ~n5F5i>K)<ۋr7D4]Ґ0ʔϬLw#/[Tԑߊtn#b£Ma) ݁3I\0s÷ޣe!Rǵ 2lze~iCN/)V ÿ,o5uu&9ܴTƮ+i1jXQK.?oZ+56"9bk^IrA5Mxײŏp-*]_ĘL@q݇oWwH X~:RD$x}MKqyfk]D72 b2s|Ӛ̃`^0a*p CR2iJӨ 7Lt5L{-qAѾ\7.(Q"2(. *ϋ*Pқ^Ӯr2^g`Gg"e5?,E^'E%>iwuX nr;NؘH# 9HF1gj3'tiX0ˣE9C[fɠv<]x>߆2Fk"rP<%wߡ1w5stgPہ޼xH2L9nۖn{W{9,Fiu~%ZRse~}bWx^v8f +*\.@QvwY? $&|FpY'd6@hLS$Eu"-K%C/r+tK+祼-hV4x>lrc5Q /E#[4Mv[ էH2Xs'zs.$hSekyEti6ޫW>{C!D=ƹS!Lj{-+Y!r@nY>^yUajdBv>bd;7Ǫ` $ϡ$8&$Z{I}(|LP683[k5#ks</}0?z腽wn;a)#j>U+饷Ez.G I6eVoͯpt4aׯA9>~2ra.&}IxGMjow}b1IہVcfԶPRlai7$<ׇJ᨟eHqY£bW=?gDZҖs yƛ Gq/5-KG%]p[)DUFvE19 SScG&⾴ [# xʨ 4N[Uy/sss Wx¸Hl4쟱mYԷPuLGL"KD-;¾9͊˙VeJG~ 4p9Xå.]NmW)`ʶ8@e0/Ȣñx=˕f؇Z~lMp) „3b̅# k1% EMKY,H-ka)٩dNTR q?/\$P?жˁQزYԛ݌#4`Ӭe)~R O>$~=D#ڊޏXgE7Zt,fw`%o7P:_:]l< rOr׎`X)ҡd”u;Q7Kpߜ<iR)&g:3PgX(4ؕ8|KjW k?|"YD^աuzɺ !yD" +;י0#VܗY.|#zd .^|wb}߆=޺;,*Bz7y8FLIpSI^=!]+Q)E÷)kbb[r)8GR%~F-MA{> *8][2d(d/Z# ;ig)/lq@cgt{}{.j;m[TI*>]< C"|@2I<.*HQ/Z.ԦqE&G6دxdewd.R~Un]DBл'V/ڊ.۠7ɽB|z ~o'){¨(֭J&xWۿ|VY8C0Ya 8,sXg@qM\'5zm*D豐{Ѹkԙxq F_X!QHZS;4 (>M=FKX`͌~'k},S'@V3v Wz;X"7Z^otL%w%rX_R %q#~_whC]tE]p3'!0z}!m̪&x6D~@(8{sЮu֤_K )A.b}%$L/F*驩q^}P.SPsoҨ$'\=d6r+W7vRkIUT -N̪p[⹢H.3_Y9 12"U!mӭxc%!860.C)$b쥋F.vT[A>iΣPm!ܧwm|=ǡ\QHM[.b!S~S4. ѷ!C-B 1|Ӛ<jW7XP!ˇt7ZH}4"Kh(92mK'Y{Ǝ ٴzNz@F]"=}sytBG8C1[8'y&1Ϛ10Ϡ595ɇO+ N7Ku5~jzS}ɉ^&;pƖ|i+Ac ZŘ5Z%)eÓbUqu(4|I\;5"VWxތD n9.5w&s(O5j9vH"Q{]̄Zw#IVP9[De%ZstR^#%I̯b_hma'E"5i&OZ7x#Wi-Ka8OEǺ^>BDT*# Z~BmN6݄ίc%z,MwocC?~ Vqm<2y0dr2~ V2|j~9Xn ѧc$N -eR ǻn(N(,HlnCCM;z1l89h5~D|+J`zp7&H'K:$̐&ow?S9\d }\BcPRg}(NZSb ͑xR߸uVekk9M]2wu_ bf܁wnV7Q?&qжV[J-p5EM>DUY8 B"}b,'ҝ_;ck?A*V׮/)vv(P>M9IixJ؎vKF_z8Bil|֠YR[wV\Z,4_W7+w 1-jo((2f4`.JgEY1wGחu%jm ~پޔ|؉6\6޻Fv#(~Lѕq|qФ7`-+ :(MGH[7s( 9:AFuL7zXƧ7}[!T $ɅXW6vB)UE?-]wߟē[ і. iIGdپօ!O}CH 7m7{`)vh}`ΪTYF?3:Bb޺4ǓJ/WMSH՜O(cݖBRNԴoJ{`LL*dfn.)OHL#~8W•nl?{u,fY BoZN=!N pQQd2 r;_C#ql0F2XTliC 5jMsCV8c4ǟ/(|56H ?a^DȔ}Yn2%Z1ː˽T|S #lUG3f痠fY n)98XՇ%yA}Kp<В4}v-6[|yW RDz O&/KY d&ʪqʝO_-M;CƲTR'Q꠷gzc1QS]WJ&m5LZx^"{ǒ^\+QsQdGx6G2.Y\M`gp^ /YhH68Q]DΓ$ck%2?{?:^x2*tMV5Qn׬[fB(9Lm^bbkJSsٞ4`ωA4+E2cTCv_H^&arRL,p&hJi&uMwQ輗x§= %~UßgmJ9Ig;RdEvwI Mt f*Q1VGIY:;Zc\@,ϩڐ(5sPeMe czbJ˛Bq\7d,јHI诀s0#˫$tAI {>KLM[ R~;Br!ecեan ٍ&t. *xLr,׽z,pFA$kz%|KW٠Wj @Y;*ΐ^qяnwOE֡2K=RE>h&=OYvM'/ѷl{qMsx 4c |ݺ"Av.Wdg|Rk%NOS0*]0_<EO$p\M:A4 K?+ΩD#taeAc/A=9Dwfo$r;|ȳ"jfV,~4EiuysyΧ@28KX>*3Fk㥼f4 [ShCsj^*PfE2S7x뫹~KC'pb[QoeoR]PHgeQ<\juqo_…7Ԡ.ǝ`nQ%} ҂n4Y$k0jY;NCtƨ{pꦑWkm;4B@.zF' !ɏ#cs<ŸGTDr9VL-ŸF~%SIz|P({1!uǕy<`08Ԓ.Ե>Nt~8Ft)qA Z8pETJ.Gx9RZB_HqINyj:7iUǒȊ=N)aq͝{)쒚b{>;7e]DJE,!{DBmv**>9A:@ V A~؟ٝ>j?>RJ$9'_ݭJ>ڜnr_WphVʘ)v==EO;Uv:4pFj\y)xg!dKvoKA? udjgl[ӺQTPaEҐʙ_l+tBpΙ(_Ĺ94PjIƻn ௅w4J~qz>Y !hk_[-)n9o= H!h_"0?43>3;NsJHELWݓ[BDߚ~V?r:i$gpN|;.Qt) !*q?Vf>3׉4jÆmĒ>"=*o>^BZB2usQMBbR mYW}/&Q'*ViP2| dx>/dH3Q檥k(A)$F)8q0 UmAؼߕ^R3sWrBnIw3z_"@uʏwϴQ!R%Lݰr''Ѵ.2']$16yoziQ1!4KC2֖ͭ5N]|ȯ9Sߌ/qg'#C } ~U>2}Z:6w/_H{kcM<ƭeT3lTŲw* 3 }ޏ']KmfnRޣXR83Ejb| D͑j"zReS1|{M-Xt|dJX /mDtO0ʓ! Wòӡ+Y#v909 AX2 S94W٩S:%TTtL/.OUMb | c#~&GUβ.xa)2V !o8w$BZz1Ex.L~'x&慶-]Uap4;n/5_QYa-@>S\-^,RV@[ [G>)h}FdN-D|fEF (aI}Uuȍ"bgR{Kq_>O+]|UaL c uGX:g.rPWJEGCDYJ ԅ_c"go51 +̲ #tVF& t8J@<)OYynhBCI5;c_Pոe:!TDwBv7,7$9r fj7sQ"+8)$Uqڄ[7͍2ͩOE;%@"0{\>I_sN(ـӞ[.&,T7Eh?"i*L1A;p5.vzġ5Э>>/^4kGtMA^WćzfU:j G`ƭ#)8v6&r뻉E_[@D(bdY{[T7%~̟SCYmY(e>s[hzIak)F"-heDstb7 믹mqrNZrETW:tXD3$uZB *3(n9<|D7&="%\P|;(c\HXO Q'z>SHIO ZK){V |lBr̟q1+ZtFVx`Es=t~lE}aE7WZWJCp| Qk,B)㌮ [0DblƓC}\A:|HzTRi4# JRٸ;t`'>:ah .ce20[deƂFR(}]ѦqvsؽH$+gTYżeKg==uZ"Ρ~H&Pz+r7+#O?pMŎA띗"vZVhL%n#=ՆӇ)/8 #~ұv(9CՒ~'5fyHG/ 2s#}׉o7l5`-~8W@d>O0N {9N_:1#ٻ{nYLx\{bF^xi%ɨ<%*7.WđYNL6 endstream endobj 779 0 obj << /Type /FontDescriptor /FontName /ANDPVG+CMSLTT10 /Flags 4 /FontBBox [-20 -233 617 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle -9 /StemV 69 /XHeight 431 /CharSet (/a/b/c/d/e/f/g/h/i/k/l/m/n/o/one/p/period/q/quoteright/r/s/t/two/u/underscore/v/w/x/y/z) /FontFile 778 0 R >> endobj 780 0 obj << /Length1 1423 /Length2 6058 /Length3 0 /Length 7015 /Filter /FlateDecode >> stream xڍwTk6" "C7 tw03 ] ҩRҡ4(Hwqyk}ߚy}Z !yyA?yA \}(⁀a(ja /HJ@$!(v/ A,p7_#UWݖȺB<`F:B\Qm. A+#& vE=9o(Ѕ ^;'e@ Cw"~;Ho@\ xꀞ:p;ݟ蟉_`[[ 9P΋Ar`O GŃP k`@IVᇰ!O|?ӠYf'wuܟSz@lQ07=fg QQAp9@0 wc䗓! أh@?@t{Am  '; FP@?Yfb>%%5c?v}~G@@}eCl?oa4(9Co٢,{GJ.. u@ 8j@` 5g *H0jDda.$iCUWP]06y< PCg댺UnrAP30[`_\Ja€??jJ > HT=pT ?jr")ֿNMm%ÝߜUx,Ě_lyb-d~+]9ediD ٠yGV\r.MgIn'BgvMYCKdmaƖd4q!)ZRj* E' )4xٜMXEs4O}ЄS7qTKf |yۓ*x\R<*CNwTdY 4V9$ݱ.X[6:]G:٩^7cnj5IiXCM-&Wg{Mh(jNN= )5I֪WPbC(nW`S ~v51sY^YB\jӝomW R?c. M=zG,oo&nN1&L^XyCJ^theNo=,I~BZFiXb&g-7 Z93GIY}bl|ȫ6_ܷZA>:e1w b1Fb1Xx ~szaα^RUrF be1d:kq毙6cB;@ra^Oumy88V<%Y7|8#b"MdݸivVO\}[c!̊v昺Gk.ԏn(Κ:yy =bARb'\dH :SM(d{ ?r ƖLL[)PwRyKDwTzp}x:'> c*kyNm:"‘O{lL!Vw|J8Lr ^xx[ӷÁP&Hgݝ[rLjw~$G T%A'٪~;s b=ή3WIVk/h9)>i'J/25)PpXq~Gbwؔ1g?ZGQ'K~.YNab>#kn+6LSXiM($9,"{lRE$;c{?؊!DӒ1K&(uwA@I\9QҀQ+ <hMddUCI"®1ZfZ(= PҊzd^-w~ g:ϞLg[g9Sh>, RNX vjmG:B?<+Ǖ ӗnc*3?&nD>ᮿ?Ϯ ~ Q$l)zyz]x!1=a%yx?6v-_o*􂊨_FE8qumoZ^I8%&$ɷ'POGCjjcy%{x^- d$EK:SFEPNR3 _,hRiLQ y-9r:nm1ocq~.4ʟҨj? o4/xd9OQZNaBoS<3T`Nݡ&*K${a4}z~̎ Jt_bdV&=.XmS䀑tيb'Vg*ùpüz[a8 =} 4>Cy u3sҭI⒯6'-KN+nsPmwc$m;DbU\Ixk½RILqmQl: ԆjTGktCy*GeE S/9H=:1oL-rV~i"rM/d6?,GDEb[#%.hq.ߩ{fjGeҽLG X{AǼ: OXȲo:f* ӕxqrA7-شy~J}}f8P8N.Y&1Su#B^ psEGu%9y \͵qNznH]$ʑR;^Pۋ閲ZzGOODPD)~) :z/;t 4^ dKrvy;,h]O5;*{L별RYGP`%O64lNwŻ939\kcN uO g*p vsNVV&/-+63y6<\aynAHbLhRnU(Ky|@Qk ԗ:.n<$hFy c]h C˙R~p̳fiW( C485a Pftlꪒj&ٌEnW Ϳ 3cM*7D7/)8@IKy1ó9#@g"uG1jVĕۍݨ<#* 3_o|~`rc!ʣ+rU"E̮'7<!Cj*s %_r }?k 2[a~ܗ<}YI@yiRIH}l~c˄ :݃EbU/LԴ| BUqH*U&ѠUҬSß4csU:j3X쨽Xi4y7Aq7&|"T;P"j<6^Okߣyqa݆勺ax-IE-vo6+Q_=VfN,˂V&Bɼo檒D$UVIJ}}t &f#z"ߧ-[on0ո;`8 VMI^={`[]l&ǥp^V.ʧ#E)mҔ_l\"u]Q 4k&rͳi'TTZi|z8ylEo=<_Rn_90|yûĔ_3S^FD Q`x>L,&}L1nDֺn="ܗYXd D7)`LxAPhI(N ]i^ 3aq0;ўw 3(Kx#M-m<G|Y6O\a<)xDK):EL@ѥrAo PU}景:y?u<]9PvcuwsEڢRiڅe +QzsEf&:d; Ѫq7RNzoȾFz41 T(,az dΌc6.v[ ŎBK{Eu0N5O:[jfoα8t*ú]Ywuu+!d~D߱cU%^`ps<"2DKTE6#e22XmaL_I2>ש|ǣըﶣA#^e?&fdNqNuc`sEN oӘ6vܢ獏ߣ*Sx+>6:[0r8aXXA,18d{fvJ]UJ? }+OUٍR$O~d>bRj~/5&e0}$_wxAwjDgVԱ.ŒעFh KPK1۬;>{~&20%RCDy6޾d)3x~91΂Y0!9vӾJ&oJHOu" endstream endobj 781 0 obj << /Type /FontDescriptor /FontName /FFYKXD+CMSS10 /Flags 4 /FontBBox [-61 -250 999 759] /Ascent 694 /CapHeight 694 /Descent -194 /ItalicAngle 0 /StemV 78 /XHeight 444 /CharSet (/parenleft/parenright) /FontFile 780 0 R >> endobj 782 0 obj << /Length1 1485 /Length2 6466 /Length3 0 /Length 7468 /Filter /FlateDecode >> stream xڍx4V*j31kU{HTbS{ޫVkWQ[]ERt}99繯{hB:@IN9tO^Xs*xM`wmj"$ɬ#gVr; 1t ˖;1?q2Ƞ WEk0YŌVdB$9)^OʄȤ >;H^zCu${A!͂N g2{h$XvŦDȁb [Vn7)G[cҺ&VmeK`z9x~{@i?&^jJmSGclj?n!~tdy*%n٨2&ljv0?.qI2׻7IcB,g&5{mK-j'= (ANqJBU~^(h+WU`{>rv+^RQd Eyb3=KU[խHt"-ήvOڀHsSfFIiYpf+j - lg3&|/գQp3k@i|7A82qv.s})\³ͺWmdtݺ-r,\Rw`"EF7n5a4z%SN%m <կ_ŸT8Gw}p?@*wWHճ7YA6x+Y9Ֆ"],W'3 ޷ZViZ)=f`Rl n3-餼-_~?PYMx{Gƙ ve}\eƀ+T8{S@ȎᠱFH0.xoؼhWpUeQY-v"lԛҋz y%O5:io-L{PjdOtRDmc>ulFr7<OOF?9O1{Lyt?j̆ByXz?;{E1}hk:e\>JȑSwqֶ3yk:}0k"24?䧍) pzH4yH Xg9=oݜBaktthMq֌j%bÝbu0{X2uH!kTf a a |b>h:;n5bZo?(?zo@`2!Ce<_m8_IS̎V ::tSk#a]M)>bC{t<5˙\,J7ګ۶ z$C .)$VWR%]}k^Lľ ԍ)Rt3T]PޘA~jJr%,ubC%zlͭW:Tn8p>EDFK%!0j>nvm(uїs񐡣Q9짱Z%4򹳾睙()ȽFDi6Ҏ_x8onmX>AC.%WyXSWF󗻪қ]{ vOͲ..w_`ō}!'Tj/}Dދ>'LT! hmV0Rog#p.ԡ9szJ t6XKwH AE 4I/x6jZM,Ū?j:қ[(ݕY)2i (ݓ^O'P47c|O2Pe׽)H9)AteWhxg݈e%QjD1B/ H,u,v}uL-NPce2i1uݼwq7D('>ĭ=s~['Aٗm9$d$-7+zg7S"ctJaҥxWǥMoT; qF.\Yk_G8I1:+ pP:EQӘ9@$YP~uX6[n`e;vBצE!kV2Bl&V>w)2?`;P)nNr!zh-|}ƖLTDui^bZByGȘ^.42E=I=sߴaojuB'e^y}$noOssvU@^5*X:rmZs9hpv.'9Tv+Gk9,]͇îgȕ3@Qj7IJ`$mB!slT&t?W6WW6k*cKy %\ áN2ݙ51TG Rwŵ1@҅ئU즙'%=Օvj ;Jݰ '}`kC4T \-wШqknJ;e,Ly@ԒOb)*KN ٞܢ:' / & ݚbbTg\/x9{m-e*yW4$ňNU<]Qhsƭ>g˜CQ]7z[xC[>~GS'a&- T25mL/!/"㇙u_X_hDFVOwB)U\'0z)'W|W75vϾIMQm+K6<+\6Wg6Po71ϡ%#*dS-]ԟ ҲNVl|A}^ A޳^dy}!A a~0z{(Hde)EIƨМg}_)^y8&}˖PK Z-ae XfS92/54#] t^ .^9hıYPCuCR6gh;#uRr,X+.jzZR\с=dV|:[ڸ]-vXTuVRYZְ~4MT?`I5\`~{)*J#{zScT gD=_ZUbu-jsٍV Xn|Ά7IqFl=)_[ a;][ QƲh. nj |tQKʝUǠ#dF U ;4K˶A2,r 1 K%AGn ߱=4u\|BM1Be1:5TȀ&);\^bgk,w!xPXVLc:*pϔ~2Fy7^FZk|>ry=W"Rdŧ}$mXj=m`;3 S\&k^D~矌Zχsn9ɽf;2ņ =wt0PرꍐOk*u&{\+{j|N/u~Ɓx'|EԻt~"ϵ-+au֬SNϽ*yx6SnsOe7&N w7&`%8VtK^i4|:S ϵ?8jRjh+ݣUYOP8= 36<]˽)n8P'Q 4E\-␓V]k׬j 7 \zOIt~^X+(5tnņo\RlBM&(diܷCAM>>3oEϼIe%7m+ ӽ:,£MrI2XZLْf~;(bPcI56]0Oml25%Р#xE > 9w)cNcvoyn_j'qWPt 7K3) Vgav1'ZXd%]!~{̯8݂TX}ov֐"x?toȺhvtʦE80#-ԲCy7X4v6?Siro*Gso YnRK=:|qMuMl > endobj 784 0 obj << /Length1 2842 /Length2 20579 /Length3 0 /Length 22184 /Filter /FlateDecode >> stream xڌP 4!8 4N !H 3w$*ϖ휆BME(.T`ss"h#]@NhH2)3w#@dgp WU e (nH4N> kwp~[086;]Afe3w8=@t6΂ll^^^fnN֢ / @tZJb'5V$ ?NV^f@X`:M<-pt@e(0)_wX`TeXݽݙf)ٻ9<@f`df +G܀,h)ttwCh?͵str/9ZZ3#(/X[f t𰳳sq. _|r%  Y<wW`ߟ88 w9;X  0d?'-fWWa'%$~,N..W^-U3VNg.YFPqO3@{߲[q^MM_^_2? ?f {4 e'~8_U]Yh pf w 77R na ` G+gaSި(hdq\]|%::MVNH&?&$#~o$`g7F6߈ &q~#0E7sQ\T~#0?ohF`.oF`.o/s1vf".3x&+34sw[F` s3 ;7{37]5w5#ϦſEJd%#[Z2`|0xd^`gVV.".zĆԯe8"۬rz~3yoΡJhHE)E|4 ok:!2h\pL+>zy4'OcZ$VAeD3'-V( zfYfC rR9פʚHˑi4̂ANY`kK.I-N>Ʞ硢$H;op6vV-*4xϣc׵2}b FQšj!=En+v 'HVޥO,y~֥2L?Ȣjo_ S xJ5]e55:.G޴xg|srvUT?ü!.֟0u w봺A1~d-d6.*IsӺW3Fe_W~RUCf+7 ׫ 3vP_VG%O<k_Jv 5x|qr ܗg^9_ gFRW?6fdDg0BQ!YFSP²1(C>k^ Z=TbK5XL+%-_/)k.&!lČK$q}|Gt\F |Oe5RYrRrJ\B፳)b99{ JZT]3= 9fjaθ#O>Rq)c(hŹ۹dsŁs+nœ*w PM;ATQq7w$k_RN~:^dbw:8Йޅ> q9ބsz"}ꅟ8ь%i<: xni3ORyY6B{;!,3ي׏q2pO5 Lfܱ]xUߡOҬ ijMҦNVNjQPV1LZj#3˓ظ$|}$cdw^T+z;85D>q} H@սِ?ǕG2?Vn:`~禟qF,*duPF@d,+Om8d1Ao˯Vy^knl}YSѳchH_+~tE҂l͎G趩K$[Hλc4ԏaV_zX=F$dͥYt2{%!+i)1~Z"Zo=>8ok‰plUAɘ<,|/[yYG)OWcx]EÌE{B- F뉦EsR3I0x!(:x H|a'w>X(n (~O%ckF{8_2' bXF}ȫcS6˽S=eWPAӋI]Jb APIςd1B54zɡ0{2ƖSdK ,Zq>tM衑jǔ+ĩ(Hb)aĀi/z]çFeJA'0(Wb6 lfVR(#.1Zc!};9yq[u8lA|끐u r}fϩ-#6k&2=ͱIv֤ ȖOx1~M ucu6]i@v<C3'Se$KMO<__ܸx+.8gUM7A!&ٖNEֿ'F6{b 4NBƶlPmYBTCy=o}=ߘGDy7Z maѺɟa}$f"ʡyi {AO=̔vv l4L#XF325ZvޗYrIH$3Pi4E.7xUǾ̫~ƉFYN5-Mm#UrIZ뒿RTf\vq|Z[$"\QDz2?o<0Ơa=V<[eIBZ4wd>Ⱦ \kN8cH,+I |Gt+2D ~Axl(i]?V'EB9bL=׳:|>[Xݐud^dmߘƫ!n$1yS qWo0!* M'/1e>#7^wvul05gʕub*~݆P׹o<gIā'8"M9e^:ދFrfe23Y,lm."-GVqZ$XsMdQ <Ϣv: n{̄Ɇǁ_1K1Sf5tRLTʴx] yfDbu?_%,{r3ec^c=T ܾY0Io,*z=kypNڳyRVL-"j W5~җ̅5!Zl9jͤH7|wqú! C{PM^4K`n .  }-ktU<-Ȑȼi(+ܬ뼒K&dN%4{'T1i~طd$?W9_hm;Qa2X M@¾EUl/v~uau[tE'Sر+6b[q44s3Sns8,knG9/L+?g4 /›ֲ} jՎጃw7{äƓ(&SY𑥭fn`%s:'%cb 받?R3_v)%:?C@9ݒM5-zDz")jMW~V6uYHF֋4*n bB@vmf-m$8.9[ oFtj]\Z5#jtySW]/;Խ!f]#2<}_#W? O*ujͼ/qPw& ;(KJF$߲QfeMiJ@<.<- SpP(%o*cbʳ-&RN!:0=haقCw]F2\9`ZC#\ %3BZَiiIY^9pw[} MyU{vFP-by˦f*lpSǜ GqDz6Á7{B%[Ff{zP_$c! TϢMML$jlJ\Q(FY陼/̻K ̝gCZI{4\H0/+ 5tGb M LlIj>$Ֆѩ{+G3I z"EQBW\$x M|0mp@]_\Sm\D H˲b3CNO%_"g-yM/Uytл \%!VH*M\Bcx# b" f#~8wJ9%ky:L&a'ew'Kϵ~*<[&|n"'!RGf>m@Lm4Sf7gST,tS D?mCbI$2HeEh!7-}oZi Jg AX[abo1.e0 U5^1wBϖ9/dt^J}Xm)S!t=|̭<ڊHhkc65 ;M*Wnm"x=-GO? 1 dR<.5{ݬ<[Acz}(H=C?I@[ѯRukverqʰ@;ėP`}GdB3%kdϗW+@$t/]$:|屻A>[["th &n6obaCWo0ߣ O73GӔ[pfI&g7$܅WuNt0M}waIuvve0f&xٴNJ]%-2IK*%11RYz~}dVг(z}TQRa4 ~OoFHyImN:M@JW'Ru>})FʵoV(Ek6KeDG>X_,Tb'Zq:Zo4I\ȽϡGu(ǼU4Ңh P%7ڮ"ߋ,AZpdW:7i>ovmu_xG熺T3Il]vB]ٿ2y%0r|R\?"&IyMMRQ,Q@#/~^`ŭ )ۼd7-, K}LF8*&X)EC/ vK2uIIOHLڂ b6|LeY16ֶԣR6tRۯ dWoG/A@5۸B{۝/L26-6 %T*-`+ M yȭV ?Eư"/?tt>2wр}SC\Υ|w[e k#MGEBiώcfz*tyDRҺ;c2)TX"0nWEe$ ~XA:0 c _&ySkЇZFGWQ` cżF:f8{"{ W/彩Jf8@<_Da[`klVVjᗼi cbA"h{n|3R:7o{w`Ei*Ѱ (2EQHIKN@ HS p/e&s)Jܰ(?2iЄR1ž*^.#IL56#/7Ѡ/J?h-qS t*!uu\^PqOzC +TԱ_<FJ" xD4L4m/x؞sWf~ԑT++Q0ǒiVZ7MO0N4}C*6dgXJR~o}R&f<Cm44Aq~J;/ߓJUGRT}]l;E~{XL~ۂF:kF6fpܰS|f- W52 )-T/l1KIٳVApxV *@=bd=`bœ P帬r{G!JA -1yJz̔DXC(.[Wgau"_v@*Sbv.' Ax :z֘3zt4jdG[ etz%=>CH]C2oMaaA%|#sMxH:)#6@4MZSRx05-Wco0iuȊ9N!/7OJg¢֜vJf'mwK]~pps.VLulbJ('q#8UE3wØ۾+!9.})Ur9L';#)CĎ}Vx+}IBh;c+ȫ48q~Me@D?ƾJ؄eZs l _ϦP:P|ߴ9LJޯxa1|Ul΋PQ@v.Q%@l&=U' MVr拽L! S~ hojw$&YHv^-# n\Lk 3c u>aԇ_Ԯ(A?Uay}HuT #Z<@^s@=45D,bTRi_5=| b%RSv[Sk@h`פ^qcp=XP`5/ sTQ^`sc(eCk6I~|v'Cu3KrDʾ_#up1'Xhm{]:F'2!C g\&CV2q:;ۥHgoRp{Ƒ9]=A{I#]lT&]u{ g5fϳ-I9#i!>*y5鉄GK8b uxnqZ.Foy% bOBR,P BZNx 34y"cP,*4fxj hts7k'.>IϐcZ]O-S!j u#C.W4TJ#l9E[3O.%#bś4XMJf’06>2%~Nu9 ]Ić2q ,9 R;Ԛ;S㉱_q Ϸ Ji ej^2 6=I;*'3 KZ %.>*=ZXѣ?(dc`4Fs Ѡ"l;ꞽMV'kت5|貵}F<\vJ9Еxp֑-I0kN>#" <ʖg:얏Ky 𺷅g+4̺d.=S(1~KPӻ#hD=1!|mܻF: v0ѷ>(Ecⱎx4 `em.sx3ߚ?If9qG`q ޔ+HRX;CZl&C7!lqW9ėAK2}op_9\m@cӧ2T@TOse{N}9.eծlUԩ}?EL~nK.N[ IGY10fSqސ^8]3挍ˏ)#G8IFPe+ldk&ȱ%T.UKe~1!N $%U)]V.p(TRy Hi6炵Ќj>?D>tZ+̸wW/ǂHq-U $/RK9$VϚy<jZ]|Uw-)$J fI GwX2~l*DV'^{UY6b>_,^j%\dûM/> %62kgdI>eG NiǠ9_^"{!f`T+{GV혙/ =+XFQW/Uԋ=XD]JI@ UyP2W?msyL}<,V 7$yMXq0P]lŅo㡜@2=j_ L"?8wm}FL97t?;"AxC9@!*<]E`|uj%u%NF&a_pNBE  bUW+Si \ ~Ưњ3^e~y^/t ΏLț?ƤЦս!w>VH9B4&U/|}_=ՊA3!Ni%ͳmP2%eQ%n Wbmq-KBϭW8˲0[pr:eȡ yݙ4_̯2vP r:Vm-+UW{}'FM R_\|4eܢ`u_^/Xf%؏#Pep[=ZyM_͹ KBܥ*$\+q&M7]*mFVmp=,`Pp U-;Frͩ']KAZ} Ig@ׯOFZTd)һhAf$cW7pS~i3ʸIFV }m@r{ԯG64[MED)Zkml}F87㜾F Hmݔ?a#0d7 ?ȩ'|K(Beu7LCY-˜NZHrmw O;S]T"G;3 g6=hW_tsk}"q(aӻ>E,aÆ`Z&(?1OL*v4xD)*eߥ![3t%h2@/jnx &]-] {da Esͷ14 \3U-s/-TWWCv(ë;_ې5D7<1pD\HL6Eucޱ+#&0 6 8S^z'AoC*4:U)XŻ Y7MWi+e*Mx9v 5 Qf*?ʃFٽDd-m¹ 7*Q"KR;Hd'+ ]kzZ3Ž%ʭ%[r~ 6}{׻Jh^Ÿ/ja*z:h%E!=Ig)¬MJX"ߔTDK1|'2+&eOE1sK2;.׷ny){PS*@:%c9ǪWR.!?2ۇ9Nbvrrh125=C1E.4o0t]fef}r紪oFOZf|}\SO)![Ө$_A崔}kFD`ߪ`*p",T#v~Rw(l5ێ4lCi!mšڣd- w'U*bFN۴ճ ω:i% NxἝbM&o@W)*\oS66lU3K{J/ xa{Ohw-L(!Nc&fASpHUMa\x֜FrWs;^~C|eaw'(i殀yrG 5{7:heMaaOQ\CˡbBtlh v`3bp}1A\(dK;1m*0]thX&j(RuhyZѱÔr̙#.Dƫ^.;lo χ0r7fCuk"8I;~mȭJ]B_BB6O[rٝ H_xęJZ.u3DZ,a(ƉANg86_3`wK`RaG\nE fo-`D.oĵ}\mjJM$?t%#}d3z$T<[U&7wT͹=<*6{iZi~$kK* P}@Q&DZgM3쫶2//$|. -Ir/܏1Xpn? 6a#D'V3JPhaТ]mف=0 Z,;H`Aly=Dgx ^_p#4 uBHmΠ:D{v $ 2f[%aHǓbn_wE F̃,o c5|Ƅ}$AGamJѶ?6otnɱ̏1A>QӳEZQf_1w]ȱ" JMkOD% =w(C/xˠNp{c;O:ɡjڂk)5pBD 5T|DgDB&bϷR 0&</[>/*1-9`1چWvXs|> /?n7C8h|+ec.}(Jd9ɷj8X.h9}tQs3O$ {F_@oK(؉v-|тՎ]MGU3RԖp w6lid0!6!l `YS״џ-`RN\:F]ȿ xҼB,CK>3DƮl*g9nB9U}ӁYvh$]eQShpﳙ\>x뜨٧KtGHKl4d+{o6*ƶ'Iɣ†𣏲>>7'xUMrR\sGY!$0pBTa>|l#ɇȻuS"Iɒ@. Sظ71q@8a۱.bσmgOnXr>}Fu dșt;N$wi6g\7}] Ocpuɂʑrojx2e0.{2lƺjA25WȍgTZwl#>ᬊ W45"U# 4\X})HM$dEn t\b7JWKK)Xrk|hڃd>xl B<yM2m961Ql8QlK JBl/'I,Z/ .pŶ8ZlS+݊w ~&3iWrU$ݚZBd%?[v2$'ԕ6s)g!\̈́R;g|G[!;и'8 >q?1YNkը5 ?jZָֽqV ] t 0]䲱[&cRg.eJ6x+rcUqP,l1 u_t(]SJ^ |Y[L1 h3Bon%ͥoYޚic(CmIWWiLVhЖH6OO-I|ę )zZQZDןshbӖ\8UzK+sA#,ˣ ZreqN-ѡCU-& Ğ$el"H56A$pUR 0(g;,P#oMP|yv/n%12eӂ{؁y^)b.BLgP^e߅3RyAhqG,(A d{^y>zmб~V`jRPLk|>gMsʲZNv**3;"sgp{nRw)Q}Y<'B}8g +]w2\t!:[:F j 25N+у'L2Rƙ!x y3~-s9_o>WpQ@J걵J5GG%{¨ °PܦLgI7h]o]-W>_HL. RL>y8sBWsGWUJIlѮ| ۃn7wIӦe^Z F LIWM |R.E4G/mr%z+~cS0GR ^(6q`Hҫ[Ut%3f 78I5/_]Z \rkrj\+ٹe1'w)Xn FWt{ :4۩?)H_i7X9{1d5O+`=L:y'=ۄXE0 8vS$sblag>HbBdp'{kR~3j bCUHkFӒI w"qxEbHT# vrTU3ojG ,<X<hܵpE]{3&٣ L8*| l ZQ!5+]^E=_H~w;ӖiwaH6Ihsa :>U*1?&ODWDGvw|Di|*h4v('/m!LĦk^FC_hr|W 褵> []sW9Nʳ.Div/b-0ԧ$O8NV2gxk\9IM~YG%yoWܸnR|ɜdpE&~{qp`l혯ǢVo\lvB$  UVSJB)Q*  ql ;)C=bG€l̍4"հUFjh"iíɪDGSNkHvKE7񴔁ٜ ȔsOv8kހ?yb&5:khtnA?>nJM7[-1%.A#mlh1d7 Jo7mNĘX/i5PnAae%5=+eׇ2N*!-|'o<ҕdDu=},$FCqquϐ@?=K gt`fA aQT+@t78л*PTO+ Y0gӓʚG '_FC `xj4\ShRXY: On\0 fwI*e|1'^_AUaz7w¼fO9:ᔾJ 58s;D>H*(,꠬|)7,#B& 긎yĖp̨dH=+@Z:1ٱhWa)-h pu2rؔ6Pɂ: Rr@DQܽ^ ,ҕV?ldåuBY Uj]]p_{zu3`Ot 7z į}$k/wgN6:d(؜0wIOP?qib 镊ef,5O ^I(XZYW` f (hY qL-] 0D.7\m0T39;&oZlX27fo%dF羽E.[x_g<BYD$}i%px|L?2 4|^r#WzE"ZhLpRCʖCY0)2C!w]Q+?.}ۨbm"&5tlo`MQ/\.ZbxӁ>suW Ð۸}o9{23fo_%y0:JԜhI;J"+u7]T/TJ [lWMŽBgkΙC cS4; ]DmsB,vG5/ڈAHo$PU20`1dScl!V|TT.j~xIeJ'?.w.0d@-F9`q|Ф+x =?ljx˞3Ӹ7_趼K6Eh'DkXRlH-VY- `nQKlP+l㉯D֋kPI:o]-H{oPTDa(MKn(_Ճ6ˊ< RovL#Ǹ:əS@?'olJ,.RG|>S{'9v $}47KEtTr7/OZemZAbsxr+ 0lb !^IX>nԎyn]V %Ίن4m.]Tbh-H.GS5#הPjc⁉Ϻ{yr$݀YOݸ4ER@[K dVzi1v7(U"c@l%a1sLjLHlvUMgIiN&IɼȳӔ%@{RBS=@bf3QI5Z > bE2X`#Lߴ^:?_ endstream endobj 785 0 obj << /Type /FontDescriptor /FontName /FCIQAN+CMTT10 /Flags 4 /FontBBox [-4 -233 537 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/at/b/backslash/bar/braceleft/braceright/c/colon/comma/d/dollar/e/eight/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/quoteleft/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 784 0 R >> endobj 786 0 obj << /Length1 2295 /Length2 14140 /Length3 0 /Length 15480 /Filter /FlateDecode >> stream xڍPҀ .\!8;Kpw%AKp w>}սKI ljo 102Dxl̬Hj H@'gK{;:@`l'ooqX8yYx<1wZ2v@g$JQ{'Ks 8ИXxxv,MF -8 @4 /3 -=dP:\ (U#%@_rU{3X.v@'89@UZܿ  W KLLm<,f6@#D03ojdicd 6F aeldrftD€,ng*jok 9#u>1K' LYk;{7;_E80Y:m!Afffn6t7`+obp>^3p@K3 +rrxS04vH@1,c0ejogeґSWՉػ8 llvV'7TGcO O / -3(؃'39MX?.(o$bcoAvBvTEZ_4v6m;Tdbm,JΖ4fo55q_* x7_[ 0rr2@b+@hg읐PN_'IqD7IK\C,&? `Cl&?'8S/q)!p?ΠLj\gCO!Ɍ֙ۀ?v$g& _   8ş,<,v,[OoY'G(d'm|R?jbg4[wbpo>L pt'Ͽ . ?n?9?VL '?+9"8Pg{Z{w>Yb^`N!F{l鹪H!dq(Vo `:4;]os*iB*_c79T>ӏVѶ8w:ϞD1H$IcՋ$RxSvb4}nRTU&ԯEGdCw$ |YM39{w<dE_fB) TfqҦP]bKg4-Ng(ؔVO/yqdU'?hw&^S6sդW1wD.W'>=D^k=A1iKIwS{{U?1IJ.'aUͽJsg`$BVw )hjZUK,LO|L;95. _~NF(66_ln0=1"QYchhG.kd&tBMa0 NYY ;G_Tџ UfGhYBCiA{l.4WjSRV[0ۃ4<qCrs-jÈ+zư1k^Tph\UuD^<ޣ)R|t@VÃd#6[zO>=dj$)4ee;<.Ųo.eJЈ&39務')kI뚎K>Fp[+ $!ħv?vӒ%`H. YXwR[IV(yBCwn\ A*`[2yDL-ϗwlU(!qz#M(QZW:07r5T 6-LF#*;VڬVˎ>8mt#U)ⰞZȳ~яJ3B.1<ݨGH sD{:}E'wWo⋁Rv)_v(R ɾuJY>.}N y.x7bZn3̱z3P z;o֕7[T"DH]d~ūs2&w9>i%?gҞľ=`C\?H,rխ~7,`¹&eF"]8UvƝjChw 4dBI`Qy2ʹ|<3+~fMt~uoE: ,\,q@}_ȯ^мo^K8J[VY9*'_%)5ʧ|>k *<Ø3/d;\$|1}m]d7(xe-IO w_[':SFcք4HZy.9 $``m8 ьDÌwc,L+/ɯN oWX~C7c!"hXX/iU ꟡ւSp/M;"a~X T] }?1zSz%Nύ23ϊT)s BmXuiŲr-)m;K,Iޝ.P9ۂF[Κcg&d:zJ1hݶ%۶@–,yъPp}RgWWG@CN+~ywr7/2 !]5IgUs r[7nj㣽y ,sKlU/[%Hf[)oSzWZ  kܻJ_x;w,j'[+[sF֮#mr(V}p_IEX?IKt&x˾PT4m,t!zck6#$ȅ-pS@BXuMƢ{rbJ:6(y9RG(0.hk'w^ԟP3paGw)/~m,E}.Qz|.ʿAsgvrY9~{]i<_,$Km' 4E:wNoaй[>+gRvZbd3hzy!6T ڂ>yuҸ^ì\˦OQ$D2שJaЌdC~73E\O6gfqDa ޵Rԑ-FSA;w^y.0T1̯I|jf=&EY1 y2,LSr5QӴM닊"&`o}Lr/Cʉz QvhW0F_}ʼ̀lFOΡ+M]Hy@/Q ].c"}e.BALLsMMr_)6ԩ8P_ԾZqa٦]]>M&>~eI9 #,'bҚ\FkIIKD@/%˭zRfv+_6^=1Pw~a':ՄMK;#ӢTS$^ְ|+"uZPP.zķ.CfWҮ>5CW)EH[Uf_yq\{ 0hP%œ9\vHeΜ/ޫֺb|rw1nT?>z{]\ "~R2  C{ + D1sh ǀY #N~јq9vܜۦZ4UEYX+XT^(4YЂq$X8y~:|(Љ)٦.?yݠX(\Js5>Ʀt(r;@qA"`J1Z%[IClݎسlKX_u, ^PAmUEA#H`jۚ+ h% dl@-}G/U _=ًX/LѝJ?&pC7y|NPi"(ؘ>4K쿒rr0Aul`eԞDOF?&-]GT\.07l/[}!}(z((I*Cϳ >Ӹ>1,Mמ& C4swnx)$Uj钯HY^'3)C綩kaAƓE¾S Զ+fmY"eWEbJߌ<#/mk2mAD|cqM!>]Y14񾠗)CN,W,lp8SAo!kBp/*Y:VCkU!2(2]m1`2zuw?k&눤:Y5r"&0W *זKa@Al0{j2)/ΕeHXMjsN~DI7ޤ]*D㐷w ZC Bd͹ˏt :'fz |0DxzIRgk>8J m."fs3rwOn ̶fSlґ@x dZA;w{b1f##B\HXix!( 2x؇ʢTp.6#28,)%vmP IHW6XSSG g>UᒡA?@VNiWF'3uoտ]-),Ȉ^~cmt_~*|Ns{@8gҗ!l$J `=^e 5m,DZoOm3'ƤS9(~a>鎡Cb53.\Y#AAG^(bE^|ݙ(ʈBӯh_v~fY>1M9i^Ť#T0S`_i^20|6%~juxSHo>woϹ:>E6:%e@p2a[\Y"o~DuA3Kh\0?_38P40}VFsjj=}ʔs-Z6 qBڭRTI?5/\qP.xd5skqw-q<:w̮"7Ě~zF<'z4=dc T6XyGoSM$=GN30{[]"i^H'9`#~ioȇWSB: ~O/|6=&0|_; FO6C)T z/q(L)迪JF Ǖp''J8aK_%w(nHt8ykK}bc;]} v[NL~槠\x1]:)ɔ\`Evqejoc*l3ز税7t …+Gˉv*w_U:W;{KhxMM֯Y1[#o +ZQ޵n']mЖ>#k0|;9`D{ALQPNSQC=+K4QOX|Y;5's>w@_Oj Ry݄|QT_.c/2{W_xhdz5ӐaMOiJz2Y+ܛm^doT=π7sEU:\o}{^)l2.]FS9ς^]"_]:!:m'77vҜP Cy!Hl+@']AɅw2<տ|w:8.7@e=͐&#I -SAnhzؾEb&1ujyP/Ҧ3i?} $mWGP;y: (\6)R-/7M*m|E]Ue\Z?6 r I{rʯf.{Ԭg2omB]~#&}ffkD~+xwP7^$KO=ƒx?LbXK4l``br}RL`Ӏ',%XyjDP%\OqeiY[%SE I[#ǁۑNdX-Mb ΋m8r$]:S(-2x%0V~Yf!#۲1M>(^l5f:^B ÔHK(]DZF =|łu-6r߲<qdeYdOHk>i:96fR[Z+7o}~ ?>@_hۥL"%Gz`07}# 1[E dEXrvn+չcO"dO/V_ a cumd~WE a,-')҂P!쬛ޡm#*RPĤ.,6D0C~Y,c˥O@,_D3sg7ub0ţYo_uhe Nыb-h< d|bg} E1:ZO{u*!U KG\k~Eaf\USq,$DB@%)~?h3d.C_#>ȫ)i+hO1 JAE4@N#_t{W>EFHGŻxt}AtsowiJ넖qd.ZV&w%OA#=LL >,vIP!?IKzԝmB)L1UEbiW:$d"VPCoaV/ {k;scϙQm]bv_o`,C78mLYy8y4W>"$7GP ܦ d -z ;)h!,vy{1i`Cx"B#5 X9e׸_ܱ aY=OKEbʤ\O9D>QT!j\CB4ťGߩp:.]*Tr|/uF= LQ=vynԘp*F`q \=xN!mRrQfa߆'Ug)ΓQL[h=Zb) n*,§?HtK0z8$a-8mWp;FӴ׮E~z6A!z3Eޏ| Ȓ稸.( jSfj:T/={^E:e^+91Q.LQscVKRRbu-z餌H̘HX 1 ў\s+8[LĴ y }/iF"*Ii+r0Xs,!QxdKLB>9ԒұKƤ¶EʱiBWm>CI\8}|rLŽ޳=r,+LOLv AFgB 敢]ڵ@pL|ڎGUXנyA#Fo?ap!q!Okו:J37*J3oߒ"M~&jF $c x8[Pc:Yt>r-F"rٲDz_R-p< bec}6R|闆Q(~=یLdV}XZMvu?,zsP2IoIea溽"j!Wxt1tƤRO#sCWQT5plkxxi#R!ÏsU.õv@vb#Ŝ}6?| s%5x܂D'Vf(<]Xpi:SٲPs佈(F/AqyRt7&lHO3o8ӫi 4d+6M6439*j~Z*h&.Ic۾Qj㧿X*'x2khcώ4,p80F ䷊vb-?ĐķuD\޿Rq PÞ^EM).ν[36vU`+@e"~5lԂOsMʨK.Ue13$&eZG_D. Pޥhx= i@U`-8|Kkwj5,kLAe4>ӑNGȹK$MmJMMK:A{Vhʫ}Yҹ4hPe}\9qi>KzV aSp 8-Cd$qq%) #_2Y+1' h[fFpWߧn|X%A?z@`O3x E7 6ӭ:K}Ω)L?(u(HI촫:a\9|pd$8=oElVKU[ߔ!qTnñ;/+1-půN~uIMCBeUΏ}JhHymiTB-ämfI[dae-ܽTi[K}nqI*wyuP4AsOKMsMe^pNH;թ[ZqqkTw{:GF$hz-iR!}ŌtژBc5TvxĥQuo0;P _<xg=,YOYc#c'6<%-۰Jϖ/"r!2PDx-^ ?rLJ،dUK|xiU0-H@JzੋZR[x.g?=:c8b"ˇ;z~iְq_?kId}`.51b62,LW+ם5y#Ki=Db#>b6]scs`@ZWF#dR[QEO&<OWKɉ(VoIӵvtaNiw2\̆c=:9T4,E ^Hp1(pS9@;P {౽h~E][#{{m&KyF}0a6*"l_fxG;qƪ6ΰybol'_rzbؐ^AU/yw "%0%\,;pa6Sb ALA}EHb輹BDbj>VF/{6DXAF;hṄܰJVǼq]]!_0&IEVl/Yc.X5ЦBme<ұeHp>zTK]1dzh8=8NS*QK̋{ԙ/I hޜ8m8:V:B6 ian8rbpwK6#hDd5&H U]߫8c ?s][>; ]kyo`ҴYq*]5ĸ:j]Ͳ%``odb;?;Rc,`:"kTWH@UϩݚgU8f_";6M( ISG1XL{Ad/(yUkS(2qZ=?Ќ:'.kɡTT;j(7243hVH_R60>r'?!a.6C Mq/(v3QŢ<%FNQiIKs[k)S>Loh>!r#.CCkspNji9b٦8mwGbj>&uh^oiZ3 2*?+5@ξ"`dD KP`Wlj|MpՐ1:Q{k}$JdgGXTGӕ)68$,rҀ QqKZpܼ׋Rou38 bWJ3!*9MMȰziiţp3ڝ?[e6ĕW:FwKQW;MQ '5P$fq,ՀOeޝ꯲MMVB0ywo4KAFU(KoyEl/|^݂my42ŋc-P891{o+L-;5✟9Jћ&Z5uPeB) ;rQ;0>&6at4k8Ft<3.\G~D?3cI\le-daS\ޭc)`#:Pc'3n ĻciPs_ˮY g67ԉ31um_ 5!a+a߫^ݵ[lBofu6X< cD3xV acuKD!gIP :o ’KGI݄A!eM2zOu5V$--6ؼ3LTPеbC)W3W/b1#dS` 8rIuؘYɯl?seo,cAv<|}ܕzkteJ滏/F`S ł_kEGS#xAtS3\j!6W~yt (y8wx)ͥ>2tlxyΉ+M^B3rO)BQS+$ž& U}^-D>_`Ya6UyOYrA֣zfc1Q*}F5;=<'K0 ^⒭ėPOB=F7* Q mͽ-s*U_7O/{Po?p (FSDF2<A -6_M(فeV[,"-t]CXsz^ohؕB xMڕr}_dPç_8qQt:ڣh"sɬ)3X;"!)(G '&붨;picLG~n&P3G-ڡŮu֝X{%ލu Mgaįr]U mRy'G|k;rų'0 M+n5>F2qCG%PY';ƥV $$X^1?ȁxxun%jQ :.0w=QN#-9e}{ *zdLM+5\UPO`J Y&: О^9ב~SC*{3H?q2 0Bhi endstream endobj 787 0 obj << /Type /FontDescriptor /FontName /FXZJDT+CMTT9 /Flags 4 /FontBBox [-6 -233 542 698] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 74 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/L/M/N/O/P/R/S/T/U/V/W/Y/a/b/c/colon/comma/d/e/f/g/h/hyphen/i/k/l/m/n/o/one/p/parenleft/parenright/period/q/quoteleft/quoteright/r/s/semicolon/slash/t/three/u/underscore/v/w/x/y/z) /FontFile 786 0 R >> endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KQSHLI+CMBX12 /FontDescriptor 765 0 R /FirstChar 11 /LastChar 122 /Widths 763 0 R /ToUnicode 1 0 R >> endobj 61 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CUJHND+CMMI10 /FontDescriptor 767 0 R /FirstChar 58 /LastChar 58 /Widths 759 0 R >> endobj 60 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GPANTX+CMMI12 /FontDescriptor 769 0 R /FirstChar 58 /LastChar 58 /Widths 760 0 R >> endobj 700 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PQILTH+CMMI9 /FontDescriptor 771 0 R /FirstChar 58 /LastChar 58 /Widths 752 0 R >> endobj 8 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OJWFUF+CMR10 /FontDescriptor 773 0 R /FirstChar 11 /LastChar 124 /Widths 762 0 R /ToUnicode 1 0 R >> endobj 699 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PCWVLI+CMR9 /FontDescriptor 775 0 R /FirstChar 12 /LastChar 121 /Widths 753 0 R /ToUnicode 1 0 R >> endobj 366 0 obj << /Type /Font /Subtype /Type1 /BaseFont /NXCISJ+CMSL10 /FontDescriptor 777 0 R /FirstChar 11 /LastChar 122 /Widths 756 0 R /ToUnicode 1 0 R >> endobj 367 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ANDPVG+CMSLTT10 /FontDescriptor 779 0 R /FirstChar 39 /LastChar 122 /Widths 755 0 R /ToUnicode 3 0 R >> endobj 365 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FFYKXD+CMSS10 /FontDescriptor 781 0 R /FirstChar 40 /LastChar 41 /Widths 757 0 R /ToUnicode 1 0 R >> endobj 13 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LLPKBH+CMSY10 /FontDescriptor 783 0 R /FirstChar 13 /LastChar 105 /Widths 761 0 R >> endobj 291 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FCIQAN+CMTT10 /FontDescriptor 785 0 R /FirstChar 33 /LastChar 125 /Widths 758 0 R /ToUnicode 3 0 R >> endobj 609 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FXZJDT+CMTT9 /FontDescriptor 787 0 R /FirstChar 39 /LastChar 122 /Widths 754 0 R /ToUnicode 3 0 R >> endobj 9 0 obj << /Type /Pages /Count 6 /Parent 788 0 R /Kids [5 0 R 11 0 R 57 0 R 90 0 R 289 0 R 293 0 R] >> endobj 299 0 obj << /Type /Pages /Count 6 /Parent 788 0 R /Kids [296 0 R 303 0 R 309 0 R 314 0 R 318 0 R 321 0 R] >> endobj 326 0 obj << /Type /Pages /Count 6 /Parent 788 0 R /Kids [324 0 R 329 0 R 333 0 R 336 0 R 339 0 R 342 0 R] >> endobj 348 0 obj << /Type /Pages /Count 6 /Parent 788 0 R /Kids [346 0 R 350 0 R 354 0 R 358 0 R 361 0 R 369 0 R] >> endobj 377 0 obj << /Type /Pages /Count 6 /Parent 788 0 R /Kids [374 0 R 379 0 R 383 0 R 389 0 R 393 0 R 398 0 R] >> endobj 405 0 obj << /Type /Pages /Count 6 /Parent 788 0 R /Kids [402 0 R 407 0 R 411 0 R 415 0 R 419 0 R 424 0 R] >> endobj 431 0 obj << /Type /Pages /Count 6 /Parent 789 0 R /Kids [428 0 R 433 0 R 437 0 R 442 0 R 447 0 R 453 0 R] >> endobj 461 0 obj << /Type /Pages /Count 6 /Parent 789 0 R /Kids [457 0 R 463 0 R 468 0 R 472 0 R 478 0 R 483 0 R] >> endobj 491 0 obj << /Type /Pages /Count 6 /Parent 789 0 R /Kids [488 0 R 493 0 R 498 0 R 505 0 R 511 0 R 517 0 R] >> endobj 525 0 obj << /Type /Pages /Count 6 /Parent 789 0 R /Kids [521 0 R 527 0 R 533 0 R 540 0 R 546 0 R 552 0 R] >> endobj 561 0 obj << /Type /Pages /Count 6 /Parent 789 0 R /Kids [557 0 R 563 0 R 566 0 R 569 0 R 572 0 R 577 0 R] >> endobj 583 0 obj << /Type /Pages /Count 6 /Parent 789 0 R /Kids [580 0 R 585 0 R 589 0 R 593 0 R 598 0 R 602 0 R] >> endobj 610 0 obj << /Type /Pages /Count 6 /Parent 790 0 R /Kids [607 0 R 612 0 R 616 0 R 620 0 R 624 0 R 628 0 R] >> endobj 635 0 obj << /Type /Pages /Count 6 /Parent 790 0 R /Kids [632 0 R 637 0 R 641 0 R 645 0 R 650 0 R 656 0 R] >> endobj 701 0 obj << /Type /Pages /Count 2 /Parent 790 0 R /Kids [697 0 R 750 0 R] >> endobj 788 0 obj << /Type /Pages /Count 36 /Parent 791 0 R /Kids [9 0 R 299 0 R 326 0 R 348 0 R 377 0 R 405 0 R] >> endobj 789 0 obj << /Type /Pages /Count 36 /Parent 791 0 R /Kids [431 0 R 461 0 R 491 0 R 525 0 R 561 0 R 583 0 R] >> endobj 790 0 obj << /Type /Pages /Count 14 /Parent 791 0 R /Kids [610 0 R 635 0 R 701 0 R] >> endobj 791 0 obj << /Type /Pages /Count 86 /Kids [788 0 R 789 0 R 790 0 R] >> endobj 792 0 obj << /Type /Outlines /First 103 0 R /Last 285 0 R /Count 10 >> endobj 285 0 obj << /Title 286 0 R /A 283 0 R /Parent 792 0 R /Prev 281 0 R >> endobj 281 0 obj << /Title 282 0 R /A 279 0 R /Parent 792 0 R /Prev 269 0 R /Next 285 0 R >> endobj 277 0 obj << /Title 278 0 R /A 275 0 R /Parent 269 0 R /Prev 273 0 R >> endobj 273 0 obj << /Title 274 0 R /A 271 0 R /Parent 269 0 R /Next 277 0 R >> endobj 269 0 obj << /Title 270 0 R /A 267 0 R /Parent 792 0 R /Prev 265 0 R /Next 281 0 R /First 273 0 R /Last 277 0 R /Count -2 >> endobj 265 0 obj << /Title 266 0 R /A 263 0 R /Parent 792 0 R /Prev 261 0 R /Next 269 0 R >> endobj 261 0 obj << /Title 262 0 R /A 259 0 R /Parent 792 0 R /Prev 257 0 R /Next 265 0 R >> endobj 257 0 obj << /Title 258 0 R /A 255 0 R /Parent 792 0 R /Prev 253 0 R /Next 261 0 R >> endobj 253 0 obj << /Title 254 0 R /A 251 0 R /Parent 792 0 R /Prev 167 0 R /Next 257 0 R >> endobj 249 0 obj << /Title 250 0 R /A 247 0 R /Parent 167 0 R /Prev 245 0 R >> endobj 245 0 obj << /Title 246 0 R /A 243 0 R /Parent 167 0 R /Prev 241 0 R /Next 249 0 R >> endobj 241 0 obj << /Title 242 0 R /A 239 0 R /Parent 167 0 R /Prev 237 0 R /Next 245 0 R >> endobj 237 0 obj << /Title 238 0 R /A 235 0 R /Parent 167 0 R /Prev 233 0 R /Next 241 0 R >> endobj 233 0 obj << /Title 234 0 R /A 231 0 R /Parent 167 0 R /Prev 229 0 R /Next 237 0 R >> endobj 229 0 obj << /Title 230 0 R /A 227 0 R /Parent 167 0 R /Prev 219 0 R /Next 233 0 R >> endobj 225 0 obj << /Title 226 0 R /A 224 0 R /Parent 219 0 R /Prev 222 0 R >> endobj 222 0 obj << /Title 223 0 R /A 221 0 R /Parent 219 0 R /Next 225 0 R >> endobj 219 0 obj << /Title 220 0 R /A 217 0 R /Parent 167 0 R /Prev 215 0 R /Next 229 0 R /First 222 0 R /Last 225 0 R /Count -2 >> endobj 215 0 obj << /Title 216 0 R /A 213 0 R /Parent 167 0 R /Prev 193 0 R /Next 219 0 R >> endobj 211 0 obj << /Title 212 0 R /A 210 0 R /Parent 193 0 R /Prev 208 0 R >> endobj 208 0 obj << /Title 209 0 R /A 207 0 R /Parent 193 0 R /Prev 205 0 R /Next 211 0 R >> endobj 205 0 obj << /Title 206 0 R /A 204 0 R /Parent 193 0 R /Prev 202 0 R /Next 208 0 R >> endobj 202 0 obj << /Title 203 0 R /A 201 0 R /Parent 193 0 R /Prev 199 0 R /Next 205 0 R >> endobj 199 0 obj << /Title 200 0 R /A 198 0 R /Parent 193 0 R /Prev 196 0 R /Next 202 0 R >> endobj 196 0 obj << /Title 197 0 R /A 195 0 R /Parent 193 0 R /Next 199 0 R >> endobj 193 0 obj << /Title 194 0 R /A 191 0 R /Parent 167 0 R /Prev 171 0 R /Next 215 0 R /First 196 0 R /Last 211 0 R /Count -6 >> endobj 189 0 obj << /Title 190 0 R /A 188 0 R /Parent 171 0 R /Prev 186 0 R >> endobj 186 0 obj << /Title 187 0 R /A 185 0 R /Parent 171 0 R /Prev 177 0 R /Next 189 0 R >> endobj 183 0 obj << /Title 184 0 R /A 182 0 R /Parent 177 0 R /Prev 180 0 R >> endobj 180 0 obj << /Title 181 0 R /A 179 0 R /Parent 177 0 R /Next 183 0 R >> endobj 177 0 obj << /Title 178 0 R /A 176 0 R /Parent 171 0 R /Prev 174 0 R /Next 186 0 R /First 180 0 R /Last 183 0 R /Count -2 >> endobj 174 0 obj << /Title 175 0 R /A 173 0 R /Parent 171 0 R /Next 177 0 R >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R /Parent 167 0 R /Next 193 0 R /First 174 0 R /Last 189 0 R /Count -4 >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R /Parent 792 0 R /Prev 143 0 R /Next 253 0 R /First 171 0 R /Last 249 0 R /Count -10 >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R /Parent 143 0 R /Prev 159 0 R >> endobj 159 0 obj << /Title 160 0 R /A 157 0 R /Parent 143 0 R /Prev 155 0 R /Next 163 0 R >> endobj 155 0 obj << /Title 156 0 R /A 153 0 R /Parent 143 0 R /Prev 151 0 R /Next 159 0 R >> endobj 151 0 obj << /Title 152 0 R /A 149 0 R /Parent 143 0 R /Prev 147 0 R /Next 155 0 R >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R /Parent 143 0 R /Next 151 0 R >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R /Parent 792 0 R /Prev 103 0 R /Next 167 0 R /First 147 0 R /Last 163 0 R /Count -5 >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R /Parent 103 0 R /Prev 135 0 R >> endobj 135 0 obj << /Title 136 0 R /A 133 0 R /Parent 103 0 R /Prev 131 0 R /Next 139 0 R >> endobj 131 0 obj << /Title 132 0 R /A 129 0 R /Parent 103 0 R /Prev 127 0 R /Next 135 0 R >> endobj 127 0 obj << /Title 128 0 R /A 125 0 R /Parent 103 0 R /Prev 123 0 R /Next 131 0 R >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R /Parent 103 0 R /Prev 119 0 R /Next 127 0 R >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R /Parent 103 0 R /Prev 115 0 R /Next 123 0 R >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R /Parent 103 0 R /Prev 111 0 R /Next 119 0 R >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R /Parent 103 0 R /Prev 107 0 R /Next 115 0 R >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 103 0 R /Next 111 0 R >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R /Parent 792 0 R /Next 143 0 R /First 107 0 R /Last 139 0 R /Count -9 >> endobj 793 0 obj << /Names [(-1) 59 0 R (-2) 92 0 R (1) 62 0 R (10) 70 0 R (11) 71 0 R (12) 72 0 R] /Limits [(-1) (12)] >> endobj 794 0 obj << /Names [(13) 73 0 R (14) 344 0 R (15) 74 0 R (16) 352 0 R (17) 356 0 R (18) 75 0 R] /Limits [(13) (18)] >> endobj 795 0 obj << /Names [(19) 363 0 R (2) 63 0 R (20) 371 0 R (21) 376 0 R (22) 381 0 R (23) 385 0 R] /Limits [(19) (23)] >> endobj 796 0 obj << /Names [(24) 76 0 R (25) 395 0 R (26) 400 0 R (27) 404 0 R (28) 409 0 R (29) 413 0 R] /Limits [(24) (29)] >> endobj 797 0 obj << /Names [(3) 298 0 R (30) 417 0 R (31) 421 0 R (32) 426 0 R (33) 430 0 R (34) 435 0 R] /Limits [(3) (34)] >> endobj 798 0 obj << /Names [(35) 439 0 R (36) 444 0 R (37) 449 0 R (38) 455 0 R (39) 459 0 R (4) 64 0 R] /Limits [(35) (4)] >> endobj 799 0 obj << /Names [(40) 465 0 R (41) 77 0 R (42) 474 0 R (43) 480 0 R (44) 485 0 R (45) 78 0 R] /Limits [(40) (45)] >> endobj 800 0 obj << /Names [(46) 495 0 R (47) 500 0 R (48) 507 0 R (49) 513 0 R (5) 65 0 R (50) 79 0 R] /Limits [(46) (50)] >> endobj 801 0 obj << /Names [(51) 523 0 R (52) 529 0 R (53) 535 0 R (54) 542 0 R (55) 80 0 R (56) 554 0 R] /Limits [(51) (56)] >> endobj 802 0 obj << /Names [(57) 93 0 R (58) 94 0 R (59) 95 0 R (6) 66 0 R (60) 96 0 R (61) 574 0 R] /Limits [(57) (61)] >> endobj 803 0 obj << /Names [(62) 97 0 R (63) 582 0 R (64) 587 0 R (65) 591 0 R (66) 595 0 R (67) 600 0 R] /Limits [(62) (67)] >> endobj 804 0 obj << /Names [(68) 604 0 R (69) 98 0 R (7) 67 0 R (70) 614 0 R (71) 618 0 R (72) 622 0 R] /Limits [(68) (72)] >> endobj 805 0 obj << /Names [(73) 626 0 R (74) 630 0 R (75) 634 0 R (76) 639 0 R (77) 643 0 R (78) 647 0 R] /Limits [(73) (78)] >> endobj 806 0 obj << /Names [(79) 652 0 R (8) 68 0 R (80) 658 0 R (81) 99 0 R (82) 100 0 R (9) 69 0 R] /Limits [(79) (9)] >> endobj 807 0 obj << /Names [(API Index) 284 0 R (Acknowledgements) 260 0 R (Bug Reports) 130 0 R (Building the source) 158 0 R (Commercial Support) 122 0 R (Complex Data Types) 192 0 R] /Limits [(API Index) (Complex Data Types)] >> endobj 808 0 obj << /Names [(Concept Index) 280 0 R (Context-Level Routines) 232 0 R (Contributing) 134 0 R (Copying Information) 268 0 R (Credential Management) 228 0 R (Criticism of GSS) 264 0 R] /Limits [(Concept Index) (Criticism of GSS)] >> endobj 809 0 obj << /Names [(Downloading and Installing) 126 0 R (Error Handling) 218 0 R (Extended GSS API) 252 0 R (Features) 110 0 R (GNU Free Documentation License) 272 0 R (GNU GPL) 276 0 R] /Limits [(Downloading and Installing) (GNU GPL)] >> endobj 810 0 obj << /Names [(GSS-API Overview) 114 0 R (Getting Started) 106 0 R (Header) 146 0 R (Initialization) 150 0 R (Introduction) 102 0 R (Invoking gss) 256 0 R] /Limits [(GSS-API Overview) (Invoking gss)] >> endobj 811 0 obj << /Names [(Miscellaneous Routines) 244 0 R (Name Manipulation) 240 0 R (Object Identifiers) 331 0 R (Optional Parameters) 214 0 R (Out of Memory handling) 162 0 R (Per-Message Routines) 236 0 R] /Limits [(Miscellaneous Routines) (Per-Message Routines)] >> endobj 812 0 obj << /Names [(Planned Features) 138 0 R (Preparation) 142 0 R (SASL GS2 Routines) 248 0 R (Simple Data Types) 170 0 R (Standard GSS API) 166 0 R (Supported Platforms) 118 0 R] /Limits [(Planned Features) (Supported Platforms)] >> endobj 813 0 obj << /Names [(Version Check) 154 0 R (gss_accept_sec_context) 422 0 R (gss_acquire_cred) 364 0 R (gss_add_cred) 372 0 R (gss_add_oid_set_member) 519 0 R (gss_canonicalize_name) 509 0 R] /Limits [(Version Check) (gss_canonicalize_name)] >> endobj 814 0 obj << /Names [(gss_check_version) 559 0 R (gss_compare_name) 501 0 R (gss_context_time) 450 0 R (gss_create_empty_oid_set) 537 0 R (gss_decapsulate_token) 544 0 R (gss_delete_sec_context) 440 0 R] /Limits [(gss_check_version) (gss_delete_sec_context)] >> endobj 815 0 obj << /Names [(gss_display_name) 496 0 R (gss_display_status) 524 0 R (gss_duplicate_name) 515 0 R (gss_encapsulate_token) 543 0 R (gss_export_name) 514 0 R (gss_export_sec_context) 466 0 R] /Limits [(gss_display_name) (gss_export_sec_context)] >> endobj 816 0 obj << /Names [(gss_get_mic) 475 0 R (gss_import_name) 490 0 R (gss_import_sec_context) 470 0 R (gss_indicate_mechs) 530 0 R (gss_init_sec_context) 396 0 R (gss_inquire_context) 451 0 R] /Limits [(gss_get_mic) (gss_inquire_context)] >> endobj 817 0 obj << /Names [(gss_inquire_cred) 386 0 R (gss_inquire_cred_by_mech) 387 0 R (gss_inquire_mech_for_saslname) 549 0 R (gss_inquire_mechs_for_name) 508 0 R (gss_inquire_names_for_mech) 503 0 R (gss_inquire_saslname_for_mech) 550 0 R] /Limits [(gss_inquire_cred) (gss_inquire_saslname_for_mech)] >> endobj 818 0 obj << /Names [(gss_oid_equal) 548 0 R (gss_process_context_token) 445 0 R (gss_release_buffer) 531 0 R (gss_release_cred) 391 0 R (gss_release_name) 502 0 R (gss_release_oid_set) 536 0 R] /Limits [(gss_oid_equal) (gss_release_oid_set)] >> endobj 819 0 obj << /Names [(gss_test_oid_set_member) 538 0 R (gss_unwrap) 486 0 R (gss_userok) 560 0 R (gss_verify_mic) 476 0 R (gss_wrap) 481 0 R (gss_wrap_size_limit) 460 0 R] /Limits [(gss_test_oid_set_member) (gss_wrap_size_limit)] >> endobj 820 0 obj << /Kids [793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R] /Limits [(-1) (4)] >> endobj 821 0 obj << /Kids [799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R] /Limits [(40) (72)] >> endobj 822 0 obj << /Kids [805 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R] /Limits [(73) (Invoking gss)] >> endobj 823 0 obj << /Kids [811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R] /Limits [(Miscellaneous Routines) (gss_inquire_context)] >> endobj 824 0 obj << /Kids [817 0 R 818 0 R 819 0 R] /Limits [(gss_inquire_cred) (gss_wrap_size_limit)] >> endobj 825 0 obj << /Kids [820 0 R 821 0 R 822 0 R 823 0 R 824 0 R] /Limits [(-1) (gss_wrap_size_limit)] >> endobj 826 0 obj << /Dests 825 0 R >> endobj 827 0 obj << /Type /Catalog /Pages 791 0 R /Outlines 792 0 R /Names 826 0 R /PageMode /UseOutlines >> endobj 828 0 obj << /Producer (pdfTeX-1.40.10) /Creator (TeX) /CreationDate (D:20111125005838+01'00') /ModDate (D:20111125005838+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 829 0000000000 65535 f 0000000015 00000 n 0000000681 00000 n 0000001358 00000 n 0000002477 00000 n 0000002373 00000 n 0000001962 00000 n 0000457862 00000 n 0000458447 00000 n 0000459712 00000 n 0000003380 00000 n 0000003273 00000 n 0000002556 00000 n 0000459248 00000 n 0000006490 00000 n 0000006616 00000 n 0000006743 00000 n 0000006869 00000 n 0000006996 00000 n 0000007123 00000 n 0000007250 00000 n 0000007377 00000 n 0000007504 00000 n 0000007631 00000 n 0000007758 00000 n 0000007884 00000 n 0000008011 00000 n 0000008138 00000 n 0000008265 00000 n 0000008392 00000 n 0000008519 00000 n 0000008644 00000 n 0000008771 00000 n 0000008898 00000 n 0000009025 00000 n 0000009152 00000 n 0000009279 00000 n 0000009407 00000 n 0000009534 00000 n 0000009661 00000 n 0000009789 00000 n 0000009917 00000 n 0000010045 00000 n 0000010172 00000 n 0000010299 00000 n 0000010427 00000 n 0000010555 00000 n 0000010683 00000 n 0000010811 00000 n 0000010939 00000 n 0000011067 00000 n 0000011195 00000 n 0000011322 00000 n 0000011449 00000 n 0000011575 00000 n 0000012896 00000 n 0000011752 00000 n 0000006084 00000 n 0000003461 00000 n 0000011701 00000 n 0000458163 00000 n 0000458021 00000 n 0000021218 00000 n 0000024828 00000 n 0000029213 00000 n 0000033100 00000 n 0000035026 00000 n 0000038116 00000 n 0000041386 00000 n 0000044223 00000 n 0000047368 00000 n 0000050534 00000 n 0000053922 00000 n 0000057585 00000 n 0000063042 00000 n 0000069815 00000 n 0000093863 00000 n 0000152038 00000 n 0000165989 00000 n 0000182704 00000 n 0000198879 00000 n 0000013020 00000 n 0000013148 00000 n 0000013276 00000 n 0000013404 00000 n 0000013532 00000 n 0000013660 00000 n 0000013787 00000 n 0000013915 00000 n 0000014094 00000 n 0000012714 00000 n 0000011857 00000 n 0000014043 00000 n 0000202590 00000 n 0000203919 00000 n 0000204603 00000 n 0000208216 00000 n 0000214377 00000 n 0000235769 00000 n 0000276743 00000 n 0000285838 00000 n 0000014199 00000 n 0000021270 00000 n 0000466505 00000 n 0000014249 00000 n 0000014281 00000 n 0000021323 00000 n 0000466426 00000 n 0000014334 00000 n 0000014369 00000 n 0000021380 00000 n 0000466333 00000 n 0000014415 00000 n 0000014443 00000 n 0000021435 00000 n 0000466240 00000 n 0000014497 00000 n 0000014533 00000 n 0000024880 00000 n 0000466147 00000 n 0000014590 00000 n 0000014629 00000 n 0000029265 00000 n 0000466054 00000 n 0000014685 00000 n 0000014723 00000 n 0000029322 00000 n 0000465961 00000 n 0000014787 00000 n 0000014833 00000 n 0000033152 00000 n 0000465868 00000 n 0000014882 00000 n 0000014913 00000 n 0000033209 00000 n 0000465775 00000 n 0000014963 00000 n 0000014995 00000 n 0000035078 00000 n 0000465696 00000 n 0000015049 00000 n 0000015085 00000 n 0000038168 00000 n 0000465564 00000 n 0000015134 00000 n 0000015165 00000 n 0000038221 00000 n 0000465485 00000 n 0000015209 00000 n 0000015235 00000 n 0000038278 00000 n 0000465392 00000 n 0000015287 00000 n 0000015321 00000 n 0000038335 00000 n 0000465299 00000 n 0000015372 00000 n 0000015405 00000 n 0000041438 00000 n 0000465206 00000 n 0000015462 00000 n 0000015501 00000 n 0000041495 00000 n 0000465127 00000 n 0000015561 00000 n 0000015603 00000 n 0000044275 00000 n 0000464994 00000 n 0000015657 00000 n 0000015693 00000 n 0000044328 00000 n 0000464876 00000 n 0000015748 00000 n 0000015785 00000 n 0000464797 00000 n 0000015824 00000 n 0000015857 00000 n 0000464665 00000 n 0000015896 00000 n 0000015939 00000 n 0000464586 00000 n 0000015978 00000 n 0000016015 00000 n 0000464507 00000 n 0000016054 00000 n 0000016091 00000 n 0000464414 00000 n 0000016131 00000 n 0000016169 00000 n 0000464335 00000 n 0000016209 00000 n 0000016251 00000 n 0000047477 00000 n 0000464203 00000 n 0000016307 00000 n 0000016345 00000 n 0000464124 00000 n 0000016385 00000 n 0000016416 00000 n 0000464031 00000 n 0000016456 00000 n 0000016484 00000 n 0000463938 00000 n 0000016524 00000 n 0000016565 00000 n 0000463845 00000 n 0000016605 00000 n 0000016644 00000 n 0000463752 00000 n 0000016684 00000 n 0000016709 00000 n 0000463673 00000 n 0000016749 00000 n 0000016785 00000 n 0000063094 00000 n 0000463580 00000 n 0000016842 00000 n 0000016881 00000 n 0000063151 00000 n 0000463448 00000 n 0000016933 00000 n 0000016967 00000 n 0000463369 00000 n 0000017007 00000 n 0000017043 00000 n 0000463290 00000 n 0000017083 00000 n 0000017134 00000 n 0000069867 00000 n 0000463197 00000 n 0000017193 00000 n 0000017234 00000 n 0000093972 00000 n 0000463104 00000 n 0000017294 00000 n 0000017336 00000 n 0000152146 00000 n 0000463011 00000 n 0000017394 00000 n 0000017434 00000 n 0000166041 00000 n 0000462918 00000 n 0000017489 00000 n 0000017526 00000 n 0000182756 00000 n 0000462825 00000 n 0000017586 00000 n 0000017628 00000 n 0000198988 00000 n 0000462746 00000 n 0000017683 00000 n 0000017720 00000 n 0000202642 00000 n 0000462653 00000 n 0000017774 00000 n 0000017810 00000 n 0000203971 00000 n 0000462560 00000 n 0000017860 00000 n 0000017892 00000 n 0000204655 00000 n 0000462467 00000 n 0000017946 00000 n 0000017982 00000 n 0000208268 00000 n 0000462374 00000 n 0000018036 00000 n 0000018072 00000 n 0000214429 00000 n 0000462242 00000 n 0000018129 00000 n 0000018168 00000 n 0000214482 00000 n 0000462163 00000 n 0000018236 00000 n 0000018286 00000 n 0000235821 00000 n 0000462084 00000 n 0000018331 00000 n 0000018377 00000 n 0000276795 00000 n 0000461991 00000 n 0000018428 00000 n 0000018461 00000 n 0000285891 00000 n 0000461912 00000 n 0000018508 00000 n 0000021051 00000 n 0000021492 00000 n 0000020921 00000 n 0000018537 00000 n 0000459391 00000 n 0000024937 00000 n 0000024718 00000 n 0000021586 00000 n 0000026578 00000 n 0000026413 00000 n 0000025031 00000 n 0000026525 00000 n 0000459822 00000 n 0000028914 00000 n 0000029055 00000 n 0000029379 00000 n 0000028774 00000 n 0000026661 00000 n 0000032375 00000 n 0000032650 00000 n 0000032949 00000 n 0000033266 00000 n 0000032211 00000 n 0000029485 00000 n 0000032513 00000 n 0000032800 00000 n 0000035135 00000 n 0000034914 00000 n 0000033372 00000 n 0000041240 00000 n 0000038392 00000 n 0000038004 00000 n 0000035228 00000 n 0000041551 00000 n 0000041108 00000 n 0000038486 00000 n 0000044385 00000 n 0000044111 00000 n 0000041645 00000 n 0000459939 00000 n 0000047219 00000 n 0000047533 00000 n 0000047087 00000 n 0000044479 00000 n 0000047420 00000 n 0000050586 00000 n 0000050422 00000 n 0000047627 00000 n 0000053974 00000 n 0000053810 00000 n 0000050680 00000 n 0000057637 00000 n 0000057473 00000 n 0000054080 00000 n 0000060077 00000 n 0000059912 00000 n 0000057731 00000 n 0000060024 00000 n 0000063208 00000 n 0000062930 00000 n 0000060160 00000 n 0000460056 00000 n 0000065048 00000 n 0000064883 00000 n 0000063314 00000 n 0000064995 00000 n 0000067487 00000 n 0000067322 00000 n 0000065131 00000 n 0000067434 00000 n 0000069924 00000 n 0000069703 00000 n 0000067570 00000 n 0000074397 00000 n 0000074176 00000 n 0000070018 00000 n 0000074288 00000 n 0000074341 00000 n 0000459088 00000 n 0000458764 00000 n 0000458925 00000 n 0000078521 00000 n 0000078300 00000 n 0000074530 00000 n 0000078412 00000 n 0000078465 00000 n 0000082811 00000 n 0000082646 00000 n 0000078654 00000 n 0000082758 00000 n 0000460173 00000 n 0000086880 00000 n 0000086715 00000 n 0000082907 00000 n 0000086827 00000 n 0000090695 00000 n 0000090416 00000 n 0000086963 00000 n 0000090528 00000 n 0000090581 00000 n 0000090638 00000 n 0000094029 00000 n 0000093751 00000 n 0000090828 00000 n 0000093915 00000 n 0000097917 00000 n 0000097695 00000 n 0000094162 00000 n 0000097807 00000 n 0000097860 00000 n 0000101850 00000 n 0000101685 00000 n 0000098050 00000 n 0000101797 00000 n 0000104230 00000 n 0000104065 00000 n 0000101946 00000 n 0000104177 00000 n 0000460290 00000 n 0000108114 00000 n 0000107949 00000 n 0000104325 00000 n 0000108061 00000 n 0000109868 00000 n 0000109703 00000 n 0000108209 00000 n 0000109815 00000 n 0000112888 00000 n 0000112723 00000 n 0000109963 00000 n 0000112835 00000 n 0000117532 00000 n 0000117311 00000 n 0000112983 00000 n 0000117423 00000 n 0000117476 00000 n 0000120548 00000 n 0000120383 00000 n 0000117665 00000 n 0000120495 00000 n 0000124937 00000 n 0000124772 00000 n 0000120644 00000 n 0000124884 00000 n 0000460407 00000 n 0000127355 00000 n 0000127190 00000 n 0000125020 00000 n 0000127302 00000 n 0000131031 00000 n 0000130809 00000 n 0000127450 00000 n 0000130921 00000 n 0000130974 00000 n 0000135093 00000 n 0000134871 00000 n 0000131176 00000 n 0000134983 00000 n 0000135036 00000 n 0000139182 00000 n 0000138904 00000 n 0000135226 00000 n 0000139016 00000 n 0000139069 00000 n 0000139126 00000 n 0000141430 00000 n 0000141265 00000 n 0000139315 00000 n 0000141377 00000 n 0000145402 00000 n 0000145180 00000 n 0000141538 00000 n 0000145292 00000 n 0000145345 00000 n 0000460524 00000 n 0000149361 00000 n 0000149139 00000 n 0000145547 00000 n 0000149251 00000 n 0000149304 00000 n 0000152202 00000 n 0000151926 00000 n 0000149494 00000 n 0000152090 00000 n 0000155958 00000 n 0000155679 00000 n 0000152335 00000 n 0000155791 00000 n 0000155844 00000 n 0000155901 00000 n 0000159772 00000 n 0000159551 00000 n 0000156091 00000 n 0000159663 00000 n 0000159716 00000 n 0000163268 00000 n 0000163046 00000 n 0000159905 00000 n 0000163158 00000 n 0000163211 00000 n 0000166155 00000 n 0000165877 00000 n 0000163401 00000 n 0000166098 00000 n 0000460641 00000 n 0000169884 00000 n 0000169662 00000 n 0000166288 00000 n 0000169774 00000 n 0000169827 00000 n 0000172910 00000 n 0000172574 00000 n 0000170017 00000 n 0000172686 00000 n 0000172739 00000 n 0000172796 00000 n 0000172853 00000 n 0000176836 00000 n 0000176557 00000 n 0000173043 00000 n 0000176669 00000 n 0000176722 00000 n 0000176779 00000 n 0000180044 00000 n 0000179765 00000 n 0000176969 00000 n 0000179877 00000 n 0000179930 00000 n 0000179987 00000 n 0000182866 00000 n 0000182592 00000 n 0000180177 00000 n 0000182809 00000 n 0000186576 00000 n 0000186354 00000 n 0000182999 00000 n 0000186466 00000 n 0000186519 00000 n 0000460758 00000 n 0000189217 00000 n 0000188938 00000 n 0000186709 00000 n 0000189050 00000 n 0000189103 00000 n 0000189160 00000 n 0000192709 00000 n 0000192374 00000 n 0000189350 00000 n 0000192486 00000 n 0000192539 00000 n 0000192595 00000 n 0000192652 00000 n 0000195837 00000 n 0000195558 00000 n 0000192842 00000 n 0000195670 00000 n 0000195723 00000 n 0000195780 00000 n 0000199159 00000 n 0000198767 00000 n 0000195970 00000 n 0000198931 00000 n 0000199045 00000 n 0000199102 00000 n 0000200459 00000 n 0000200294 00000 n 0000199292 00000 n 0000200406 00000 n 0000202459 00000 n 0000202809 00000 n 0000202327 00000 n 0000200555 00000 n 0000202695 00000 n 0000202752 00000 n 0000460875 00000 n 0000204024 00000 n 0000203807 00000 n 0000202942 00000 n 0000204708 00000 n 0000204491 00000 n 0000204118 00000 n 0000208321 00000 n 0000208104 00000 n 0000204789 00000 n 0000211189 00000 n 0000211024 00000 n 0000208415 00000 n 0000211136 00000 n 0000214232 00000 n 0000214539 00000 n 0000214100 00000 n 0000211272 00000 n 0000217878 00000 n 0000217713 00000 n 0000214658 00000 n 0000217825 00000 n 0000460992 00000 n 0000220970 00000 n 0000220805 00000 n 0000217948 00000 n 0000220917 00000 n 0000223876 00000 n 0000223711 00000 n 0000221040 00000 n 0000223823 00000 n 0000226831 00000 n 0000226666 00000 n 0000223946 00000 n 0000226778 00000 n 0000232456 00000 n 0000229916 00000 n 0000229751 00000 n 0000226901 00000 n 0000229863 00000 n 0000232669 00000 n 0000232324 00000 n 0000229986 00000 n 0000232616 00000 n 0000235622 00000 n 0000235878 00000 n 0000235490 00000 n 0000232752 00000 n 0000459552 00000 n 0000461109 00000 n 0000238972 00000 n 0000238807 00000 n 0000236010 00000 n 0000238919 00000 n 0000242192 00000 n 0000242027 00000 n 0000239053 00000 n 0000242139 00000 n 0000245240 00000 n 0000245075 00000 n 0000242262 00000 n 0000245187 00000 n 0000248366 00000 n 0000248201 00000 n 0000245310 00000 n 0000248313 00000 n 0000251640 00000 n 0000251475 00000 n 0000248436 00000 n 0000251587 00000 n 0000254505 00000 n 0000254340 00000 n 0000251710 00000 n 0000254452 00000 n 0000461226 00000 n 0000257446 00000 n 0000257281 00000 n 0000254575 00000 n 0000257393 00000 n 0000260792 00000 n 0000260627 00000 n 0000257516 00000 n 0000260739 00000 n 0000263890 00000 n 0000263725 00000 n 0000260862 00000 n 0000263837 00000 n 0000266766 00000 n 0000266979 00000 n 0000266634 00000 n 0000263960 00000 n 0000266926 00000 n 0000268681 00000 n 0000268841 00000 n 0000269073 00000 n 0000268541 00000 n 0000267086 00000 n 0000269020 00000 n 0000271940 00000 n 0000272072 00000 n 0000272205 00000 n 0000272337 00000 n 0000272469 00000 n 0000272599 00000 n 0000272729 00000 n 0000272861 00000 n 0000272992 00000 n 0000273124 00000 n 0000273256 00000 n 0000273389 00000 n 0000273521 00000 n 0000273652 00000 n 0000273783 00000 n 0000273915 00000 n 0000274047 00000 n 0000274179 00000 n 0000274312 00000 n 0000274440 00000 n 0000274569 00000 n 0000274697 00000 n 0000274825 00000 n 0000274953 00000 n 0000275080 00000 n 0000275208 00000 n 0000275336 00000 n 0000275464 00000 n 0000275592 00000 n 0000275720 00000 n 0000275848 00000 n 0000275976 00000 n 0000276103 00000 n 0000276231 00000 n 0000276359 00000 n 0000276487 00000 n 0000276615 00000 n 0000276848 00000 n 0000271520 00000 n 0000269182 00000 n 0000458605 00000 n 0000458305 00000 n 0000461343 00000 n 0000279701 00000 n 0000279834 00000 n 0000279966 00000 n 0000280099 00000 n 0000280232 00000 n 0000280364 00000 n 0000280497 00000 n 0000280630 00000 n 0000280761 00000 n 0000280894 00000 n 0000281027 00000 n 0000281159 00000 n 0000281292 00000 n 0000281425 00000 n 0000281557 00000 n 0000281690 00000 n 0000281823 00000 n 0000281955 00000 n 0000282088 00000 n 0000282221 00000 n 0000282353 00000 n 0000282486 00000 n 0000282619 00000 n 0000282751 00000 n 0000282884 00000 n 0000283013 00000 n 0000283142 00000 n 0000283271 00000 n 0000283400 00000 n 0000283529 00000 n 0000283658 00000 n 0000283787 00000 n 0000283915 00000 n 0000284043 00000 n 0000284171 00000 n 0000284299 00000 n 0000284426 00000 n 0000284554 00000 n 0000284682 00000 n 0000284810 00000 n 0000284935 00000 n 0000285064 00000 n 0000285193 00000 n 0000285322 00000 n 0000285451 00000 n 0000285580 00000 n 0000285709 00000 n 0000285944 00000 n 0000279201 00000 n 0000276966 00000 n 0000286062 00000 n 0000286087 00000 n 0000286734 00000 n 0000287089 00000 n 0000287444 00000 n 0000288069 00000 n 0000288100 00000 n 0000288491 00000 n 0000288516 00000 n 0000288539 00000 n 0000289077 00000 n 0000289709 00000 n 0000290356 00000 n 0000308951 00000 n 0000309342 00000 n 0000316313 00000 n 0000316540 00000 n 0000323512 00000 n 0000323739 00000 n 0000330707 00000 n 0000330933 00000 n 0000356356 00000 n 0000356914 00000 n 0000376124 00000 n 0000376492 00000 n 0000391323 00000 n 0000391636 00000 n 0000403417 00000 n 0000403724 00000 n 0000410859 00000 n 0000411097 00000 n 0000418685 00000 n 0000418956 00000 n 0000441261 00000 n 0000441849 00000 n 0000457450 00000 n 0000461428 00000 n 0000461544 00000 n 0000461662 00000 n 0000461756 00000 n 0000461834 00000 n 0000466623 00000 n 0000466746 00000 n 0000466873 00000 n 0000467001 00000 n 0000467130 00000 n 0000467258 00000 n 0000467385 00000 n 0000467513 00000 n 0000467640 00000 n 0000467769 00000 n 0000467893 00000 n 0000468022 00000 n 0000468149 00000 n 0000468279 00000 n 0000468403 00000 n 0000468635 00000 n 0000468881 00000 n 0000469129 00000 n 0000469346 00000 n 0000469620 00000 n 0000469865 00000 n 0000470119 00000 n 0000470388 00000 n 0000470650 00000 n 0000470899 00000 n 0000471208 00000 n 0000471461 00000 n 0000471701 00000 n 0000471799 00000 n 0000471898 00000 n 0000472007 00000 n 0000472143 00000 n 0000472249 00000 n 0000472357 00000 n 0000472395 00000 n 0000472504 00000 n trailer << /Size 829 /Root 827 0 R /Info 828 0 R /ID [<234E215FFAECCB78DE1645C279A5ACB7> <234E215FFAECCB78DE1645C279A5ACB7>] >> startxref 472771 %%EOF gss-1.0.2/doc/texinfo.css0000644000000000000000000000134611361023201012121 00000000000000body { margin: 2%; padding: 0 5%; background: #ffffff; } h1,h2,h3,h4,h5 { font-weight: bold; padding: 5px 5px 5px 5px; background-color: #c2e0ff; color: #336699; } h1 { padding: 2em 2em 2em 5%; color: white; background: #336699; text-align: center; letter-spacing: 3px; } h2 { text-decoration: underline; } pre { margin: 0 5%; padding: 0.5em; } pre.example { border: solid 1px; background: #eeeeff; padding-bottom: 1em; } pre.verbatim { border: solid 1px gray; background: white; padding-bottom: 1em; } div.node { margin: 0 -5% 0 -2%; padding: 0.5em 0.5em; margin-top: 0.5em; margin-bottom: 0.5em; font-weight: bold; } dd, li { padding-top: 0.1em; padding-bottom: 0.1em; } gss-1.0.2/doc/asciidoc0000755000000000000000000037457411546676326011512 00000000000000#!/usr/bin/env python ''' asciidoc - converts an AsciiDoc text file to DocBook, HTML or LinuxDoc SYNOPSIS asciidoc -b backend [ -d doctype ] [ -g glossary-entry ] [ -e ] [-n] [ -s ] [ -f configfile ] [ -o outfile ] [ --help | -h ] [ --version ] [ -v ] [ -c ] infile DESCRIPTION The asciidoc(1) command translates the AsciiDoc text file 'infile' to the 'backend' formatted file 'outfile'. If 'infile' is '-' then the standard input is used. OPTIONS --help, -h Print this documentation. -b Backend output file format: 'docbook', 'linuxdoc', 'html', 'css' or 'css-embedded'. -c Dump configuration to stdout. -d Document type: 'article', 'manpage' or 'book'. The 'book' document type is only supported by the 'docbook' backend and the 'manpage' document type is not supported by the 'linuxdoc' backend. -e Exclude implicitly loaded configuration files except for those named like the input file ('infile.conf' and 'infile-backend.conf'). -f Use configuration file 'configfile'. -g Define glossary entry where 'glossary-entry' is formatted like 'name=value'. Alternate acceptable forms are 'name' (the 'value' defaults to an empty string) and '^name' (undefine the 'name' glossary entry). Use the '-g section-numbers' command-line option to auto-number HTML article section titles. -n Synonym for '-g section-numbers'. -o Write output to file 'outfile'. Defaults to the base name of input file with 'backend' extension. If the input is stdin then the outfile defaults to stdout. If 'outfile' is '-' then the standard output is used. -s Suppress document header and footer output. -v Verbosely print processing information to stderr. --version Print program version number. BUGS - Keyboard EOF (Ctrl+D) ignored when reading source from console. - Reported line numbers in diagnostic messages are sometimes wrong. - Diagnostic messages are often not that illuminating. - Block filters only work in a UNIX environment. - Embedding open brace characters { in argument values can cause incorrect argument substitution. - Section numbering is incorrect when outputting HTML against a book type document with level 0 sections titles. This is not a biggy since multi-part books are generally processed to DocBook. AUTHOR Written by Stuart Rackham, RESOURCES SourceForge: http://sourceforge.net/projects/asciidoc/ Main website: http://www.methods.co.nz/asciidoc/ COPYING Copyright (C) 2002,2004 Stuart Rackham. Free use of this software is granted under the terms of the GNU General Public License (GPL). ''' import sys, os, re, string, time, traceback, tempfile, popen2 from types import * VERSION = '5.0.5' # See CHANGLOG file for version history. #--------------------------------------------------------------------------- # Utility functions and classes. #--------------------------------------------------------------------------- # Allowed substitution options for subs List options and presubs and postsubs # Paragraph options. SUBS_OPTIONS = ('specialcharacters','quotes','specialwords','replacements', 'glossary','macros','none','default') # Default value for unspecified subs and presubs configuration file entries. SUBS_DEFAULT = ('specialcharacters','quotes','specialwords','replacements', 'glossary','macros') class EAsciiDoc(Exception): pass class staticmethod: '''Python 2.1 and earlier does not have the builtin staticmethod() function.''' def __init__(self,anycallable): self.__call__ = anycallable from UserDict import UserDict class OrderedDict(UserDict): '''Python Cookbook: Ordered Dictionary, Submitter: David Benjamin''' def __init__(self, dict = None): self._keys = [] UserDict.__init__(self, dict) def __delitem__(self, key): UserDict.__delitem__(self, key) self._keys.remove(key) def __setitem__(self, key, item): UserDict.__setitem__(self, key, item) if key not in self._keys: self._keys.append(key) def clear(self): UserDict.clear(self) self._keys = [] def copy(self): dict = UserDict.copy(self) dict._keys = self._keys[:] return dict def items(self): # zip() not available in Python 1.5.2 #return zip(self._keys, self.values()) result = [] for k in self._keys: result.append((k,UserDict.__getitem__(self,k))) return result def keys(self): return self._keys def popitem(self): try: key = self._keys[-1] except IndexError: raise KeyError('dictionary is empty') val = self[key] del self[key] return (key, val) def setdefault(self, key, failobj = None): UserDict.setdefault(self, key, failobj) if key not in self._keys: self._keys.append(key) def update(self, dict): UserDict.update(self, dict) for key in dict.keys(): if key not in self._keys: self._keys.append(key) def values(self): return map(self.get, self._keys) def print_stderr(line): sys.stderr.write(line+os.linesep) def verbose(msg,linenos=1): '''-v option messages.''' if config.verbose: console(msg,linenos=linenos) def warning(msg,linenos=1): console(msg,'WARNING: ',linenos) def console(msg, prefix='',linenos=1): '''Print warning message to stdout. 'offset' is added to reported line number for warnings emitted when reading ahead.''' s = prefix if linenos and reader.cursor: s = s + "%s: line %d: " \ % (os.path.basename(reader.cursor[0]),reader.cursor[1]) s = s + msg print_stderr(s) def realpath(fname): '''Return the absolute pathname of the file fname. Follow symbolic links. os.realpath() not available in Python prior to 2.2 and not portable.''' # Follow symlinks to the actual executable. wd = os.getcwd() try: while os.path.islink(fname): linkdir = os.path.dirname(fname) fname = os.readlink(fname) if linkdir: os.chdir(linkdir) # Symlinks can be relative. fname = os.path.abspath(fname) finally: os.chdir(wd) return fname def assign(dst,src): '''Assign all attributes from 'src' object to 'dst' object.''' for a,v in src.__dict__.items(): setattr(dst,a,v) def strip_quotes(s): '''Trim white space and, if necessary, quote characters from s.''' s = string.strip(s) # Strip quotation mark characters from quoted strings. if len(s) >= 3 and s[0] == '"' and s[-1] == '"': s = s[1:-1] return s def is_regexp(s): '''Return 1 if s is a valid regular expression else return 0.''' try: re.compile(s) except: return 0 else: return 1 def join_regexp(relist): '''Join list of regular expressions re1,re2,... to single regular expression (re1)|(re2)|...''' if len(relist) == 0: return '' result = [] # Delete named groups to avoid ambiguity. for s in relist: result.append(re.sub(r'\?P<\S+?>','',s)) result = string.join(result,')|(') result = '('+result+')' return result def validate(value,rule,errmsg): '''Validate value against rule expression. Throw EAsciiDoc exception with errmsg if validation fails.''' try: if not eval(string.replace(rule,'$',str(value))): raise EAsciiDoc,errmsg except: raise EAsciiDoc,errmsg return value def join_lines(lines): '''Return a list in which lines terminated with the backslash line continuation character are joined.''' result = [] s = '' continuation = 0 for line in lines: if line and line[-1] == '\\': s = s + line[:-1] continuation = 1 continue if continuation: result.append(s+line) s = '' continuation = 0 else: result.append(line) if continuation: result.append(s) return result def parse_args(args,dict,default_arg=None): '''Update a dictionary with name/value arguments from the args string. The args string is a comma separated list of values and keyword name=value pairs. Values must preceed keywords and are named '1','2'... The entire args list is named '0'. If keywords are specified string values must be quoted. Examples: args: '' dict: {} args: 'hello,world' dict: {'2': 'world', '0': 'hello,world', '1': 'hello'} args: 'hello,,world' default_arg: 'caption' dict: {'3': 'world', 'caption': 'hello', '0': 'hello,,world', '1': 'hello'} args: '"hello",planet="earth"' dict: {'planet': 'earth', '0': '"hello",planet="earth"', '1': 'hello'} ''' def f(*args,**keywords): # Name and add aguments '1','2'... to keywords. for i in range(len(args)): if not keywords.has_key(str(i+1)): keywords[str(i+1)] = args[i] return keywords if not args: return dict['0'] = args s = args try: d = eval('f('+s+')') dict.update(d) except: # Try quoting the args. s = string.replace(s,'"',r'\"') # Escape double-quotes. s = string.split(s,',') s = map(lambda x: '"'+string.strip(x)+'"',s) s = string.join(s,',') try: d = eval('f('+s+')') except: return # If there's a syntax error leave with {0}=args. for k in d.keys(): # Drop any arguments that were missing. if d[k] == '': del d[k] dict.update(d) assert len(d) > 0 if default_arg is not None and not d.has_key(default_arg) \ and d.has_key('1'): dict[default_arg] = dict['1'] def parse_list(s): '''Parse comma separated string of Python literals. Return a tuple of of parsed values.''' try: result = eval('tuple(['+s+'])') except: raise EAsciiDoc,'malformed list: '+s return result def parse_options(options,allowed,errmsg): '''Parse comma separated string of unquoted option names and return as a tuple of valid options. 'allowed' is a list of allowed option values. 'errmsg' isan error message prefix if an illegal option error is thrown.''' result = [] if options: for s in string.split(options,','): s = string.strip(s) if s not in allowed: raise EAsciiDoc,'%s "%s"' % (errmsg,s) result.append(s) return tuple(result) def is_name(s): '''Return 1 if s is valid glossary, macro or tag name.''' mo = re.match(r'\w[-\w]*',s) if mo is not None and s[-1] != '-': return 1 else: return 0 def subs_quotes(text): '''Quoted text is marked up and the resulting text is returned.''' quotes = config.quotes.keys() # The quotes are iterated in reverse sort order to avoid ambiguity, # for example, '' is processed before '. quotes.sort() quotes.reverse() for quote in quotes: i = string.find(quote,'|') if i != -1 and quote != '|' and quote != '||': lq = quote[:i] rq = quote[i+1:] else: lq = rq = quote reo = re.compile(r'(^|\W)(?:' + re.escape(lq) \ + r')(.*?[^\\])(?:'+re.escape(rq)+r')(?=\W|$)') pos = 0 while 1: mo = reo.search(text,pos) if not mo: break if text[mo.start()] == '\\': pos = mo.end() else: stag,etag = config.tag(config.quotes[quote]) if stag == etag == None: s = '' else: s = mo.group(1) + stag + mo.group(2) + etag text = text[:mo.start()] + s + text[mo.end():] pos = mo.start() + len(s) text = string.replace(text,'\\'+lq, lq) # Unescape escaped quotes. return text def subs_tag(tag,dict={}): '''Perform glossary substitution and split tag string returning start, end tag tuple (c.f. Config.tag()).''' s = subs_glossary((tag,),dict)[0] result = string.split(s,'|') if len(result) == 1: return result+[None] elif len(result) == 2: return result else: raise EAsciiDoc,'malformed tag "%s"' % (tag,) def parse_entry(entry,dict=None,unquote=0): '''Parse name=value entry to dictionary 'dict'. Return tuple (name,value) or None if illegal entry. If value is omitted (name=) then it is set to ''. If only the name is present the value is set to None). Leading and trailing white space is striped from 'name' and 'value'. If 'unquote' is True leading and trailing double-quotes are stripped from 'name' and 'value'. 'name' can contain any printable characters. If 'name includes the equals '=' character it must be escaped with a backslash.''' mo=re.search(r'[^\\](=)',entry) if mo: # name=value entry. name = entry[:mo.start(1)] value = entry[mo.end(1):] else: # name entry. name = entry value = None if unquote: name = strip_quotes(name) if value is not None: value = strip_quotes(value) else: name = string.strip(name) if value is not None: value = string.strip(value) if not name: return None if dict is not None: dict[name] = value return name,value def parse_entries(entries,dict,unquote=0): '''Parse name=value entries from from lines of text in 'entries' into dictionary 'dict'. Blank lines are skipped.''' for entry in entries: if entry and not parse_entry(entry,dict,unquote): raise EAsciiDoc,'malformed section entry "%s"' % (entry,) def undefine_entries(entries): '''All dictionary entries with None values are deleted.''' for k,v in entries.items(): if v is None: del entries[k] def dump_section(name,dict,f=sys.stdout): '''Write parameters in 'dict' as in configuration file section format with section 'name'.''' f.write('[%s]%s' % (name,writer.newline)) for k,v in dict.items(): k = str(k) # Quote if necessary. if len(k) != len(string.strip(k)): k = '"'+k+'"' if v and len(v) != len(string.strip(v)): v = '"'+v+'"' if v is None: # Don't dump undefined entries. continue else: s = k+'='+v f.write('%s%s' % (s,writer.newline)) f.write(writer.newline) def update_glossary(glossary,dict): '''Update 'glossary' dictionary with entries from parsed glossary section dictionary 'dict'.''' for k,v in dict.items(): if not is_name(k): raise EAsciiDoc,'illegal "%s" glossary entry name' % (k,) glossary[k] = v def readlines(fname): '''Read lines from file named 'fname' and strip trailing white space.''' # Read include file. f = open(fname) try: lines = f.readlines() finally: f.close() # Strip newlines. for i in range(len(lines)): lines[i] = string.rstrip(lines[i]) return lines def filter_lines(filter,lines,dict={}): '''Run 'lines' through the 'filter' shell command and return the result. The 'dict' dictionary contains additional filter glossary entry parameters.''' if not filter: return lines if os.name != 'posix': warning('filters do not work in a non-posix environment') return lines # Perform glossary substitution on the filter command. f = subs_glossary((filter,),dict) if not f: raise EAsciiDoc,'filter "%s" has undefined parameter' % (filter,) filter = f[0] # Check in the 'filters' directory in both the asciidoc user and application # directories for the filter command. cmd = string.split(filter)[0] found = 0 if not os.path.dirname(cmd): if USER_DIR: cmd2 = os.path.join(USER_DIR,'filters',cmd) if os.path.isfile(cmd2): found = 1 if not found: cmd2 = os.path.join(APP_DIR,'filters',cmd) if os.path.isfile(cmd2): found = 1 if found: filter = string.split(filter) filter[0] = cmd2 filter = string.join(filter) verbose('filtering: '+filter, linenos=0) try: import select result = [] r,w = popen2.popen2(filter) # Polled I/O loop to alleviate full buffer deadlocks. i = 0 while i < len(lines): line = lines[i] if select.select([],[w.fileno()],[],0)[1]: w.write(line+os.linesep) # Use platform line terminator. i = i+1 if select.select([r.fileno()],[],[],0)[0]: s = r.readline() if not s: break # Exit if filter output closes. result.append(string.rstrip(s)) w.close() for s in r.readlines(): result.append(string.rstrip(s)) r.close() except: raise EAsciiDoc,'filter "%s" error' % (filter,) # There's no easy way to guage whether popen2() found and executed the # filter, so guess that if it produced no output there is probably a # problem. if lines and not result: warning('no output from filter "%s"' % (filter,)) return result def glossary_action(action, expr): '''Return the result of a glossary {action:expr} reference.''' verbose('evaluating: '+expr) if action == 'eval': result = None try: result = eval(expr) if result is not None: result = str(result) except: warning('{%s} "%s" expression evaluation error' % (action,expr)) elif action in ('sys','sys2'): result = '' tmp = tempfile.mktemp() try: cmd = expr cmd = cmd + (' > %s' % tmp) if action == 'sys2': cmd = cmd + ' 2>&1' if os.system(cmd): warning('{%s} "%s" command non-zero exit status' % (action,expr)) try: if os.path.isfile(tmp): lines = readlines(tmp) else: lines = [] except: raise EAsciiDoc,'{%s} temp file read error' % (action,) result = string.join(lines, writer.newline) finally: if os.path.isfile(tmp): os.remove(tmp) else: warning('Illegal {%s:} glossary action' % (action,)) return result def subs_glossary(lines,dict={}): '''Substitute 'lines' of text with glossary entries from the global document.glossary dictionary and from the 'dict' dictionary ('dict' entries take precedence). Return a tuple of the substituted lines. 'lines' containing non-matching substitution parameters are deleted. None glossary values are not substituted but '' glossary values are.''' def end_brace(text,start): '''Return index following end brace that matches brace at start in text.''' assert text[start] == '{' n = 0 result = start for c in text[start:]: # Skip braces that are followed by a backslash. if result == len(text)-1 or text[result+1] != '\\': if c == '{': n = n + 1 elif c == '}': n = n - 1 result = result + 1 if n == 0: break return result lines = list(lines) # Merge glossary and macro arguments (macro args take precedence). gloss = document.glossary.copy() gloss.update(dict) # Substitute all occurences of all dictionary parameters in all lines. for i in range(len(lines)-1,-1,-1): # Reverse iterate lines. text = lines[i] # Make it easier for regular expressions. text = string.replace(text,'\\{','{\\') text = string.replace(text,'\\}','}\\') # Expand literal glossary references of form {name}. # Nested glossary entries not allowed. reo = re.compile(r'\{(?P[^\\\W][-\w]*?)\}(?!\\)', re.DOTALL) pos = 0 while 1: mo = reo.search(text,pos) if not mo: break s = gloss.get(mo.group('name')) if s is None: pos = mo.end() else: s = str(s) text = text[:mo.start()] + s + text[mo.end():] pos = mo.start() + len(s) # Expand conditional glossary references of form {name=value}, # {name?value}, {name!value} and {name#value}. reo = re.compile(r'\{(?P[^\\\W][-\w]*?)(?P\=|\?|!|#|%)' \ r'(?P.*?)\}(?!\\)',re.DOTALL) pos = 0 while 1: mo = reo.search(text,pos) if not mo: break name = mo.group('name') lval = gloss.get(name) op = mo.group('op') # mo.end() is not good enough because '{x={y}}' matches '{x={y}'. end = end_brace(text,mo.start()) rval = text[mo.start('value'):end-1] if lval is None: # name glossary entry is undefined. if op == '=': s = rval elif op == '?': s = '' elif op == '!': s = rval elif op == '#': s = '{'+name+'}' # So the line is deleted. elif op == '%': s = rval else: assert 1,'illegal glossary operator' else: # name glossary entry is defined. if op == '=': s = lval elif op == '?': s = rval elif op == '!': s = '' elif op == '#': s = rval elif op == '%': s = '{zzzzz}' # So the line is deleted. else: assert 1,'illegal glossary operator' s = str(s) text = text[:mo.start()] + s + text[end:] pos = mo.start() + len(s) # Drop line if it contains unsubstituted {name} references. skipped = re.search(r'\{[^\\\W][-\w]*?\}(?!\\)', text, re.DOTALL) if skipped: del lines[i] continue; # Expand calculated glossary references of form {name:expression}. reo = re.compile(r'\{(?P[^\\\W][-\w]*?):(?P.*?)\}(?!\\)', re.DOTALL) skipped = 0 pos = 0 while 1: mo = reo.search(text,pos) if not mo: break expr = mo.group('expr') expr = string.replace(expr,'{\\','{') expr = string.replace(expr,'}\\','}') s = glossary_action(mo.group('action'),expr) if s is None: skipped = 1 break text = text[:mo.start()] + s + text[mo.end():] pos = mo.start() + len(s) # Drop line if the action returns None. if skipped: del lines[i] continue; # Remove backslash from escaped entries. text = string.replace(text,'{\\','{') text = string.replace(text,'}\\','}') lines[i] = text return tuple(lines) class Lex: '''Lexical analysis routines. Static methods and attributes only.''' prev_element = None prev_cursor = None def __init__(self): raise AssertionError,'no class instances allowed' def next(): '''Returns class of next element on the input (None if EOF). The reader is assumed to be at the first line following a previous element, end of file or line one. Exits with the reader pointing to the first line of the next element or EOF (leading blank lines are skipped).''' reader.skip_blank_lines() if reader.eof(): return None # Optimization: If we've already checked for an element at this # position return the element. if Lex.prev_element and Lex.prev_cursor == reader.cursor: return Lex.prev_element result = None # Check for BlockTitle. if not result and BlockTitle.isnext(): result = BlockTitle # Check for Title. if not result and Title.isnext(): result = Title # Check for SectionClose. # Dont' process -- there is no good reason for explicit section closure. #if not result and SectionClose.isnext(): # result = SectionClose # Check for Block Macro. if not result and macros.isnext(): result = macros.current # Check for List. if not result and lists.isnext(): result = lists.current # Check for DelimitedBlock. if not result and blocks.isnext(): # Skip comment blocks. if 'skip' in blocks.current.options: blocks.current.translate() return Lex.next() else: result = blocks.current # Check for Table. if not result and tables.isnext(): result = tables.current # If it's none of the above then it must be an Paragraph. if not result: if not paragraphs.isnext(): raise EAsciiDoc,'paragraph expected' result = paragraphs.current # Cache answer. Lex.prev_cursor = reader.cursor Lex.prev_element = result return result next = staticmethod(next) def title_parse(lines): '''Check for valid title at start of tuple lines. Return (title,level) tuple or None if invalid title.''' if len(lines) < 2: return None title,ul = lines[:2] # Title can't be blank. if len(title) == 0: return None if len(ul) < 2: return None # Fast check. if ul[:2] not in Title.underlines: return None # Length of underline must be within +-3 of title. if not (len(ul)-3 < len(title) < len(ul)+3): return None # Underline must be have valid repetition of underline character pairs. s = ul[:2]*((len(ul)+1)/2) if ul != s[:len(ul)]: return None return title,list(Title.underlines).index(ul[:2]) title_parse = staticmethod(title_parse) def subs_1(s,options): '''Perform substitution specified in 'options' (in 'options' order) on a single line 's' of text. Returns the substituted string.''' if not s: return s result = s for o in options: if o == 'specialcharacters': result = config.subs_specialchars(result) # Quoted text. elif o == 'quotes': result = subs_quotes(result) # Special words. elif o == 'specialwords': result = config.subs_specialwords(result) # Replacements. elif o == 'replacements': result = config.subs_replacements(result) # Inline macros. elif o == 'macros': result = macros.subs(result) else: raise EAsciiDoc,'illegal "%s" substitution option' % (o,) return result subs_1 = staticmethod(subs_1) def subs(lines,options): '''Perform inline processing specified by 'options' (in 'options' order) on sequence of 'lines'.''' if len(options) == 1: if options[0] == 'none': options = () elif options[0] == 'default': options = SUBS_DEFAULT if not lines or not options: return lines for o in options: if o == 'glossary': lines = subs_glossary(lines) else: tmp = [] for s in lines: s = Lex.subs_1(s,(o,)) tmp.append(s) lines = tmp return lines subs = staticmethod(subs) def set_margin(lines, margin=0): '''Utility routine that sets the left margin to 'margin' space in a block of non-blank lines.''' # Calculate width of block margin. lines = list(lines) width = len(lines[0]) for s in lines: i = re.search(r'\S',s).start() if i < width: width = i # Strip margin width from all lines. for i in range(len(lines)): lines[i] = ' '*margin + lines[i][width:] return lines set_margin = staticmethod(set_margin) #--------------------------------------------------------------------------- # Document element classes parse AsciiDoc reader input and write DocBook writer # output. #--------------------------------------------------------------------------- class Document: def __init__(self): self.doctype = None # 'article','manpage' or 'book'. self.backend = None # -b option argument. self.glossary = {} # Combined glossary entries. self.level = 0 # 0 => front matter. 1,2,3 => sect1,2,3. def init_glossary(self): # Set derived glossary enties. d = time.localtime(time.time()) self.glossary['localdate'] = time.strftime('%d-%b-%Y',d) s = time.strftime('%H:%M:%S',d) if time.daylight: self.glossary['localtime'] = s + ' ' + time.tzname[1] else: self.glossary['localtime'] = s + ' ' + time.tzname[0] self.glossary['asciidoc-version'] = VERSION self.glossary['backend'] = document.backend self.glossary['doctype'] = document.doctype self.glossary['backend-'+document.backend] = '' self.glossary['doctype-'+document.doctype] = '' self.glossary[document.backend+'-'+document.doctype] = '' self.glossary['asciidoc-dir'] = APP_DIR self.glossary['user-dir'] = USER_DIR if reader.fname: self.glossary['infile'] = reader.fname if writer.fname: self.glossary['outfile'] = writer.fname s = os.path.splitext(writer.fname)[1][1:] # Output file extension. self.glossary['filetype'] = s self.glossary['filetype-'+s] = '' # Update with conf file entries. self.glossary.update(config.conf_gloss) # Update with command-line entries. self.glossary.update(config.cmd_gloss) # Set configuration glossary entries. config.load_miscellaneous(config.conf_gloss) config.load_miscellaneous(config.cmd_gloss) self.glossary['newline'] = config.newline # Use raw (unescaped) value. def translate(self): assert self.doctype in ('article','manpage','book'), \ 'illegal document type' assert self.level == 0 # Process document header. has_header = Lex.next() is Title and Title.level == 0 if self.doctype == 'manpage' and not has_header: raise EAsciiDoc,'manpage document title is mandatory' if has_header: Header.parse() if not config.suppress_headers: hdr = config.subs_section('header',{}) writer.write(hdr) if self.doctype in ('article','book'): # Translate 'preamble' (untitled elements between header # and first section title). if Lex.next() is not Title: if self.doctype == 'book': warning('Preamble not allowed in docbook books') stag,etag = config.section2tags('preamble') writer.write(stag) Section.translate_body() writer.write(etag) else: # Translate manpage SYNOPSIS. if Lex.next() is not Title: raise EAsciiDoc,'second section must be SYNOPSIS' Title.parse() if string.upper(Title.title) <> 'SYNOPSIS': raise EAsciiDoc,'second section must be SYNOPSIS' if Title.level != 1: raise EAsciiDoc,'SYNOPSIS section title must be level 1' stag,etag = config.section2tags('sect-synopsis') writer.write(stag) Section.translate_body() writer.write(etag) else: if not config.suppress_headers: hdr = config.subs_section('header',{}) writer.write(hdr) if Lex.next() is not Title: Section.translate_body() # Process remaining sections. while not reader.eof(): if Lex.next() is not Title: raise EAsciiDoc,'section title expected' Section.translate() Section.setlevel(0) # Write remaining unwritten section close tags. # Substitute document parameters and write document footer. if not config.suppress_headers: ftr = config.subs_section('footer',{}) writer.write(ftr) class Header: '''Static methods and attributes only.''' def __init__(self): raise AssertionError,'no class instances allowed' def parse(): assert Lex.next() is Title Title.parse() if Title.level not in (0,1): raise EAsciiDoc,'document title level must be 0 or 1' gloss = document.glossary # Alias for readability. gloss['doctitle'] = Title.title if document.doctype == 'manpage': # manpage title formatted like mantitle(manvolnum). mo = re.match(r'^(?P.*)\((?P.*)\)$', Title.title) if not mo: raise EAsciiDoc,'malformed manpage title' gloss['mantitle'] = string.strip(string.lower(mo.group('mantitle'))) gloss['manvolnum'] = string.strip(mo.group('manvolnum')) s = reader.read_next() if s: # Parse author line. s = reader.read() s = subs_glossary([s])[0] s = string.strip(s) mo = re.match(r'^(?P[^<>\s]+)' '(\s+(?P[^<>\s]+))?' '(\s+(?P[^<>\s]+))?' '(\s+<(?P\S+)>)?$',s) if not mo: raise EAsciiDoc,'malformed author line' firstname = mo.group('name1') if mo.group('name3'): middlename = mo.group('name2') lastname = mo.group('name3') else: middlename = None lastname = mo.group('name2') email = mo.group('email') gloss['firstname'] = firstname gloss['middlename'] = middlename gloss['lastname'] = lastname gloss['email'] = email author = firstname initials = firstname[0] if middlename: author += ' '+middlename initials += middlename[0] if lastname: author += ' '+lastname initials += lastname[0] gloss['author'] = author initials = string.upper(initials) gloss['authorinitials'] = initials if reader.read_next(): # Parse revision line. s = reader.read() s = subs_glossary([s])[0] # Match RCS/CVS $Id$ marker format. mo = re.match(r'^\$Id: \S+ (?P\S+)' ' (?P\S+) \S+ \S+ \S+ \$$',s) if not mo: # Match AsciiDoc revision,date format. mo = re.match(r'^\D*(?P.*?),(?P.+)$',s) if mo: revision = string.strip(mo.group('revision')) date = string.strip(mo.group('date')) else: revision = None date = string.strip(s) if revision: gloss['revision'] = revision if date: gloss['date'] = date if document.backend == 'linuxdoc' and not gloss.has_key('author'): warning('linuxdoc requires author name') if document.doctype == 'manpage': # Translate mandatory NAME section. if Lex.next() is not Title: raise EAsciiDoc,'manpage must start with a NAME section' Title.parse() if Title.level != 1: raise EAsciiDoc,'manpage NAME section title must be level 1' if string.upper(Title.title) <> 'NAME': raise EAsciiDoc,'manpage must start with a NAME section' if not isinstance(Lex.next(),Paragraph): raise EAsciiDoc,'malformed manpage NAME section body' lines = reader.read_until(r'^$') s = string.join(lines) mo = re.match(r'^(?P.*?)-(?P.*)$',s) if not mo: raise EAsciiDoc,'malformed manpage NAME section body' gloss['manname'] = string.strip(mo.group('manname')) gloss['manpurpose'] = string.strip(mo.group('manpurpose')) parse = staticmethod(parse) class BlockTitle: '''Static methods and attributes only.''' title = None pattern = None def __init__(self): raise AssertionError,'no class instances allowed' def isnext(): result = 0 # Assume failure. line = reader.read_next() if line: mo = re.match(BlockTitle.pattern,line) if mo: BlockTitle.title = mo.group('title') result = 1 return result isnext = staticmethod(isnext) def translate(): assert Lex.next() is BlockTitle reader.read() # Discard title from reader. # Perform title substitutions. s = Lex.subs((BlockTitle.title,), Title.subs) s = string.join(s,writer.newline) if not s: warning('blank block title') BlockTitle.title = s translate = staticmethod(translate) def gettitle(dict): '''If there is a title add it to dict then reset title.''' if BlockTitle.title: dict['title'] = BlockTitle.title BlockTitle.title = None gettitle = staticmethod(gettitle) class Title: '''Processes Header and Section titles. Static methods and attributes only.''' # Configuration entries defaults. titles = ('==','--','~~','^^','++') # Levels 0,1,2,3,4. subs = ('specialcharacters','quotes','replacements','glossary','macros') # Class variables title = None level = 0 sectname = None section_numbers = [0]*5 dump_dict = {} def __init__(self): raise AssertionError,'no class instances allowed' def parse(): '''Parse the Title.title and Title.level from the reader. The real work has already been done by isnext().''' assert Lex.next() is Title reader.read(); reader.read() # Discard title from reader. Title.setsectname() # Perform title substitutions. s = Lex.subs((Title.title,), Title.subs) s = string.join(s,writer.newline) if not s: warning('blank section title') Title.title = s parse = staticmethod(parse) def isnext(): result = 0 # Assume failure. lines = reader.read_ahead(2) if len(lines) == 2: title = Lex.title_parse(lines) if title is not None: Title.title, Title.level = title result = 1 return result isnext = staticmethod(isnext) def load(dict): '''Load and validate [titles] section entries from dict.''' if dict.has_key('underlines'): errmsg = 'malformed [titles] underlines entry' try: underlines = parse_list(dict['underlines']) except: raise EAsciiDoc,errmsg if len(underlines) != 5: raise EAsciiDoc,errmsg for s in underlines: if len(s) !=2: raise EAsciiDoc,errmsg Title.underlines = tuple(underlines) Title.dump_dict['underlines'] = dict['underlines'] if dict.has_key('subs'): Title.subs = parse_options(dict['subs'], SUBS_OPTIONS, 'illegal [titles] subs entry') Title.dump_dict['subs'] = dict['subs'] if dict.has_key('blocktitle'): pat = dict['blocktitle'] if not pat or not is_regexp(pat): raise EAsciiDoc,'malformed [titles] blocktitle entry' BlockTitle.pattern = pat Title.dump_dict['blocktitle'] = pat load = staticmethod(load) def dump(): dump_section('titles',Title.dump_dict) dump = staticmethod(dump) def setsectname(): '''Set Title section name. First search for section title in [specialsections], if not found use default 'sect' name.''' for pat,sect in config.specialsections.items(): mo = re.match(pat,Title.title) if mo: title = mo.groupdict().get('title') if title is not None: Title.title = string.strip(title) else: Title.title = string.strip(mo.group()) Title.sectname = sect break else: Title.sectname = 'sect%d' % (Title.level,) setsectname = staticmethod(setsectname) def getnumber(level): '''Return next section number at section 'level' formatted like 1.2.3.4.''' number = '' for l in range(len(Title.section_numbers)): n = Title.section_numbers[l] if l == 0: continue elif l < level: number = '%s%d.' % (number, n) elif l == level: number = '%s%d.' % (number, n + 1) Title.section_numbers[l] = n + 1 elif l > level: # Reset unprocessed section levels. Title.section_numbers[l] = 0 return number getnumber = staticmethod(getnumber) class Section: '''Static methods and attributes only.''' endtags = [] # Stack of currently open section (level,endtag) tuples. def __init__(self): raise AssertionError,'no class instances allowed' def savetag(level,etag): '''Save section end.''' if Section.endtags: # Previous open section is up one level. # Check deprecated to allow out of sequence titles. #assert level == Section.endtags[-1][0] + 1 pass else: # Top open section is level 1. # Check deprecated to allow level 0 (specifically book part) titles. #assert level == 1 pass Section.endtags.append((level,etag)) savetag = staticmethod(savetag) def setlevel(level): '''Set document level and write open section close tags up to level.''' while Section.endtags and Section.endtags[-1][0] >= level: writer.write(Section.endtags.pop()[1]) document.level = level setlevel = staticmethod(setlevel) def translate(): assert Lex.next() is Title Title.parse() if Title.level == 0 and document.doctype != 'book': raise EAsciiDoc,'only book doctypes can contain level 0 sections' if Title.level > document.level+1: warning('section title out of sequence: ' \ 'expected level %d, got level %d' \ % (document.level+1, Title.level)) Section.setlevel(Title.level) dict = {} dict['title'] = Title.title dict['sectnum'] = Title.getnumber(document.level) stag,etag = config.section2tags(Title.sectname,dict) Section.savetag(Title.level,etag) writer.write(stag) Section.translate_body() translate = staticmethod(translate) def translate_body(terminator=Title): isempty = 1 next = Lex.next() while next and next is not terminator: if next is Title and isinstance(terminator,DelimitedBlock): raise EAsciiDoc,'title not permitted in sidebar body' if next is SectionClose and isinstance(terminator,DelimitedBlock): raise EAsciiDoc,'section closure not permitted in sidebar body' if document.backend == 'linuxdoc' \ and document.level == 0 \ and not isinstance(next,Paragraph): warning('only paragraphs are permitted in linuxdoc synopsis') next.translate() next = Lex.next() isempty = 0 # The section is not empty if contains a subsection. if next and isempty and Title.level > document.level: isempty = 0 if isempty: warning('empty section') translate_body = staticmethod(translate_body) class SectionClose: def __init__(self): raise AssertionError,'no class instances allowed' def isnext(): line = reader.read_next() return line and line in Title.titles isnext = staticmethod(isnext) def translate(): assert Lex.next() is SectionClose line = reader.read() i = list(Title.titles).index(line) if i == 0: raise EAsciiDoc,'level 0 document closure not permitted' elif i > document.level: warning('unable to close section: level %d is not open' % (i,)) else: Section.setlevel(i) translate = staticmethod(translate) class Paragraphs: '''List of paragraph definitions.''' def __init__(self): self.current=None self.paragraphs = [] # List of Paragraph objects. self.default = None # The default [paradef-default] paragraph. def load(self,sections): '''Update paragraphs defined in 'sections' dictionary.''' for k in sections.keys(): if re.match(r'^paradef.+$',k): dict = {} parse_entries(sections.get(k,()),dict) for p in self.paragraphs: if p.name == k: break else: p = Paragraph() self.paragraphs.append(p) try: p.load(k,dict) except EAsciiDoc,e: raise EAsciiDoc,'[%s] %s' % (k,str(e)) def dump(self): for p in self.paragraphs: p.dump() def isnext(self): for p in self.paragraphs: if p.isnext(): self.current = p return 1; return 0 def check(self): # Check all paragraphs have valid delimiter. for p in self.paragraphs: if not p.delimiter or not is_regexp(p.delimiter): raise EAsciiDoc,'[%s] missing or illegal delimiter' % (p.name,) # Check all paragraph sections exist. for p in self.paragraphs: if not p.section: warning('[%s] missing section entry' % (p.name,)) if not config.sections.has_key(p.section): warning('[%s] missing paragraph section' % (p.section,)) # Check we have a default paragraph definition, put it last in list. for i in range(len(self.paragraphs)): if self.paragraphs[i].name == 'paradef-default': p = self.paragraphs[i] del self.paragraphs[i] self.paragraphs.append(p) self.default = p break else: raise EAsciiDoc,'missing [paradef-default] section' class Paragraph: OPTIONS = ('listelement',) def __init__(self): self.name=None # Configuration file section name. self.delimiter=None # Regular expression matching paragraph delimiter. self.section=None # Name of section defining paragraph start/end tags. self.options=() # List of paragraph option names. self.presubs=SUBS_DEFAULT # List of pre-filter substitution option names. self.postsubs=() # List of post-filter substitution option names. self.filter=None # Executable paragraph filter command. def load(self,name,dict): '''Update paragraph definition from section entries in 'dict'.''' self.name = name for k,v in dict.items(): if k == 'delimiter': if v and is_regexp(v): self.delimiter = v else: raise EAsciiDoc,'malformed paragraph delimiter "%s"' % (v,) elif k == 'section': if is_name(v): self.section = v else: raise EAsciiDoc,'malformed paragraph section name "%s"' \ % (v,) elif k == 'options': self.options = parse_options(v,Paragraph.OPTIONS, 'illegal Paragraph %s option' % (k,)) elif k == 'presubs': self.presubs = parse_options(v,SUBS_OPTIONS, 'illegal Paragraph %s option' % (k,)) elif k == 'postsubs': self.postsubs = parse_options(v,SUBS_OPTIONS, 'illegal Paragraph %s option' % (k,)) elif k == 'filter': self.filter = v else: raise EAsciiDoc,'illegal paragraph parameter name "%s"' % (k,) def dump(self): write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) write('['+self.name+']') write('delimiter='+self.delimiter) if self.section: write('section='+self.section) if self.options: write('options='+string.join(self.options,',')) if self.presubs: write('presubs='+string.join(self.presubs,',')) if self.postsubs: write('postsubs='+string.join(self.postsubs,',')) if self.filter: write('filter='+self.filter) write('') def isnext(self): reader.skip_blank_lines() if reader.read_next(): return re.match(self.delimiter,reader.read_next()) else: return 0 def parse_delimiter_text(self): '''Return the text in the paragraph delimiter line.''' delimiter = reader.read() mo = re.match(self.delimiter,delimiter) assert mo result = mo.groupdict().get('text') if result is None: raise EAsciiDoc,'no text group in [%s] delimiter' % (self.name,) return result def write_body(self,body): dict = {} BlockTitle.gettitle(dict) stag,etag = config.section2tags(self.section,dict) # Writes blank line if the tag is empty (to separate LinuxDoc # paragraphs). if not stag: stag = [''] if not etag: etag = [''] writer.write(list(stag)+list(body)+list(etag)) def translate(self): line1 = self.parse_delimiter_text() # The next line introduces the requirement that a List cannot # immediately follow a preceding Paragraph (introduced in v3.2.2). body = reader.read_until(r'^$|'+blocks.delimiter+r'|'+tables.delimiter) body = [line1] + list(body) body = join_lines(body) body = Lex.set_margin(body) # Move body to left margin. body = Lex.subs(body,self.presubs) if self.filter: body = filter_lines(self.filter,body) body = Lex.subs(body,self.postsubs) self.write_body(body) class Lists: '''List of List objects.''' def __init__(self): self.current=None self.lists = [] # List objects. self.delimiter = '' # Combined blocks delimiter regular expression. self.open = [] # A stack of the current an parent lists. def load(self,sections): '''Update lists defined in 'sections' dictionary.''' for k in sections.keys(): if re.match(r'^listdef.+$',k): dict = {} parse_entries(sections.get(k,()),dict) for l in self.lists: if l.name == k: break else: l = List() # Create a new list if it doesn't exist. self.lists.append(l) try: l.load(k,dict) except EAsciiDoc,e: raise EAsciiDoc,'[%s] %s' % (k,str(e)) def dump(self): for l in self.lists: l.dump() def isnext(self): for l in self.lists: if l.isnext(): self.current = l return 1; return 0 def check(self): for l in self.lists: # Check list has valid type . if not l.type in l.TYPES: raise EAsciiDoc,'[%s] illegal type' % (l.name,) # Check list has valid delimiter. if not l.delimiter or not is_regexp(l.delimiter): raise EAsciiDoc,'[%s] missing or illegal delimiter' % (l.name,) # Check all list tags. if not l.listtag or not config.tags.has_key(l.listtag): warning('[%s] missing listtag' % (l.name,)) if not l.itemtag or not config.tags.has_key(l.itemtag): warning('[%s] missing tag itemtag' % (l.name,)) if not l.texttag or not config.tags.has_key(l.texttag): warning('[%s] missing tag texttag' % (l.name,)) if l.type == 'variable': if not l.entrytag or not config.tags.has_key(l.entrytag): warning('[%s] missing entrytag' % (l.name,)) if not l.termtag or not config.tags.has_key(l.termtag): warning('[%s] missing termtag' % (l.name,)) # Build combined lists delimiter pattern. delimiters = [] for l in self.lists: delimiters.append(l.delimiter) self.delimiter = join_regexp(delimiters) class List: TAGS = ('listtag','itemtag','texttag','entrytag','termtag') TYPES = ('simple','variable') def __init__(self): self.name=None # List definition configuration file section name. self.type=None # 'simple' or 'variable' self.delimiter=None # Regular expression matching list item delimiter. self.subs=SUBS_DEFAULT # List of substitution option names. self.listtag=None self.itemtag=None self.texttag=None # Tag for list item text. self.termtag=None # Variable lists only. self.entrytag=None # Variable lists only. def load(self,name,dict): '''Update block definition from section entries in 'dict'.''' self.name = name for k,v in dict.items(): if k == 'type': if v in self.TYPES: self.type = v else: raise EAsciiDoc,'illegal list type "%s"' % (v,) elif k == 'delimiter': if v and is_regexp(v): self.delimiter = v else: raise EAsciiDoc,'malformed list delimiter "%s"' % (v,) elif k == 'subs': self.subs = parse_options(v,SUBS_OPTIONS, 'illegal List %s option' % (k,)) elif k in self.TAGS: if is_name(v): setattr(self,k,v) else: raise EAsciiDoc,'illegal list %s name "%s"' % (k,v) else: raise EAsciiDoc,'illegal list parameter name "%s"' % (k,) def dump(self): write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) write('['+self.name+']') write('type='+self.type) write('delimiter='+self.delimiter) if self.subs: write('subs='+string.join(self.subs,',')) write('listtag='+self.listtag) write('itemtag='+self.itemtag) write('texttag='+self.texttag) if self.type == 'variable': write('entrytag='+self.entrytag) write('termtag='+self.termtag) write('') def isnext(self): reader.skip_blank_lines() if reader.read_next(): return re.match(self.delimiter,reader.read_next()) else: return 0 def parse_delimiter_text(self): '''Return the text in the list delimiter line.''' delimiter = reader.read() mo = re.match(self.delimiter,delimiter) assert mo result = mo.groupdict().get('text') if result is None: raise EAsciiDoc,'no text group in [%s] delimiter' % (self.name,) return result def translate_entry(self): assert self.type == 'variable' stag,etag = config.tag(self.entrytag) if stag: writer.write(stag) # Write terms. while Lex.next() is self: term = self.parse_delimiter_text() writer.write_tag(self.termtag,[term],self.subs) # Write definition. self.translate_item() if etag: writer.write(etag) def translate_item(self,first_line=None): stag,etag = config.tag(self.itemtag) if stag: writer.write(stag) # Write ItemText. text = reader.read_until(lists.delimiter+'|^$|'+blocks.delimiter \ +r'|'+tables.delimiter) if first_line is not None: text = [first_line] + list(text) text = join_lines(text) writer.write_tag(self.texttag,text,self.subs) # Process nested ListParagraphs and Lists. while 1: next = Lex.next() if next in lists.open: break elif isinstance(next,List): next.translate() elif isinstance(next,Paragraph) and 'listelement' in next.options: next.translate() else: break if etag: writer.write(etag) def translate(self): lists.open.append(self) stag,etag = config.tag(self.listtag) if stag: dict = {} BlockTitle.gettitle(dict) stag = subs_glossary([stag],dict)[0] writer.write(stag) while Lex.next() is self: if self.type == 'simple': first_line = self.parse_delimiter_text() self.translate_item(first_line) elif self.type == 'variable': self.translate_entry() else: raise AssertionError,'illegal [%s] list type"' % (self.name,) if etag: writer.write(etag) lists.open.pop() class DelimitedBlocks: '''List of delimited blocks.''' def __init__(self): self.current=None self.blocks = [] # List of DelimitedBlock objects. self.delimiter = '' # Combined blocks delimiter regular expression. def load(self,sections): '''Update blocks defined in 'sections' dictionary.''' for k in sections.keys(): if re.match(r'^blockdef.+$',k): dict = {} parse_entries(sections.get(k,()),dict) for b in self.blocks: if b.name == k: break else: b = DelimitedBlock() self.blocks.append(b) try: b.load(k,dict) except EAsciiDoc,e: raise EAsciiDoc,'[%s] %s' % (k,str(e)) def dump(self): for b in self.blocks: b.dump() def isnext(self): for b in self.blocks: if b.isnext(): self.current = b return 1; return 0 def check(self): # Check all blocks have valid delimiter. for b in self.blocks: if not b.delimiter or not is_regexp(b.delimiter): raise EAsciiDoc,'[%s] missing or illegal delimiter' % (b.name,) # Check all block sections exist. for b in self.blocks: if 'skip' not in b.options: if not b.section: warning('[%s] missing section entry' % (b.name,)) if not config.sections.has_key(b.section): warning('[%s] missing block section' % (b.section,)) # Build combined block delimiter pattern. delimiters = [] for b in self.blocks: delimiters.append(b.delimiter) self.delimiter = join_regexp(delimiters) class DelimitedBlock: OPTIONS = ('section','skip','argsline') def __init__(self): self.name=None # Block definition configuration file section name. self.delimiter=None # Regular expression matching block delimiter. self.section=None # Name of section defining block header/footer. self.options=() # List of block option names. self.presubs=() # List of pre-filter substitution option names. self.postsubs=() # List of post-filter substitution option names. self.filter=None # Executable block filter command. def load(self,name,dict): '''Update block definition from section entries in 'dict'.''' self.name = name for k,v in dict.items(): if k == 'delimiter': if v and is_regexp(v): self.delimiter = v else: raise EAsciiDoc,'malformed block delimiter "%s"' % (v,) elif k == 'section': if is_name(v): self.section = v else: raise EAsciiDoc,'malformed block section name "%s"' % (v,) elif k == 'options': self.options = parse_options(v,DelimitedBlock.OPTIONS, 'illegal DelimitedBlock %s option' % (k,)) elif k == 'presubs': self.presubs = parse_options(v,SUBS_OPTIONS, 'illegal DelimitedBlock %s option' % (k,)) elif k == 'postsubs': self.postsubs = parse_options(v,SUBS_OPTIONS, 'illegal DelimitedBlock %s option' % (k,)) elif k == 'filter': self.filter = v else: raise EAsciiDoc,'illegal block parameter name "%s"' % (k,) def dump(self): write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) write('['+self.name+']') write('delimiter='+self.delimiter) if self.section: write('section='+self.section) if self.options: write('options='+string.join(self.options,',')) if self.presubs: write('presubs='+string.join(self.presubs,',')) if self.postsubs: write('postsubs='+string.join(self.postsubs,',')) if self.filter: write('filter='+self.filter) write('') def isnext(self): reader.skip_blank_lines() if reader.read_next(): return re.match(self.delimiter,reader.read_next()) else: return 0 def translate(self): dict = {} BlockTitle.gettitle(dict) delimiter = reader.read() mo = re.match(self.delimiter,delimiter) assert mo dict.update(mo.groupdict()) for k,v in dict.items(): if v is None: del dict[k] if dict.has_key('args'): # Extract embedded arguments from leading delimiter line. parse_args(dict['args'],dict) elif 'argsline' in self.options: # Parse block arguments line. reader.parse_arguments(dict) # Process block contents. if 'skip' in self.options: # Discard block body. reader.read_until(self.delimiter,same_file=1) elif 'section' in self.options: stag,etag = config.section2tags(self.section,dict) # The body is treated like a SimpleSection. writer.write(stag) Section.translate_body(self) writer.write(etag) else: stag,etag = config.section2tags(self.section,dict) body = reader.read_until(self.delimiter,same_file=1) body = Lex.subs(body,self.presubs) if self.filter: body = filter_lines(self.filter,body,dict) body = Lex.subs(body,self.postsubs) # Write start tag, content, end tag. writer.write(list(stag)+list(body)+list(etag)) if reader.eof(): raise EAsciiDoc,'closing [%s] delimiter expected' % (self.name,) delimiter = reader.read() # Discard delimiter line. assert re.match(self.delimiter,delimiter) class Tables: '''List of tables.''' def __init__(self): self.current=None self.tables = [] # List of Table objects. self.delimiter = '' # Combined tables delimiter regular expression. def load(self,sections): '''Update tables defined in 'sections' dictionary.''' for k in sections.keys(): if re.match(r'^tabledef.+$',k): dict = {} parse_entries(sections.get(k,()),dict) for t in self.tables: if t.name == k: break else: t = Table() self.tables.append(t) try: t.load(k,dict) except EAsciiDoc,e: raise EAsciiDoc,'[%s] %s' % (k,str(e)) def dump(self): for t in self.tables: t.dump() def isnext(self): for t in self.tables: if t.isnext(): self.current = t return 1; return 0 def check(self): # Check we have a default table definition, for i in range(len(self.tables)): if self.tables[i].name == 'tabledef-default': default = self.tables[i] break else: raise EAsciiDoc,'missing [table-default] section' # Set default table defaults. if default.subs is None: default.subs = SUBS_DEFAULT if default.format is None: default.subs = 'fixed' # Propagate defaults to unspecified table parameters. for t in self.tables: if t is not default: if t.fillchar is None: t.fillchar = default.fillchar if t.subs is None: t.subs = default.subs if t.format is None: t.format = default.format if t.section is None: t.section = default.section if t.colspec is None: t.colspec = default.colspec if t.headrow is None: t.headrow = default.headrow if t.footrow is None: t.footrow = default.footrow if t.bodyrow is None: t.bodyrow = default.bodyrow if t.headdata is None: t.headdata = default.headdata if t.footdata is None: t.footdata = default.footdata if t.bodydata is None: t.bodydata = default.bodydata # Check all tables have valid fill character. for t in self.tables: if not t.fillchar or len(t.fillchar) != 1: raise EAsciiDoc,'[%s] missing or illegal fillchar' % (t.name,) # Build combined tables delimiter patterns and assign defaults. delimiters = [] for t in self.tables: # Ruler is: # (ColStop,(ColWidth,FillChar+)?)+, FillChar+, TableWidth? t.delimiter = r'^(' + Table.COL_STOP \ + r'(\d*|' + re.escape(t.fillchar) + r'*)' \ + r')+' \ + re.escape(t.fillchar) + r'+' \ + '([\d\.]*)$' delimiters.append(t.delimiter) if not t.headrow: t.headrow = t.bodyrow if not t.footrow: t.footrow = t.bodyrow if not t.headdata: t.headdata = t.bodydata if not t.footdata: t.footdata = t.bodydata self.delimiter = join_regexp(delimiters) # Check table definitions are valid. for t in self.tables: t.check() if t.check_msg: warning('[%s] table definition: %s' % (t.name,t.check_msg)) class Column: '''Table column.''' def __init__(self): self.colalign = None # 'left','right','center' self.rulerwidth = None self.colwidth = None # Output width in page units. class Table: COL_STOP = r"(`|'|\.)" # RE. ALIGNMENTS = {'`':'left', "'":'right', '.':'center'} FORMATS = ('fixed','csv','dsv') def __init__(self): # Configuration parameters. self.name=None # Table definition configuration file section name. self.fillchar=None self.subs=None self.format=None # 'fixed','csv','dsv' self.section=None self.colspec=None self.headrow=None self.footrow=None self.bodyrow=None self.headdata=None self.footdata=None self.bodydata=None # Calculated parameters. self.delimiter=None # RE matching any table ruler. self.underline=None # RE matching current table underline. self.isnumeric=0 # True if numeric ruler, false if character ruler. self.tablewidth=None # Optional table width scale factor. self.columns=[] # List of Columns. self.dict={} # Substitutions dictionary. # Other. self.check_msg='' # Message set by previous self.check() call. def load(self,name,dict): '''Update table definition from section entries in 'dict'.''' self.name = name for k,v in dict.items(): if k == 'fillchar': if v and len(v) == 1: self.fillchar = v else: raise EAsciiDoc,'malformed table fillchar "%s"' % (v,) elif k == 'section': if is_name(v): self.section = v else: raise EAsciiDoc,'malformed table section name "%s"' % (v,) elif k == 'subs': self.subs = parse_options(v,SUBS_OPTIONS, 'illegal Table %s option' % (k,)) elif k == 'format': if v in Table.FORMATS: self.format = v else: raise EAsciiDoc,'illegal table format "%s"' % (v,) elif k == 'colspec': self.colspec = v elif k == 'headrow': self.headrow = v elif k == 'footrow': self.footrow = v elif k == 'bodyrow': self.bodyrow = v elif k == 'headdata': self.headdata = v elif k == 'footdata': self.footdata = v elif k == 'bodydata': self.bodydata = v else: raise EAsciiDoc,'illegal table parameter name "%s"' % (k,) def dump(self): write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) write('['+self.name+']') write('fillchar='+self.fillchar) write('subs='+string.join(self.subs,',')) write('format='+self.format) write('section='+self.section) if self.colspec: write('colspec='+self.colspec) if self.headrow: write('headrow='+self.headrow) if self.footrow: write('footrow='+self.footrow) write('bodyrow='+self.bodyrow) if self.headdata: write('headdata='+self.headdata) if self.footdata: write('footdata='+self.footdata) write('bodydata='+self.bodydata) write('') def check(self): '''Check table definition and set self.check_msg if invalid else set self.check_msg to blank string.''' # Check global table parameters. if config.textwidth is None: self.check_msg = 'missing [miscellaneous] textwidth entry' elif config.pagewidth is None: self.check_msg = 'missing [miscellaneous] pagewidth entry' elif config.pageunits is None: self.check_msg = 'missing [miscellaneous] pageunits entry' elif not self.section: self.check_msg = 'missing section entry' elif not config.sections.has_key(self.section): self.check_msg = 'missing section %s' % (self.section,) elif self.headrow is None: self.check_msg = 'missing headrow entry' elif self.footrow is None: self.check_msg = 'missing footrow entry' elif self.bodyrow is None: self.check_msg = 'missing bodyrow entry' elif self.headdata is None: self.check_msg = 'missing headdata entry' elif self.footdata is None: self.check_msg = 'missing footdata entry' elif self.bodydata is None: self.check_msg = 'missing bodydata entry' else: # No errors. self.check_msg = '' def isnext(self): reader.skip_blank_lines() if reader.read_next(): return re.match(self.delimiter,reader.read_next()) else: return 0 def parse_ruler(self,ruler): '''Parse ruler calculating underline and ruler column widths.''' fc = re.escape(self.fillchar) # Strip and save optional tablewidth from end of ruler. mo = re.match(r'^(.*'+fc+r'+)([\d\.]+)$',ruler) if mo: ruler = mo.group(1) self.tablewidth = float(mo.group(2)) self.dict['tablewidth'] = str(float(self.tablewidth)) else: self.tablewidth = None self.dict['tablewidth'] = '100.0' # Guess whether column widths are specified numerically or not. if ruler[1] != self.fillchar: # If the first column does not start with a fillchar then numeric. self.isnumeric = 1 elif ruler[1:] == self.fillchar*len(ruler[1:]): # The case of one column followed by fillchars is numeric. self.isnumeric = 1 else: self.isnumeric = 0 # Underlines must be 3 or more fillchars. self.underline = r'^' + fc + r'{3,}$' splits = re.split(self.COL_STOP,ruler)[1:] # Build self.columns. for i in range(0,len(splits),2): c = Column() c.colalign = self.ALIGNMENTS[splits[i]] s = splits[i+1] if self.isnumeric: # Strip trailing fillchars. s = re.sub(fc+r'+$','',s) if s == '': c.rulerwidth = None else: c.rulerwidth = int(validate(s,'int($)>0', 'malformed ruler: bad width')) else: # Calculate column width from inter-fillchar intervals. if not re.match(r'^'+fc+r'+$',s): raise EAsciiDoc,'malformed ruler: illegal fillchars' c.rulerwidth = len(s)+1 self.columns.append(c) # Fill in unspecified ruler widths. if self.isnumeric: if self.columns[0].rulerwidth is None: prevwidth = 1 for c in self.columns: if c.rulerwidth is None: c.rulerwidth = prevwidth prevwidth = c.rulerwidth def build_colspecs(self): '''Generate colwidths and colspecs. This can only be done after the table arguments have been parsed since we use the table format.''' self.dict['cols'] = len(self.columns) # Calculate total ruler width. totalwidth = 0 for c in self.columns: totalwidth = totalwidth + c.rulerwidth if totalwidth <= 0: raise EAsciiDoc,'zero width table' # Calculate marked up colwidths from rulerwidths. for c in self.columns: # Convert ruler width to output page width. width = float(c.rulerwidth) if self.format == 'fixed': if self.tablewidth is None: # Size proportional to ruler width. colfraction = width/config.textwidth else: # Size proportional to page width. colfraction = width/totalwidth else: # Size proportional to page width. colfraction = width/totalwidth c.colwidth = colfraction * config.pagewidth # To page units. if self.tablewidth is not None: c.colwidth = c.colwidth * self.tablewidth # Scale factor. if self.tablewidth > 1: c.colwidth = c.colwidth/100 # tablewidth is in percent. # Build colspecs. if self.colspec: s = [] for c in self.columns: self.dict['colalign'] = c.colalign self.dict['colwidth'] = str(int(c.colwidth)) s.append(subs_glossary((self.colspec,),self.dict)[0]) self.dict['colspecs'] = string.join(s,writer.newline) def parse_arguments(self): '''Parse table arguments string.''' d = {} reader.parse_arguments(d) # Update table with overridable parameters. if d.has_key('subs'): self.subs = parse_options(d['subs'],SUBS_OPTIONS, 'illegal table subs %s option' % ('subs',)) if d.has_key('format'): self.format = d['format'] if d.has_key('tablewidth'): self.tablewidth = float(d['tablewidth']) # Add arguments to markup substitutions. self.dict.update(d) def split_rows(self,rows): '''Return a list of lines up to but not including the next underline. Continued lines are joined.''' reo = re.compile(self.underline) i = 0 while not reo.match(rows[i]): i = i+1 if i == 0: raise EAsciiDoc,'missing [%s] table rows' % (self.name,) if i >= len(rows): raise EAsciiDoc,'closing [%s] underline expected' % (self.name,) return (join_lines(rows[:i]), rows[i+1:]) def parse_rows(self, rows, rtag, dtag): '''Parse rows list using the row and data tags. Returns a substituted list of output lines.''' result = [] # Source rows are parsed as single block, rather than line by line, to # allow the CSV reader to handle multi-line rows. if self.format == 'fixed': rows = self.parse_fixed(rows) elif self.format == 'csv': rows = self.parse_csv(rows) elif self.format == 'dsv': rows = self.parse_dsv(rows) else: assert 1,'illegal table format' # Substitute and indent all data in all rows. stag,etag = subs_tag(rtag,self.dict) for row in rows: result.append(' '+stag) for data in self.subs_row(row,dtag): result.append(' '+data) result.append(' '+etag) return result def subs_row(self, data, dtag): '''Substitute the list of source row data elements using the data tag. Returns a substituted list of output table data items.''' result = [] if len(data) < len(self.columns): warning('fewer row data items then table columns') if len(data) > len(self.columns): warning('more row data items than table columns') for i in range(len(self.columns)): if i > len(data) - 1: d = '' # Fill missing column data with blanks. else: d = data[i] c = self.columns[i] self.dict['colalign'] = c.colalign self.dict['colwidth'] = str(int(c.colwidth)) + config.pageunits stag,etag = subs_tag(dtag,self.dict) # Insert AsciiDoc line break (' +') where row data has newlines # ('\n'). This is really only useful when the table format is csv # and the output markup is HTML. It's also a bit dubious in that it # assumes the user has not modified the shipped line break pattern. if 'replacements' in self.subs: # Insert line breaks in cell data. d = re.sub(r'(?m)\n',r' +\n',d) d = string.split(d,'\n') # So writer.newline is written. else: d = [d] result = result + [stag] + Lex.subs(d,self.subs) + [etag] return result def parse_fixed(self,rows): '''Parse the list of source table rows. Each row item in the returned list contains a list of cell data elements.''' result = [] for row in rows: data = [] start = 0 for c in self.columns: end = start + c.rulerwidth if c is self.columns[-1]: # Text in last column can continue forever. data.append(string.strip(row[start:])) else: data.append(string.strip(row[start:end])) start = end result.append(data) return result def parse_csv(self,rows): '''Parse the list of source table rows. Each row item in the returned list contains a list of cell data elements.''' import StringIO try: import csv except: raise EAsciiDoc,'python 2.3 or better required to parse csv tables' result = [] rdr = csv.reader(StringIO.StringIO(string.join(rows,'\n'))) try: for row in rdr: result.append(row) except: raise EAsciiDoc,'csv parse error "%s"' % (row,) return result def parse_dsv(self,rows): '''Parse the list of source table rows. Each row item in the returned list contains a list of cell data elements.''' separator = self.dict.get('separator',':') separator = eval('"'+separator+'"') if len(separator) != 1: raise EAsciiDoc,'malformed dsv separator: %s' % (separator,) # TODO If separator is preceeded by and odd number of backslashes then # it is escaped and should not delimit. result = [] for row in rows: # Unescape escaped characters. row = eval('"'+string.replace(row,'"','\\"')+'"') data = string.split(row,separator) result.append(data) return result def translate(self): # Reset instance specific properties. self.underline = None self.columns = [] self.dict = {} BlockTitle.gettitle(self.dict) # Add relevant globals to table substitutions. self.dict['pagewidth'] = str(config.pagewidth) self.dict['pageunits'] = config.pageunits # Save overridable table parameters. save_subs = self.subs save_format = self.format # Parse table ruler. ruler = reader.read() assert re.match(self.delimiter,ruler) self.parse_ruler(ruler) # Parse table arguments. self.parse_arguments() # Read the entire table. table = reader.read_until(r'^$') # Tables terminated by blank line. if len(table) < 1 or not re.match(self.underline,table[-1]): raise EAsciiDoc,'closing [%s] underline expected' % (self.name,) if self.check_msg: warning('skipping %s table: %s' % (self.name,self.check_msg)) return # Generate colwidths and colspecs. self.build_colspecs() # Generate headrows, footrows, bodyrows. headrows = footrows = [] bodyrows,table = self.split_rows(table) if table: headrows = bodyrows bodyrows,table = self.split_rows(table) if table: footrows,table = self.split_rows(table) if headrows: headrows = self.parse_rows(headrows, self.headrow, self.headdata) self.dict['headrows'] = string.join(headrows,writer.newline) if footrows: footrows = self.parse_rows(footrows, self.footrow, self.footdata) self.dict['footrows'] = string.join(footrows,writer.newline) bodyrows = self.parse_rows(bodyrows, self.bodyrow, self.bodydata) self.dict['bodyrows'] = string.join(bodyrows,writer.newline) table = subs_glossary(config.sections[self.section],self.dict) writer.write(table) # Restore overridable table parameters. self.subs = save_subs self.format = save_format class Macros: def __init__(self): self.macros = [] # List of Macros. self.current = None # The last matched block macro. def load(self,entries): for entry in entries: m = Macro() m.load(entry) if m.name is None: # Delete undefined macro. for i in range(len(self.macros)-1,-1,-1): if self.macros[i].pattern == m.pattern: del self.macros[i] else: # Check for duplicates. for m2 in self.macros: if m.equals(m2): warning('duplicate macro: '+entry) break else: self.macros.append(m) def dump(self): write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) write('[macros]') for m in self.macros: write('%s=%s%s' % (m.pattern,m.prefix,m.name)) write('') def check(self): # Check all named sections exist. for m in self.macros: if m.name and m.prefix != '+' \ and not config.sections.has_key(m.name): warning('missing macro section: [%s]' % (m.name,)) def subs(self,text,prefix=''): result = text for m in self.macros: if m.prefix == prefix: result = m.subs(result) return result def isnext(self): '''Return matching macro if block macro is next on reader.''' reader.skip_blank_lines() line = reader.read_next() if line: for m in self.macros: if m.prefix == '#': if m.reo.match(line): self.current = m return m return 0 def match(self,prefix,name,text): '''Return re match object matching 'text' with macro type 'prefix', macro name 'name'.''' for m in self.macros: if m.prefix == prefix: mo = m.reo.match(text) if mo: if m.name == name: return mo if re.match(name,mo.group('name')): return mo return None # Macro set just prior to calling _subs_macro(). Ugly but there's no way # to pass optional arguments with _subs_macro(). _macro = None def _subs_macro(mo): '''Function called to perform inline macro substitution. Uses matched macro regular expression object and returns string containing the substituted macro body. Called by Macros().subs().''' # Check if macro reference is escaped. if mo.group()[0] == '\\': return mo.group()[1:] # Strip leading backslash. dict = mo.groupdict() # Delete groups that didn't participate in match. for k,v in dict.items(): if v is None: del dict[k] if _macro.name: name = _macro.name else: if not dict.has_key('name'): warning('missing macro name group: %s' % (mo.re.pattern,)) return '' name = dict['name'] # If we're dealing with a block macro get optional block title. if _macro.prefix == '#': BlockTitle.gettitle(dict) # Parse macro caption to macro arguments. assert dict.has_key('caption') and dict['caption'] is not None if dict['caption'] == '': del dict['caption'] else: parse_args(dict['caption'],dict) body = config.subs_section(name,dict) if len(body) == 0: result = '' elif len(body) == 1: result = body[0] else: result = string.join(body,writer.newline) return result class Macro: def __init__(self): self.pattern = None # Matching regular expression. self.name = '' # Conf file section name (None if implicit). self.prefix = '' # '' if inline, '+' if builtin, '#' if block. self.reo = None # Compiled pattern re object. def equals(self,m): if self.pattern != m.pattern: return 0 if self.name != m.name: return 0 if self.prefix != m.prefix: return 0 return 1 def load(self,entry): e = parse_entry(entry) if not e: raise EAsciiDoc,'malformed macro entry "%s"' % (entry,) self.pattern, self.name = e if not is_regexp(self.pattern): raise EAsciiDoc,'illegal regular expression in macro entry "%s"' \ % (entry,) self.reo = re.compile(self.pattern) if self.name: if self.name[0] in ('+','#'): self.prefix, self.name = self.name[0], self.name[1:] if self.name and not is_name(self.name): raise EAsciiDoc,'illegal section name in macro entry "%s"' % \ (entry,) def subs(self,text): global _macro _macro = self # Pass the macro to _subs_macro(). return self.reo.sub(_subs_macro,text) def translate(self): '''Translate block macro at reader.''' assert self.prefix == '#' line = reader.read() writer.write(self.subs(line)) #--------------------------------------------------------------------------- # Input stream Reader and output stream writer classes. #--------------------------------------------------------------------------- class Reader1: '''Line oriented AsciiDoc input file reader. Processes non lexical entities: transparently handles included files. Tabs are expanded and lines are right trimmed.''' # This class is not used directly, use Reader class instead. READ_BUFFER_MIN = 10 # Read buffer low level. def __init__(self): self.f = None # Input file object. self.fname = None # Input file name. self.next = [] # Read ahead buffer containing # (filename,linenumber,linetext) tuples. self.cursor = None # Last read() (filename,linenumber,linetext). self.tabsize = 8 # Tab expansion number of spaces. self.parent = None # Included reader's parent reader. self._lineno = 0 # The last line read from file object f. self.include_enabled = 1 # Enables/disables file inclusion. self.include_depth = 0 # Current include depth. self.include_max = 5 # Maxiumum allowed include depth. def open(self,fname): self.fname = fname verbose('reading: '+fname) if fname == '': self.f = sys.stdin else: self.f = open(fname,"rb") self._lineno = 0 # The last line read from file object f. self.next = [] # Prefill buffer by reading the first line and then pushing it back. if Reader1.read(self): self.unread(self.cursor) self.cursor = None def closefile(self): '''Used by class methods to close nested include files.''' self.f.close() self.next = [] def close(self): self.closefile() self.__init__() def read(self): '''Read next line. Return None if EOF. Expand tabs. Strip trailing white space. Maintain self.next read ahead buffer.''' # Top up buffer. if len(self.next) <= self.READ_BUFFER_MIN: s = self.f.readline() if s: self._lineno = self._lineno + 1 while s: if self.tabsize != 0: s = string.expandtabs(s,self.tabsize) s = string.rstrip(s) self.next.append((self.fname,self._lineno,s)) if len(self.next) > self.READ_BUFFER_MIN: break s = self.f.readline() if s: self._lineno = self._lineno + 1 # Return first (oldest) buffer entry. if len(self.next) > 0: self.cursor = self.next[0] del self.next[0] result = self.cursor[2] # Check for include macro. mo = macros.match('+',r'include.?',result) if mo and self.include_enabled: # Perform glossary substitution on inlcude macro. a = subs_glossary([mo.group('target')]) # If undefined glossary entry then skip to next line of input. if not a: return Reader1.read(self) fname = a[0] if self.include_depth >= self.include_max: raise EAsciiDoc,'maxiumum inlude depth exceeded' if not os.path.isabs(fname) and self.fname != '': # Include files are relative to parent document directory. fname = os.path.join(os.path.dirname(self.fname),fname) if self.fname != '' and not os.path.isfile(fname): raise EAsciiDoc,'include file "%s" not found' % (fname,) # Parse include macro arguments. args = {} parse_args(mo.group('caption'),args) # Clone self and set as parent (self assumes the role of child). parent = Reader1() assign(parent,self) self.parent = parent if args.has_key('tabsize'): self.tabsize = int(validate(args['tabsize'],'int($)>=0', \ 'illegal include macro tabsize argument')) # The include1 variant does not allow nested includes. if mo.group('name') == 'include1': self.include_enabled = 0 self.open(fname) self.include_depth = self.include_depth + 1 result = Reader1.read(self) else: if not Reader1.eof(self): result = Reader1.read(self) else: result = None return result def eof(self): '''Returns True if all lines have been read.''' if len(self.next) == 0: # End of current file. if self.parent: self.closefile() assign(self,self.parent) # Restore parent reader. return Reader1.eof(self) else: return 1 else: return 0 def read_next(self): '''Like read() but does not advance file pointer.''' if Reader1.eof(self): return None else: return self.next[0][2] def unread(self,cursor): '''Push the line (filename,linenumber,linetext) tuple back into the read buffer. Note that it's up to the caller to restore the previous cursor.''' assert cursor self.next.insert(0,cursor) class Reader(Reader1): ''' Wraps (well, sought of) Reader1 class and implements conditional text inclusion.''' def __init__(self): Reader1.__init__(self) self.depth = 0 # if nesting depth. self.skip = 0 # true if we're skipping ifdef...endif. self.skipname = '' # Name of current endif macro target. self.skipto = -1 # The depth at which skipping is reenabled. def read_super(self): result = Reader1.read(self) if result is None and self.skip: raise EAsciiDoc,'missing endif::%s[]' %(self.skipname,) return result def read(self): result = self.read_super() if result is None: return None while self.skip: mo = macros.match('+',r'ifdef|ifndef|endif',result) if mo: name = mo.group('name') target = mo.group('target') if name == 'endif': self.depth = self.depth-1 if self.depth < 0: raise EAsciiDoc,'"%s" is mismatched' % (result,) if self.depth == self.skipto: self.skip = 0 if target and self.skipname != target: raise EAsciiDoc,'"%s" is mismatched' % (result,) else: # ifdef or ifndef. if not target: raise EAsciiDoc,'"%s" missing macro target' % (result,) self.depth = self.depth+1 result = self.read_super() if result is None: return None mo = macros.match('+',r'ifdef|ifndef|endif',result) if mo: name = mo.group('name') target = mo.group('target') if name == 'endif': self.depth = self.depth-1 else: # ifdef or ifndef. if not target: raise EAsciiDoc,'"%s" missing macro target' % (result,) defined = document.glossary.get(target) is not None if name == 'ifdef': self.skip = not defined else: # ifndef. self.skip = defined if self.skip: self.skipto = self.depth self.skipname = target self.depth = self.depth+1 result = self.read() return result def eof(self): return self.read_next() is None def read_next(self): save_cursor = self.cursor result = self.read() if result is not None: self.unread(self.cursor) self.cursor = save_cursor return result def read_all(self,fname): '''Read all lines from file fname and return as list. Use like class method: Reader().read_all(fname)''' result = [] self.open(fname) try: while not self.eof(): result.append(self.read()) finally: self.close() return result def read_lines(self,count=1): '''Return tuple containing count lines.''' result = [] i = 0 while i < count and not self.eof(): result.append(self.read()) return tuple(result) def read_ahead(self,count=1): '''Same as read_lines() but does not advance the file pointer.''' result = [] putback = [] save_cursor = self.cursor try: i = 0 while i < count and not self.eof(): result.append(self.read()) putback.append(self.cursor) i = i+1 while putback: self.unread(putback.pop()) finally: self.cursor = save_cursor return tuple(result) def skip_blank_lines(self): reader.read_until(r'\s*\S+') def read_until(self,pattern,same_file=0): '''Like read() but reads lines up to (but not including) the first line that matches the pattern regular expression. If same_file is True then the terminating pattern must occur in the file the was being read when the routine was called.''' if same_file: fname = self.cursor[0] result = [] reo = re.compile(pattern) while not self.eof(): save_cursor = self.cursor s = self.read() if (not same_file or fname == self.cursor[0]) and reo.match(s): self.unread(self.cursor) self.cursor = save_cursor break result.append(s) return tuple(result) def read_continuation(self): '''Like read() but treats trailing backslash as line continuation character.''' s = self.read() if s is None: return None result = '' while s is not None and len(s) > 0 and s[-1] == '\\': result = result + s[:-1] s = self.read() if s is not None: result = result + s return result def parse_arguments(self,dict,default_arg=None): '''If an arguments line is in the reader parse it to dict.''' s = self.read_next() if s is not None: if s[:2] == '\\[': # Unescape next line. save_cursor = self.cursor self.read() self.cursor = self.cursor[0:2] + (s[1:],) self.unread(self.cursor) self.cursor = save_cursor elif re.match(r'^\[.*[\\\]]$',s): s = self.read_continuation() if not re.match(r'^\[.*\]$',s): warning('malformed arguments line') else: parse_args(s[1:-1],dict,default_arg) class Writer: '''Writes lines to output file.''' newline = '\r\n' # End of line terminator. f = None # Output file object. fname= None # Output file name. lines_out = 0 # Number of lines written. def open(self,fname): self.fname = fname verbose('writing: '+fname) if fname == '': self.f = sys.stdout else: self.f = open(fname,"wb+") self.lines_out = 0 def close(self,): if self.fname != '': self.f.close() def write(self,*args): '''Iterates arguments, writes tuple and list arguments one line per element, else writes argument as single line. If no arguments writes blank line. self.newline is appended to each line.''' if len(args) == 0: self.f.write(self.newline) self.lines_out = self.lines_out + 1 else: for arg in args: if type(arg) in (TupleType,ListType): for s in arg: self.f.write(s+self.newline) self.lines_out = self.lines_out + len(arg) else: self.f.write(arg+self.newline) self.lines_out = self.lines_out + 1 def write_tag(self,tagname,content,subs=SUBS_DEFAULT): '''Write content enveloped by configuration file tag tagname. Substitutions specified in the 'subs' list are perform on the 'content'.''' stag,etag = config.tag(tagname) self.write(stag,Lex.subs(content,subs),etag) #--------------------------------------------------------------------------- # Configuration file processing. #--------------------------------------------------------------------------- def _subs_specialwords(mo): '''Special word substitution function called by Config.subs_specialwords().''' word = mo.re.pattern # The special word. macro = config.specialwords[word] # The corresponding inline macro. if not config.sections.has_key(macro): raise EAsciiDoc,'missing special word macro [%s]' % (macro,) args = {} args['words'] = mo.group() # The full match string is argument 'words'. args.update(mo.groupdict()) # Add named match groups to the arguments. # Delete groups that didn't participate in match. for k,v in args.items(): if v is None: del args[k] lines = subs_glossary(config.sections[macro],args) if len(lines) == 0: result = '' elif len(lines) == 1: result = lines[0] else: result = string.join(lines,writer.newline) return result class Config: '''Methods to process configuration files.''' # Predefined section name re's. SPECIAL_SECTIONS= ('tags','miscellaneous','glossary','specialcharacters', 'specialwords','macros','replacements','quotes','titles', r'paradef.+',r'listdef.+',r'blockdef.+',r'tabledef.*') def __init__(self): self.sections = OrderedDict() # Keyed by section name containing # lists of section lines. # Command-line options. self.verbose = 0 self.suppress_headers = 0 # -s option. # [miscellaneous] section. self.tabsize = 8 self.textwidth = 70 self.newline = '\r\n' self.pagewidth = None self.pageunits = None self.outfilesuffix = '' self.tags = {} # Values contain (stag,etag) tuples. self.specialchars = {} # Values of special character substitutions. self.specialwords = {} # Name is special word pattern, value is macro. self.replacements = {} # Key is find pattern, value is replace pattern. self.specialsections = {} # Name is special section name pattern, value # is corresponding section name. self.quotes = {} # Values contain corresponding tag name. self.fname = '' # Most recently loaded configuration file name. self.conf_gloss = {} # Glossary entries from conf files. self.cmd_gloss = {} # From command-line -g option glossary entries. self.loaded = [] # Loaded conf files. def load(self,fname,dir=None): '''Loads sections dictionary with section from file fname. Existing sections are overlaid. Silently skips missing configuration files.''' if dir: fname = os.path.join(dir, fname) # Sliently skip missing configuration file. if not os.path.isfile(fname): return # Don't load conf files twice (local and application conf files are the # same if the source file is in the application directory). if realpath(fname) in self.loaded: return rdr = Reader() # Use instead of file so we can use include:[] macro. rdr.open(fname) self.fname = fname reo = re.compile(r'^\s*\[\s*(?P

\S+)\s*\]\s*$') sections = OrderedDict() section,contents = '',[] while not rdr.eof(): s = rdr.read() if s and s[0] == '#': # Skip comment lines. continue s = string.rstrip(s) found = reo.findall(s) if found: if section: # Store previous section. if sections.has_key(section) \ and self.is_special_section(section): # Merge line oriented special sections. contents = sections[section] + contents sections[section] = contents section = string.lower(found[0]) contents = [] else: contents.append(s) if section and contents: # Store last section. if sections.has_key(section) \ and self.is_special_section(section): # Merge line oriented special sections. contents = sections[section] + contents sections[section] = contents rdr.close() # Delete blank lines from sections. for k in sections.keys(): for i in range(len(sections[k])-1,-1,-1): if not sections[k][i]: del sections[k][i] elif not self.is_special_section(k): break # Only trailing blanks from non-special sections. # Merge new sections. self.sections.update(sections) self.parse_tags() # Internally [miscellaneous] section entries are just glossary entries. dict = {} parse_entries(sections.get('miscellaneous',()),dict,unquote=1) update_glossary(self.conf_gloss,dict) dict = {} parse_entries(sections.get('glossary',()),dict,unquote=1) update_glossary(self.conf_gloss,dict) # Update document glossary so entries are available immediately. document.init_glossary() dict = {} parse_entries(sections.get('titles',()),dict) Title.load(dict) parse_entries(sections.get('specialcharacters',()),self.specialchars) undefine_entries(self.specialchars) parse_entries(sections.get('quotes',()),self.quotes) undefine_entries(self.quotes) self.parse_specialwords() self.parse_replacements() self.parse_specialsections() paragraphs.load(sections) lists.load(sections) blocks.load(sections) tables.load(sections) macros.load(sections.get('macros',())) self.loaded.append(realpath(fname)) def load_all(self,dir): '''Load the standard configuration files from directory 'dir'.''' self.load('asciidoc.conf',dir) conf = document.backend + '.conf' self.load(conf,dir) conf = document.backend + '-' + document.doctype + '.conf' self.load(conf,dir) # Load ./filters/*.conf files if they exist. filters = os.path.join(dir,'filters') if os.path.isdir(filters): for file in os.listdir(filters): if re.match(r'^.+\.conf$',file): self.load(file,filters) def load_miscellaneous(self,dict): '''Set miscellaneous configuration entries from dictionary values.''' def set_misc(name,rule='1',intval=0): if dict.has_key(name): errmsg = 'illegal [miscellaneous] %s entry' % name if intval: setattr(self, name, int(validate(dict[name],rule,errmsg))) else: setattr(self, name, validate(dict[name],rule,errmsg)) set_misc('tabsize','int($)>0',intval=1) set_misc('textwidth','int($)>0',intval=1) set_misc('pagewidth','int($)>0',intval=1) set_misc('pageunits') set_misc('outfilesuffix') if dict.has_key('newline'): # Convert escape sequences to their character values. self.newline = eval('"'+dict['newline']+'"') def check(self): '''Check the configuration for internal consistancy. Called after all configuration files have been loaded.''' # Heuristic check that at least one configuration file was loaded. if not self.specialchars or not self.tags or not lists: raise EAsciiDoc,'incomplete or no configuration files' # Check special characters are only one character long. for k in self.specialchars.keys(): if len(k) != 1: raise EAsciiDoc,'[specialcharacters] "%s" ' \ 'must be a single character' % (k,) # Check all special words have a corresponding inline macro body. for macro in self.specialwords.values(): if not is_name(macro): raise EAsciiDoc,'illegal "%s" special word name' % (macro,) if not self.sections.has_key(macro): warning('missing special word macro [%s]' % (macro,)) # Check all text quotes have a corresponding tag. for q in self.quotes.keys(): tag = self.quotes[q] if not self.tags.has_key(tag): warning('[quotes] %s missing "%s" tag definition' % (q,tag)) # Check all specialsections section names exist. for k,v in self.specialsections.items(): if not self.sections.has_key(v): warning('[%s] missing specialsections section' % (v,)) paragraphs.check() lists.check() blocks.check() tables.check() macros.check() def is_special_section(self,section_name): for name in self.SPECIAL_SECTIONS: if re.match(name,section_name): return 1 return 0 def dump(self): '''Dump configuration to stdout.''' # Header. hdr = '' hdr = hdr + '#' + writer.newline hdr = hdr + '# Generated by AsciiDoc %s for %s %s.%s' % \ (VERSION,document.backend,document.doctype,writer.newline) t = time.asctime(time.localtime(time.time())) hdr = hdr + '# %s%s' % (t,writer.newline) hdr = hdr + '#' + writer.newline sys.stdout.write(hdr) # Dump special sections. # Dump only the configuration file and command-line glossary entries. # [miscellanous] entries are dumped as part of the [glossary]. dict = {} dict.update(self.conf_gloss) dict.update(self.cmd_gloss) dump_section('glossary',dict) Title.dump() dump_section('quotes',self.quotes) dump_section('specialcharacters',self.specialchars) dict = {} for k,v in self.specialwords.items(): if dict.has_key(v): dict[v] = '%s "%s"' % (dict[v],k) # Append word list. else: dict[v] = '"%s"' % (k,) dump_section('specialwords',dict) dump_section('replacements',self.replacements) dump_section('specialsections',self.specialsections) dict = {} for k,v in self.tags.items(): dict[k] = '%s|%s' % v dump_section('tags',dict) paragraphs.dump() lists.dump() blocks.dump() tables.dump() macros.dump() # Dump remaining sections. for k in self.sections.keys(): if not self.is_special_section(k): sys.stdout.write('[%s]%s' % (k,writer.newline)) for line in self.sections[k]: sys.stdout.write('%s%s' % (line,writer.newline)) sys.stdout.write(writer.newline) def subs_section(self,section,dict): '''Section glossary substitution from the document.glossary and 'dict'. the document.glossary. Lines containing undefinded glossary entries are deleted.''' if self.sections.has_key(section): return subs_glossary(self.sections[section],dict) else: warning('missing [%s] section' % (section,)) return () def parse_tags(self): '''Parse [tags] section entries into self.tags dictionary.''' dict = {} parse_entries(self.sections.get('tags',()),dict) for k,v in dict.items(): if not is_name(k): raise EAsciiDoc,'[tag] %s malformed' % (k,) if v is None: if self.tags.has_key(k): del self.tags[k] elif v == 'none': self.tags[k] = (None,None) else: mo = re.match(r'(?P.*)\|(?P.*)',v) if mo: self.tags[k] = (mo.group('stag'), mo.group('etag')) else: raise EAsciiDoc,'[tag] %s value malformed' % (k,) def tag(self,name): '''Returns (starttag,endtag) tuple named name from configuration file [tags] section. Raise error if not found''' if not self.tags.has_key(name): raise EAsciiDoc, 'missing tag "%s"' % (name,) return self.tags[name] def parse_specialsections(self): '''Parse specialsections section to self.specialsections dictionary.''' # TODO: This is virtually the same as parse_replacements() and should # be factored to single routine. dict = {} parse_entries(self.sections.get('specialsections',()),dict,1) for pat,sectname in dict.items(): pat = strip_quotes(pat) if not is_regexp(pat): raise EAsciiDoc,'[specialsections] entry "%s" ' \ 'is not a valid regular expression' % (pat,) if sectname is None: if self.specialsections.has_key(pat): del self.specialsections[pat] else: self.specialsections[pat] = sectname def parse_replacements(self): '''Parse replacements section into self.replacements dictionary.''' dict = {} #TODO: Deprecated if self.sections.has_key('substitutions'): parse_entries(self.sections.get('substitutions',()),dict,1) warning('[substitutions] deprecated, rename [replacements]') else: parse_entries(self.sections.get('replacements',()),dict,1) for pat,rep in dict.items(): # The search pattern and the replacement are regular expressions so # check them both. pat = strip_quotes(pat) if not is_regexp(pat): raise EAsciiDoc,'"%s" ([replacements] entry in %s) ' \ 'is not a valid regular expression' % (pat,self.fname) if rep is None: if self.replacements.has_key(pat): del self.replacements[pat] else: rep = strip_quotes(rep) if not is_regexp(pat): raise EAsciiDoc,'[replacements] entry "%s=%s" in %s ' \ 'is an invalid find regular expression combination' \ % (pat,rep,self.fname) self.replacements[pat] = rep def subs_replacements(self,s): '''Substitute patterns from self.replacements in 's'.''' result = s for pat,rep in self.replacements.items(): result = re.sub(pat, rep, result) return result def parse_specialwords(self): '''Parse special words section into self.specialwords dictionary.''' reo = re.compile(r'(?:\s|^)(".+?"|[^"\s]+)(?=\s|$)') for line in self.sections.get('specialwords',()): e = parse_entry(line) if not e: raise EAsciiDoc,'[specialwords] entry "%s" in %s is malformed' \ % (line,self.fname) name,wordlist = e if not is_name(name): raise EAsciiDoc,'[specialwords] name "%s" in %s is illegal' \ % (name,self.fname) if wordlist == '': warning('[specialwords] entry "%s" in %s is blank' % (name,self.fname)) if wordlist is None: # Undefine all words associated with 'name'. for k,v in self.specialwords.items(): if v == name: del self.specialwords[k] else: words = reo.findall(wordlist) for word in words: word = strip_quotes(word) if not is_regexp(word): raise EAsciiDoc,'"%s" (%s [specialwords] entry in %s)' \ 'is not a valid regular expression' \ % (word,name,self.fname) self.specialwords[word] = name def subs_specialchars(self,s): '''Perform special character substitution on string 's'.''' '''It may seem like a good idea to escape special characters with a '\' character, the reason we don't is because the escape character itself then has to be escaped and this makes including code listings problematic. Use the predefined {amp},{lt},{gt} glossary entries instead.''' result = '' for ch in s: result = result + self.specialchars.get(ch,ch) return result def subs_specialwords(self,s): '''Search for word patterns from self.specialwords in 's' and substitute using corresponding macro.''' result = s for word in self.specialwords.keys(): result = re.sub(word, _subs_specialwords, result) return result def section2tags(self,section,dict={}): '''Perform glossary substitution on 'section' using document glossary plus 'dict' glossary. Return tuple (stag,etag) containing pre and post | placeholder tags.''' if self.sections.has_key(section): body = self.sections[section] else: warning('missing [%s] section' % (section,)) body = () # Split macro body into start and end tag lists. stag = [] etag = [] in_stag = 1 for s in body: if in_stag: mo = re.match(r'(?P.*)\|(?P.*)',s) if mo: if mo.group('stag'): stag.append(mo.group('stag')) if mo.group('etag'): etag.append(mo.group('etag')) in_stag = 0 else: stag.append(s) else: etag.append(s) # Do glossary substitution last so {brkbar} can be used to escape |. stag = subs_glossary(stag,dict) etag = subs_glossary(etag,dict) return (stag,etag) #--------------------------------------------------------------------------- # Application code. #--------------------------------------------------------------------------- # Constants # --------- APP_DIR = None # This file's directory. USER_DIR = None # ~/.asciidoc # Globals # ------- document = Document() # The document being processed. config = Config() # Configuration file reader. reader = Reader() # Input stream line reader. writer = Writer() # Output stream line writer. paragraphs = Paragraphs() # Paragraph definitions. lists = Lists() # List definitions. blocks = DelimitedBlocks() # DelimitedBlock definitions. tables = Tables() # Table definitions. macros = Macros() # Macro definitions. def asciidoc(backend, doctype, confiles, infile, outfile, options): '''Convert AsciiDoc document to DocBook document of type doctype The AsciiDoc document is read from file object src the translated DocBook file written to file object dst.''' try: if doctype not in ('article','manpage','book'): raise EAsciiDoc,'illegal document type' if backend == 'linuxdoc' and doctype != 'article': raise EAsciiDoc,'%s %s documents are not supported' \ % (backend,doctype) document.backend = backend document.doctype = doctype document.init_glossary() # Set processing options. for o in options: if o == '-s': config.suppress_headers = 1 if o == '-v': config.verbose = 1 # Check the infile exists. if infile != '' and not os.path.isfile(infile): raise EAsciiDoc,'input file %s missing' % (infile,) if '-e' not in options: # Load global configuration files from asciidoc directory. config.load_all(APP_DIR) # Load configuration files from ~/.asciidoc if it exists. if USER_DIR is not None: config.load_all(USER_DIR) # Load configuration files from document directory. config.load_all(os.path.dirname(infile)) if infile != '': # Load implicit document specific configuration files if they exist. config.load(os.path.splitext(infile)[0] + '.conf') config.load(os.path.splitext(infile)[0] + '-' + backend + '.conf') # If user specified configuration file(s) overlay the defaults. if confiles: for conf in confiles: # First look in current working directory. if os.path.isfile(conf): config.load(conf) else: raise EAsciiDoc,'configuration file %s missing' % (conf,) document.init_glossary() # Add conf file. # Check configuration for consistency. config.check() # Build outfile name now all conf files have been read. if outfile is None: outfile = os.path.splitext(infile)[0] + '.' + backend if config.outfilesuffix: # Change file extension. outfile = os.path.splitext(outfile)[0] + config.outfilesuffix if '-c' in options: config.dump() else: reader.tabsize = config.tabsize reader.open(infile) try: writer.newline = config.newline writer.open(outfile) try: document.init_glossary() # Add file name related entries. document.translate() finally: writer.close() finally: reader.closefile() # Keep reader state for postmortem. except (KeyboardInterrupt, SystemExit): print except Exception,e: # Cleanup. if outfile and outfile != '' and os.path.isfile(outfile): os.unlink(outfile) # Build and print error description. msg = 'FAILED: ' if reader.cursor: msg = msg + "%s: line %d: " % (reader.cursor[0],reader.cursor[1]) if isinstance(e,EAsciiDoc): print_stderr(msg+str(e)) else: print_stderr(msg+'unexpected error:') print_stderr('-'*60) traceback.print_exc(file=sys.stderr) print_stderr('-'*60) sys.exit(1) def usage(msg=''): if msg: print_stderr(msg) print_stderr('Usage: asciidoc -b backend [-d doctype] [-g glossary-entry]') print_stderr(' [-e] [-n] [-s] [-f configfile] [-o outfile]') print_stderr(' [--help | -h] [--version] [-v] [ -c ]') print_stderr(' infile') def main(): # Locate the executable and configuration files directory. global APP_DIR,USER_DIR APP_DIR = os.path.dirname(realpath(sys.argv[0])) USER_DIR = os.environ.get('HOME') if USER_DIR is not None: USER_DIR = os.path.join(USER_DIR,'.asciidoc') if not os.path.isdir(USER_DIR): USER_DIR = None # Process command line options. import getopt opts,args = getopt.getopt(sys.argv[1:], 'b:cd:ef:g:hno:svw:', ['help','profile','version']) if len(args) > 1: usage() sys.exit(1) backend = None doctype = 'article' confiles = [] outfile = None options = [] prof = 0 for o,v in opts: if o in ('--help','-h'): print __doc__ sys.exit(0) if o == '--profile': prof = 1 if o == '--version': print_stderr('asciidoc version %s' % (VERSION,)) sys.exit(0) if o == '-b': backend = v if o == '-c': options.append('-c') if o == '-d': doctype = v if o == '-e': options.append('-e') if o == '-f': confiles.append(v) if o == '-n': o = '-g' v = 'section-numbers' if o == '-g': e = parse_entry(v) if not e: usage('Illegal -g %s option' % (v,)) sys.exit(1) k,v = e if v is None: if k[0] == '^': k = k[1:] else: v = '' config.cmd_gloss[k] = v if o == '-o': if v == '-': outfile = '' else: outfile = v if o == '-n': outfile = v if o == '-s': options.append('-s') if o == '-v': options.append('-v') if len(args) == 0 and len(opts) == 0: usage() sys.exit(1) if len(args) == 0: usage('No source file specified') sys.exit(1) if not backend: usage('No backend (-b) option specified') sys.exit(1) if args[0] == '-': infile = '' else: infile = args[0] if infile == '' and not outfile: outfile = '' # Convert in and out files to absolute paths. if infile != '': infile = os.path.abspath(infile) if outfile and outfile != '': outfile = os.path.abspath(outfile) # Do the work. if prof: import profile profile.run("asciidoc('%s','%s',(),'%s',None,())" % (backend,doctype,infile)) else: asciidoc(backend, doctype, confiles, infile, outfile, options) if __name__ == "__main__": try: main() except (KeyboardInterrupt, SystemExit): pass except: print_stderr("%s: unexpected exit status: %s" % (os.path.basename(sys.argv[0]), sys.exc_info()[1])) # Exit with previous sys.exit() status or zero if no sys.exit(). sys.exit(sys.exc_info()[1]) gss-1.0.2/doc/reference/0000755000000000000000000000000011663555057011775 500000000000000gss-1.0.2/doc/reference/gss-overrides.txt0000644000000000000000000000000011663554732015237 00000000000000gss-1.0.2/doc/reference/version.xml.in0000644000000000000000000000001211662452510014507 00000000000000@VERSION@ gss-1.0.2/doc/reference/Makefile.am0000644000000000000000000000712711662453236013753 00000000000000## Process this file with automake to produce Makefile.in # We require automake 1.6 at least. AUTOMAKE_OPTIONS = 1.6 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE=$(PACKAGE) # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml # Directories containing the source code. # gtk-doc will search all .c and .h files beneath these paths # for inline comments documenting functions and macros. # e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk DOC_SOURCE_DIR=$(top_srcdir)/lib # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS= # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS= # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml MKDB_OPTIONS=--xml-mode --output-format=xml # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS= # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS= # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS= # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB=$(top_srcdir)/lib/*.h CFILE_GLOB=$(top_srcdir)/lib/*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES= # Header files or dirs to ignore when scanning. Use base file/dir names # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code IGNORE_HFILES=internal.h k5internal.h protos.h checksum.h meta.h \ gettext.h string.h string.in.h unistd.h unistd.in.h c++defs.h \ stddef.in.h # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES= # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files= # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files= # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS= GTKDOC_LIBS= # This includes the standard gtk-doc make rules, copied by gtkdocize. include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST += # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt #DISTCLEANFILES += # Comment this out if you want 'make check' to test you doc status # and run some sanity checks if ENABLE_GTK_DOC TESTS_ENVIRONMENT = cd $(srcdir) && \ DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \ SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) #TESTS = $(GTKDOC_CHECK) endif -include $(top_srcdir)/git.mk gss-1.0.2/doc/reference/gss-docs.sgml0000644000000000000000000000346611662453256014331 00000000000000 ]> GNU Generic Security Service (GSS) API Reference Manual for GNU GSS &version;. The latest version of this documentation can be found on-line at https://www.gnu.org/software/gss/reference/. GNU Generic Security Service (GSS) API Reference Manual GSS is an implementation of the Generic Security Service Application Program Interface (GSS-API). GSS-API is used by network servers to provide security services, e.g., to authenticate SMTP/IMAP clients against SMTP/IMAP servers. GSS consists of a library and a manual. GSS is developed for the GNU/Linux system, but runs on over 20 platforms including most major Unix platforms and Windows, and many kind of devices including iPAQ handhelds and S/390 mainframes. GSS is a GNU project, and is licensed under the GNU General Public License version 3 or later. API Index gss-1.0.2/doc/reference/gss.types0000644000000000000000000000000011663555057013565 00000000000000gss-1.0.2/doc/reference/gss.pdf0000644000000000000000000142762511663555057013225 00000000000000%PDF-1.4 % 1 0 obj << /S /GoTo /D (chapter.1) >> endobj 4 0 obj (GNU Generic Security Service \(GSS\) API Reference Manual) endobj 5 0 obj << /S /GoTo /D (section.1.1) >> endobj 8 0 obj (gss) endobj 9 0 obj << /S /GoTo /D (section.1.2) >> endobj 12 0 obj (api) endobj 13 0 obj << /S /GoTo /D (section.1.3) >> endobj 16 0 obj (ext) endobj 17 0 obj << /S /GoTo /D (section.1.4) >> endobj 20 0 obj (krb5) endobj 21 0 obj << /S /GoTo /D (section.1.5) >> endobj 24 0 obj (krb5-ext) endobj 25 0 obj << /S /GoTo /D (chapter.2) >> endobj 28 0 obj (Index) endobj 29 0 obj << /S /GoTo /D [30 0 R /FitH ] >> endobj 32 0 obj << /Length 292 /Filter /FlateDecode >> stream xڝAO0 >;iT a2TiD@{ܦ '%Ghٕ%vlit%x6hJh6\TwOY--ǡkc{ϣ޻6&L٪E93k{qqvֻqB"1x`-rՍ>u٨WŲ:t@ihj"ȝD@y>&,jA4~DG{ .o|JG I Yδ!) aFdbь9V֐kZ5fd7Dჱ endstream endobj 30 0 obj << /Type /Page /Contents 32 0 R /Resources 31 0 R /MediaBox [0 0 595.276 841.89] /Parent 39 0 R >> endobj 33 0 obj << /D [30 0 R /XYZ -16.307 900.716 null] >> endobj 36 0 obj << /D [30 0 R /XYZ 56.693 759.068 null] >> endobj 37 0 obj << /D [30 0 R /XYZ 56.693 759.068 null] >> endobj 31 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 42 0 obj << /Length 1046 /Filter /FlateDecode >> stream xřMs683]|&-N&!ufbwiɿ Q#rU'J$,%@*Pb:hG~o2:t JE-{o1ZUMW]\}z\ey}~QVMK:@d6&/gbazn~tu D.9d@gVFwjN GM;cA IS(Go*QAյDG4R$\flt( 1 q҃=ĠYY'ꎝ&7WWŤjkrL(!ҏ]9a#1')Tʟ4H)FN{pV*HFګfOYX*z(E*hJAd4"Od`9^ȕ32W8+UM̆clmggwStBj0pa݉޲]񆧻kPUK!ސBwb4˽\Z{d^%V"z$(e0Im#c0J 1C)0% F )0E9^QbPS(2 DQƑkxSO(vHD endstream endobj 41 0 obj << /Type /Page /Contents 42 0 R /Resources 40 0 R /MediaBox [0 0 595.276 841.89] /Parent 39 0 R >> endobj 43 0 obj << /D [41 0 R /XYZ -11.232 900.716 null] >> endobj 40 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F56 44 0 R >> /ProcSet [ /PDF /Text ] >> endobj 54 0 obj << /Length 471 /Filter /FlateDecode >> stream xM0sL63E6J"v]X=Wխ8Q)ylyP$/kॷl:II2-}LPZEX?48k~TO>bM $7:܆&㲷au׮(ɪVZawZU|O(F@ 0VZyaE R~v`%+wH>$ Rama(EjZCZqb.Vޓ2Axn 3t݇(O7ԣB?.X VJQ9{ZGXNzCK!v̩̄)ͦ5E1#@ړ0ՈoU3gbWImjf~ j}&z=|6f e7Gfԗ:D}ғc'so{> endobj 45 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [560.952 589.813 567.925 598.67] /A << /S /GoTo /D (chapter.1) >> >> endobj 46 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [560.952 571.88 567.925 580.627] /A << /S /GoTo /D (section.1.1) >> >> endobj 47 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [560.952 553.948 567.925 562.695] /A << /S /GoTo /D (section.1.2) >> >> endobj 48 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [555.97 536.015 567.925 544.762] /A << /S /GoTo /D (section.1.3) >> >> endobj 49 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [555.97 517.982 567.925 526.829] /A << /S /GoTo /D (section.1.4) >> >> endobj 50 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [555.97 500.05 567.925 508.896] /A << /S /GoTo /D (section.1.5) >> >> endobj 51 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [555.97 472.134 567.925 481.111] /A << /S /GoTo /D (chapter.2) >> >> endobj 55 0 obj << /D [53 0 R /XYZ -16.307 900.716 null] >> endobj 56 0 obj << /D [53 0 R /XYZ 56.693 614.61 null] >> endobj 52 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F60 57 0 R >> /ProcSet [ /PDF /Text ] >> endobj 61 0 obj << /Length 1276 /Filter /FlateDecode >> stream xڥWs8_glcz2&{$JbꏜP߳ʉAjwgYF./?%#j%.T$! c2]p$$ .Milo}vlnpIv9‡TKWwk6e'v4`' BkRTiMFA&N3\t}p"$֜*&ȼ"<:΂HΨ|d2x7`*TF,AS^Mkj{,V %=@CRGQ! 栴AH`ԡ.4ML-A "@Fʛ:Y+*sL٦mVyrDvmcDOb3|ɳNu7W%^v>FŃNO9yۘ~͞NdiGs X6lVn?g qv/E %+>NAd־k\OgWc j(4+$oLx{5Ud 9\#o).y6qZ. t&: {i`+`"gQ^m,於ljcR d n5*œz[z6*'*@V"+W-,O+/HQUʾzd+x$v; χRk/#LBͺKr yb8*oџ̼}qtC9iJ>v-vDg5L6,:ԁ.`][BAzp@+X՜K_Bh7{(9]D ؗ8˄mKxW%RwaH!<ƽ::*|aY H XvrT\}_U_"Dn_^C?L3]R4IwܦYGS;00:.G@HcN.G+Ѥ6dkNS'Qw*wq]~憾.X7!A;E+I{OW?n]*f t7g=~)gAjʕ`8Z;иBT̪gǬ]#5mMEttIHD /b֕ZbwʀBcWx+J|m[gϖ'S ~`f91^긣1ʔ?/K4 endstream endobj 60 0 obj << /Type /Page /Contents 61 0 R /Resources 59 0 R /MediaBox [0 0 595.276 841.89] /Parent 39 0 R /Annots [ 58 0 R ] >> endobj 58 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [448.646 135.091 532.381 145.995] /A << /S /GoTo /D (gss-check-version) >> >> endobj 62 0 obj << /D [60 0 R /XYZ -16.307 900.716 null] >> endobj 2 0 obj << /D [60 0 R /XYZ 56.693 759.068 null] >> endobj 63 0 obj << /D [60 0 R /XYZ 56.693 533.913 null] >> endobj 6 0 obj << /D [60 0 R /XYZ 56.693 431.287 null] >> endobj 64 0 obj << /D [60 0 R /XYZ 56.693 394.29 null] >> endobj 65 0 obj << /D [60 0 R /XYZ 56.693 337.258 null] >> endobj 67 0 obj << /D [60 0 R /XYZ 56.693 231.209 null] >> endobj 68 0 obj << /D [60 0 R /XYZ 56.693 204.851 null] >> endobj 69 0 obj << /D [60 0 R /XYZ 56.693 179.489 null] >> endobj 70 0 obj << /D [60 0 R /XYZ 56.693 173.512 null] >> endobj 71 0 obj << /D [60 0 R /XYZ 56.693 176.401 null] >> endobj 59 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 75 0 obj << /Length 1252 /Filter /FlateDecode >> stream xŘ[o8%HĚ'ڡlG-0@WZuF(dm$NB- @"]>_I4֊)4|Da"r]4{ݹ7$N,Ld`0ؼ9;A$ioA)RZ޵GEjv/,( %ţb5jH$)6|~(#"#WSCy'Axa=kΑ3`ԧƟD!lfҰU +Xl( si1՟fhX,d#0.FAOvl`̒уIMIp=&םa8 &pRIi499ٽ4Q J&iB= 7chB#&Dh"3HKJiRʀ" @)!3iw@ Pr;Pd(x|^)j5qx`X3c鞏,%dEr=uVYً`aa}X$qcWE]c , ` QEˍ8qW b* zU>A*QEI5E}UqT^g |4)?&''&kT>MuT8q^ |+FS9`bWr~[dDV0MxxL'kc^d $}e$H@t=aڂ$~XEԯII9 <0b'FAS*S O]t$ʗlᣥӊFJ?* srԩ>6/^?x[,WkXn=<* Vzz=o^GdRyY|1 nV g_*?0m^ǿV]OɚD}mݴڣfPۻ](~wo2h}ku.[GŹv2 \}>Ơa_[ tU ҿ,Y endstream endobj 74 0 obj << /Type /Page /Contents 75 0 R /Resources 73 0 R /MediaBox [0 0 595.276 841.89] /Parent 39 0 R >> endobj 76 0 obj << /D [74 0 R /XYZ -11.232 900.716 null] >> endobj 77 0 obj << /D [74 0 R /XYZ 56.693 739.087 null] >> endobj 78 0 obj << /D [74 0 R /XYZ 56.693 733.109 null] >> endobj 79 0 obj << /D [74 0 R /XYZ 56.693 735.998 null] >> endobj 80 0 obj << /D [74 0 R /XYZ 56.693 643.997 null] >> endobj 81 0 obj << /D [74 0 R /XYZ 56.693 638.019 null] >> endobj 82 0 obj << /D [74 0 R /XYZ 56.693 640.908 null] >> endobj 83 0 obj << /D [74 0 R /XYZ 56.693 548.907 null] >> endobj 84 0 obj << /D [74 0 R /XYZ 56.693 542.929 null] >> endobj 85 0 obj << /D [74 0 R /XYZ 56.693 545.819 null] >> endobj 86 0 obj << /D [74 0 R /XYZ 56.693 453.817 null] >> endobj 87 0 obj << /D [74 0 R /XYZ 56.693 447.84 null] >> endobj 88 0 obj << /D [74 0 R /XYZ 56.693 450.729 null] >> endobj 10 0 obj << /D [74 0 R /XYZ 56.693 383.45 null] >> endobj 89 0 obj << /D [74 0 R /XYZ 56.693 346.454 null] >> endobj 90 0 obj << /D [74 0 R /XYZ 56.693 288.245 null] >> endobj 73 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 93 0 obj << /Length 711 /Filter /FlateDecode >> stream xڥWMo0+,9 'cL-UnVH_F/ f`0[}Gh A>w=|6j1ooT=]-^lV=bi3(dQ$,B遃#M]O猨C~^{Lws?tr}\`HGl<.ۦa7'rx`d.16S2t) endstream endobj 92 0 obj << /Type /Page /Contents 93 0 R /Resources 91 0 R /MediaBox [0 0 595.276 841.89] /Parent 39 0 R >> endobj 94 0 obj << /D [92 0 R /XYZ -16.307 900.716 null] >> endobj 91 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 97 0 obj << /Length 982 /Filter /FlateDecode >> stream xWےH}+*b_7B'Zvmٝ`tUorQFOZT̓25"hԻzo4Ll>E >:2d+:Y\K}\D$0(8LVa oD##ׅdVfvi7+hQorPSRuSDM"F7ޔ?ezO=$#HA)cJ(>}&h {,,H +oۻ8ZgS5Lh䇥X4r]5s۱scMjZCz[̏ k)w j2넹.׳E7=$=hݙ O}" <=gtָǙ!*; Gz?5_8{7ۿg@ʂm+p1cl]7P8]tU;t<X8.o\PodǘNxFҿ(:I> endobj 98 0 obj << /D [96 0 R /XYZ -11.232 900.716 null] >> endobj 95 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 102 0 obj << /Length 928 /Filter /FlateDecode >> stream xX]o0}WLŵ؎MP'u_`h4َ $-\[A`w;rP0@ʀ]20ݞCY_$"c ,JH?A@=pfQa 9!7_.uX")̮$ BRNc RA@lRD0":ex`@2rRhֹA`TF>7+g`)tvPq9&ybDT>_YH1%2FՎ!||B%p*d0չQj[3"rmӞVAQi.uV#1P*c6LFS:U^z"dXHD2_"FP^d+*Jx6H>p"|{U\ޱ {;VdSFY`%n9LlW)2D`U6ڡ6dL.2K6mxa#> endobj 103 0 obj << /D [101 0 R /XYZ -16.307 900.716 null] >> endobj 100 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 106 0 obj << /Length 1053 /Filter /FlateDecode >> stream xXK6W8N-Z *Lm6dfb@vq~}ZV/¢s6^* _is&54)@i3.ݼ RojEnC;P%-|IppXd+i sp=6P"-ŵ+8J#>FiR)s2|&\*rߝ l\w{6YOG%+9Q15rUG ,ӡ]G@oѴR7(27MǹPyہt.ʟs/s_Faj44D50쩊Xig:yJV GvAZm-mY4!2xp*m}iTShV"̛x4Y]7z,xfwMNMYE"U6)GS/p,̝YĜ:iz~  "pD^'!@T8wa0s;˺ !E04h' /&˫]F2[TN39^,UIi7}T婯S> endobj 107 0 obj << /D [105 0 R /XYZ -11.232 900.716 null] >> endobj 104 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 110 0 obj << /Length 936 /Filter /FlateDecode >> stream x͘Ms0:LJ  h81zHĒK˯g%)·NSbyW~J6ASDdt'(s9(.v4з_ǎOιeڋKVenHN|r~y ?=V, endstream endobj 109 0 obj << /Type /Page /Contents 110 0 R /Resources 108 0 R /MediaBox [0 0 595.276 841.89] /Parent 99 0 R >> endobj 111 0 obj << /D [109 0 R /XYZ -16.307 900.716 null] >> endobj 108 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 114 0 obj << /Length 1065 /Filter /FlateDecode >> stream xڽr6z t#uJd֎&i"yf8Dy8)E"{ERrJ6H?p< z@MG?GoI,)4 ŰPF5ZO&x%>^'hku;^EDl:< (V"vM2ɖHȀ$ŝ$5V֢@bKQh3~SF7їH*đ+iL",A-3#>H}q- *S )C&4z(B( s :m`aZf.Kü[y 5cerwa')guj;d4*LKHq͕LUKu)rb,A;lvk[#L7Daˑ\RZ~,DTkxJ[v1~?#Vֱ̇&63KxM>Z XV3Wàr84{z[l&g^)8k>fi P /a|IQ{|:;E(9Q9EHЃ9)b;E(pJYIR%Lv,X(ٮf͂k(˸A\Ac3P3vP) 4[@+ء-Aّ/]gWl$(DDߓeo=`&P5) MkHgYk٦ {9 mơrj0[m&qWz X|8<ơ 0lSg#V>YKx}s{3 ^M܇͎r>T3LV|?žH1 U>WxD^8aJm]#e15":0Ug~~ﰽ 0P U`CnW;]j~]ꋴ>w}lw:~2 `_ؒ endstream endobj 113 0 obj << /Type /Page /Contents 114 0 R /Resources 112 0 R /MediaBox [0 0 595.276 841.89] /Parent 99 0 R >> endobj 115 0 obj << /D [113 0 R /XYZ -11.232 900.716 null] >> endobj 116 0 obj << /D [113 0 R /XYZ 56.693 656.805 null] >> endobj 117 0 obj << /D [113 0 R /XYZ 56.693 630.448 null] >> endobj 118 0 obj << /D [113 0 R /XYZ 56.693 605.086 null] >> endobj 119 0 obj << /D [113 0 R /XYZ 56.693 599.108 null] >> endobj 120 0 obj << /D [113 0 R /XYZ 56.693 601.998 null] >> endobj 121 0 obj << /D [113 0 R /XYZ 56.693 539.884 null] >> endobj 122 0 obj << /D [113 0 R /XYZ 56.693 533.906 null] >> endobj 123 0 obj << /D [113 0 R /XYZ 56.693 536.796 null] >> endobj 124 0 obj << /D [113 0 R /XYZ 56.693 474.682 null] >> endobj 125 0 obj << /D [113 0 R /XYZ 56.693 468.705 null] >> endobj 126 0 obj << /D [113 0 R /XYZ 56.693 471.594 null] >> endobj 127 0 obj << /D [113 0 R /XYZ 56.693 409.48 null] >> endobj 128 0 obj << /D [113 0 R /XYZ 56.693 385.115 null] >> endobj 129 0 obj << /D [113 0 R /XYZ 56.693 379.137 null] >> endobj 130 0 obj << /D [113 0 R /XYZ 56.693 382.026 null] >> endobj 131 0 obj << /D [113 0 R /XYZ 56.693 319.913 null] >> endobj 132 0 obj << /D [113 0 R /XYZ 56.693 313.935 null] >> endobj 133 0 obj << /D [113 0 R /XYZ 56.693 316.825 null] >> endobj 134 0 obj << /D [113 0 R /XYZ 56.693 254.711 null] >> endobj 135 0 obj << /D [113 0 R /XYZ 56.693 248.733 null] >> endobj 136 0 obj << /D [113 0 R /XYZ 56.693 251.623 null] >> endobj 137 0 obj << /D [113 0 R /XYZ 56.693 189.509 null] >> endobj 138 0 obj << /D [113 0 R /XYZ 56.693 183.532 null] >> endobj 139 0 obj << /D [113 0 R /XYZ 56.693 186.421 null] >> endobj 140 0 obj << /D [113 0 R /XYZ 56.693 124.307 null] >> endobj 141 0 obj << /D [113 0 R /XYZ 56.693 118.33 null] >> endobj 142 0 obj << /D [113 0 R /XYZ 56.693 121.219 null] >> endobj 112 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F94 66 0 R /F52 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 145 0 obj << /Length 1032 /Filter /FlateDecode >> stream xڽMo8br~qص][=,"(Xc;@R,@.E pJ|J<{sCJ,Z? :AKD >֛+$5[龾8?O\~/Op_y+xmo_<y/?|+`I ^;? Fz?g~?6ե [6Öt1܋pA-۳ҘaK_Q ,IGv,@Avss1%rdR 65LFo/~bف$ؑPേ[qM"v֗K(ґ  nan5I>/9]84y!\kl7kX,dǡ-v]@6Y?ovlkl܄Ie l;7jsx;w?3t0+#`Ə9V0ʳ vm۸# بr!rS 8T6~9\J&#X`t2{;H6*Xk^ MB/;uڊߍԊstԢsle^8jRm;35Nj)hEv}wv.恑]$̂!Ɗf$pI6meқ0ivٯ\vH`AZHI(z㘍;,a5)6kt}\^&9v;۱.> endobj 146 0 obj << /D [144 0 R /XYZ -16.307 900.716 null] >> endobj 147 0 obj << /D [144 0 R /XYZ 56.693 739.087 null] >> endobj 148 0 obj << /D [144 0 R /XYZ 56.693 733.604 null] >> endobj 149 0 obj << /D [144 0 R /XYZ 56.693 736.494 null] >> endobj 150 0 obj << /D [144 0 R /XYZ 56.693 675.584 null] >> endobj 151 0 obj << /D [144 0 R /XYZ 56.693 670.102 null] >> endobj 152 0 obj << /D [144 0 R /XYZ 56.693 672.991 null] >> endobj 153 0 obj << /D [144 0 R /XYZ 56.693 612.082 null] >> endobj 154 0 obj << /D [144 0 R /XYZ 56.693 606.6 null] >> endobj 155 0 obj << /D [144 0 R /XYZ 56.693 609.489 null] >> endobj 156 0 obj << /D [144 0 R /XYZ 56.693 548.58 null] >> endobj 157 0 obj << /D [144 0 R /XYZ 56.693 543.098 null] >> endobj 158 0 obj << /D [144 0 R /XYZ 56.693 545.987 null] >> endobj 159 0 obj << /D [144 0 R /XYZ 56.693 485.077 null] >> endobj 160 0 obj << /D [144 0 R /XYZ 56.693 479.595 null] >> endobj 161 0 obj << /D [144 0 R /XYZ 56.693 482.485 null] >> endobj 162 0 obj << /D [144 0 R /XYZ 56.693 421.575 null] >> endobj 163 0 obj << /D [144 0 R /XYZ 56.693 416.093 null] >> endobj 164 0 obj << /D [144 0 R /XYZ 56.693 418.982 null] >> endobj 165 0 obj << /D [144 0 R /XYZ 56.693 358.073 null] >> endobj 166 0 obj << /D [144 0 R /XYZ 56.693 352.591 null] >> endobj 167 0 obj << /D [144 0 R /XYZ 56.693 355.48 null] >> endobj 168 0 obj << /D [144 0 R /XYZ 56.693 294.571 null] >> endobj 169 0 obj << /D [144 0 R /XYZ 56.693 289.089 null] >> endobj 170 0 obj << /D [144 0 R /XYZ 56.693 291.978 null] >> endobj 171 0 obj << /D [144 0 R /XYZ 56.693 231.068 null] >> endobj 172 0 obj << /D [144 0 R /XYZ 56.693 225.586 null] >> endobj 173 0 obj << /D [144 0 R /XYZ 56.693 228.475 null] >> endobj 174 0 obj << /D [144 0 R /XYZ 56.693 167.566 null] >> endobj 175 0 obj << /D [144 0 R /XYZ 56.693 162.084 null] >> endobj 176 0 obj << /D [144 0 R /XYZ 56.693 164.973 null] >> endobj 177 0 obj << /D [144 0 R /XYZ 56.693 104.064 null] >> endobj 178 0 obj << /D [144 0 R /XYZ 56.693 98.582 null] >> endobj 179 0 obj << /D [144 0 R /XYZ 56.693 101.471 null] >> endobj 143 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 182 0 obj << /Length 991 /Filter /FlateDecode >> stream xڽMo8zqagH?i[9nRhb}GY `.eQ/_s$/ĢXW UVU:QKQ|,wg`h^CwQ77x~h?`Q٧;QNo}hM_' ϖn-C-I39?y5H|]U!Yi.÷'|-Ig _E]Q쨞 槮g7|k"mliT, ThiSDZO@) c;W79LeeP!6Tt2P)wꂳ|Eto>,*<=4N;#{hEbA*9D teZm1h-y 6σ6 0hU(h5pHH:P˙#jogTX*mmAh)xδeŻl)+ 1% BrNjcrjU#L^3Iex=QQⵅp \ g.fu}|h8.+G!Ő6;q(IBC~VSAF3$s[ZEdtږcX?\̂D[0/ܽ<빃IōAEN LnDÚ cQQmvZm gZ,C-}𨜥T 4/1F32W=U9y mvWQ2.aښ"xi1j V>"VE/+T(~&fqE' ]!\/5KyQe9fh-J " t)BkA^ WSCJiQS-ag&e*u+xηq+u,GoAxp-tp9]DG=YBWQOc endstream endobj 181 0 obj << /Type /Page /Contents 182 0 R /Resources 180 0 R /MediaBox [0 0 595.276 841.89] /Parent 217 0 R >> endobj 183 0 obj << /D [181 0 R /XYZ -11.232 900.716 null] >> endobj 184 0 obj << /D [181 0 R /XYZ 56.693 739.087 null] >> endobj 185 0 obj << /D [181 0 R /XYZ 56.693 733.604 null] >> endobj 186 0 obj << /D [181 0 R /XYZ 56.693 736.494 null] >> endobj 187 0 obj << /D [181 0 R /XYZ 56.693 675.584 null] >> endobj 188 0 obj << /D [181 0 R /XYZ 56.693 670.102 null] >> endobj 189 0 obj << /D [181 0 R /XYZ 56.693 672.991 null] >> endobj 190 0 obj << /D [181 0 R /XYZ 56.693 612.082 null] >> endobj 191 0 obj << /D [181 0 R /XYZ 56.693 606.6 null] >> endobj 192 0 obj << /D [181 0 R /XYZ 56.693 609.489 null] >> endobj 193 0 obj << /D [181 0 R /XYZ 56.693 548.58 null] >> endobj 194 0 obj << /D [181 0 R /XYZ 56.693 543.098 null] >> endobj 195 0 obj << /D [181 0 R /XYZ 56.693 545.987 null] >> endobj 196 0 obj << /D [181 0 R /XYZ 56.693 485.077 null] >> endobj 197 0 obj << /D [181 0 R /XYZ 56.693 479.595 null] >> endobj 198 0 obj << /D [181 0 R /XYZ 56.693 482.485 null] >> endobj 199 0 obj << /D [181 0 R /XYZ 56.693 421.575 null] >> endobj 200 0 obj << /D [181 0 R /XYZ 56.693 416.093 null] >> endobj 201 0 obj << /D [181 0 R /XYZ 56.693 418.982 null] >> endobj 202 0 obj << /D [181 0 R /XYZ 56.693 358.073 null] >> endobj 203 0 obj << /D [181 0 R /XYZ 56.693 352.591 null] >> endobj 204 0 obj << /D [181 0 R /XYZ 56.693 355.48 null] >> endobj 205 0 obj << /D [181 0 R /XYZ 56.693 294.571 null] >> endobj 206 0 obj << /D [181 0 R /XYZ 56.693 289.089 null] >> endobj 207 0 obj << /D [181 0 R /XYZ 56.693 291.978 null] >> endobj 208 0 obj << /D [181 0 R /XYZ 56.693 231.068 null] >> endobj 209 0 obj << /D [181 0 R /XYZ 56.693 225.586 null] >> endobj 210 0 obj << /D [181 0 R /XYZ 56.693 228.475 null] >> endobj 211 0 obj << /D [181 0 R /XYZ 56.693 167.566 null] >> endobj 212 0 obj << /D [181 0 R /XYZ 56.693 162.084 null] >> endobj 213 0 obj << /D [181 0 R /XYZ 56.693 164.973 null] >> endobj 214 0 obj << /D [181 0 R /XYZ 56.693 104.064 null] >> endobj 215 0 obj << /D [181 0 R /XYZ 56.693 98.582 null] >> endobj 216 0 obj << /D [181 0 R /XYZ 56.693 101.471 null] >> endobj 180 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 220 0 obj << /Length 975 /Filter /FlateDecode >> stream xڽMo7+b 98*U]7-u` P!iYH`pOj+ΣKPErռxŠZ=)GyhQXܾ"E6E=|<g.EJV?DW:2fw7CSa?_y!PL/zbN 35׫eBPiR@==m mO4'?ա#)6j[^7Vȯc"Qe1$gt*1DӑhDO0ƾwi/a DZn3){)bfGwCro>E#uL+p61]r9C I; ,@2:m5d-WC6_lQdX0!_s)`֞$+ `u9W-< QY,E՘M1[,vYAl ?Y詥L8v jYcL]JRzGIB` jXJszEdoaV+'.g.rkY(TC6_lQhG@Cks)p'VleNOjQq=_lqf!V 3V [[#lgwwUﷳe.2T^cQp2M[,v^c8.֡wH!_Fv,o,OvB0%ŰI2hŎBK5`!is!XW_'͕J1D -;,z+=ӝr)@]&ysb 86:.T> endobj 221 0 obj << /D [219 0 R /XYZ -16.307 900.716 null] >> endobj 222 0 obj << /D [219 0 R /XYZ 56.693 739.087 null] >> endobj 223 0 obj << /D [219 0 R /XYZ 56.693 733.604 null] >> endobj 224 0 obj << /D [219 0 R /XYZ 56.693 736.494 null] >> endobj 225 0 obj << /D [219 0 R /XYZ 56.693 675.584 null] >> endobj 226 0 obj << /D [219 0 R /XYZ 56.693 670.102 null] >> endobj 227 0 obj << /D [219 0 R /XYZ 56.693 672.991 null] >> endobj 228 0 obj << /D [219 0 R /XYZ 56.693 612.082 null] >> endobj 229 0 obj << /D [219 0 R /XYZ 56.693 606.6 null] >> endobj 230 0 obj << /D [219 0 R /XYZ 56.693 609.489 null] >> endobj 231 0 obj << /D [219 0 R /XYZ 56.693 548.58 null] >> endobj 232 0 obj << /D [219 0 R /XYZ 56.693 543.098 null] >> endobj 233 0 obj << /D [219 0 R /XYZ 56.693 545.987 null] >> endobj 234 0 obj << /D [219 0 R /XYZ 56.693 485.077 null] >> endobj 235 0 obj << /D [219 0 R /XYZ 56.693 479.595 null] >> endobj 236 0 obj << /D [219 0 R /XYZ 56.693 482.485 null] >> endobj 237 0 obj << /D [219 0 R /XYZ 56.693 421.575 null] >> endobj 238 0 obj << /D [219 0 R /XYZ 56.693 416.093 null] >> endobj 239 0 obj << /D [219 0 R /XYZ 56.693 418.982 null] >> endobj 240 0 obj << /D [219 0 R /XYZ 56.693 358.073 null] >> endobj 241 0 obj << /D [219 0 R /XYZ 56.693 352.591 null] >> endobj 242 0 obj << /D [219 0 R /XYZ 56.693 355.48 null] >> endobj 243 0 obj << /D [219 0 R /XYZ 56.693 294.571 null] >> endobj 244 0 obj << /D [219 0 R /XYZ 56.693 289.089 null] >> endobj 245 0 obj << /D [219 0 R /XYZ 56.693 291.978 null] >> endobj 246 0 obj << /D [219 0 R /XYZ 56.693 231.068 null] >> endobj 247 0 obj << /D [219 0 R /XYZ 56.693 225.586 null] >> endobj 248 0 obj << /D [219 0 R /XYZ 56.693 228.475 null] >> endobj 249 0 obj << /D [219 0 R /XYZ 56.693 167.566 null] >> endobj 250 0 obj << /D [219 0 R /XYZ 56.693 162.084 null] >> endobj 251 0 obj << /D [219 0 R /XYZ 56.693 164.973 null] >> endobj 252 0 obj << /D [219 0 R /XYZ 56.693 104.064 null] >> endobj 253 0 obj << /D [219 0 R /XYZ 56.693 98.582 null] >> endobj 254 0 obj << /D [219 0 R /XYZ 56.693 101.471 null] >> endobj 218 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 257 0 obj << /Length 1083 /Filter /FlateDecode >> stream xڽZ]o6}ׯ XX^Nx`C[-sŰ+^-C@"/Ox9,=lw(H3f$79P\Y6Az{r*Qt"_'(,7W˿擼(P F#jW{2^we [=#0G* i+N{YyW6LIM(04xŬnd't q6J~KDeuML9^(;ϺYz{ynVPEԀ)nfV).)+G0\f{2g-$h}=\j EU߬bcJev$rTkT&g5n ݚ"__ϴߩ)a mKt!\5Ijuv-Wm4tjZ0m!+JFm%?8[t(k)[=sm|ge(bm-P<Ԩvs{qokFD M葼PF@-~6 #/3ڼJ> izk U#2xܯ~ f+B8/})/n"Jx٨?n W[{8bZ0mdQh=ٟ=2}m鏢2**:o 4S@5~B6+@8H۞JQ[6jߣEQ@1$Ȳu {t<^D!h?L`U:TP^BX*A).?Mev6L{t0j [:G1AZK6 P`jI ;S&-CyOTl<8$9pn[?~J$%rp.6@s)}> endobj 258 0 obj << /D [256 0 R /XYZ -11.232 900.716 null] >> endobj 259 0 obj << /D [256 0 R /XYZ 56.693 739.087 null] >> endobj 260 0 obj << /D [256 0 R /XYZ 56.693 733.604 null] >> endobj 261 0 obj << /D [256 0 R /XYZ 56.693 736.494 null] >> endobj 262 0 obj << /D [256 0 R /XYZ 56.693 675.584 null] >> endobj 263 0 obj << /D [256 0 R /XYZ 56.693 670.102 null] >> endobj 264 0 obj << /D [256 0 R /XYZ 56.693 672.991 null] >> endobj 265 0 obj << /D [256 0 R /XYZ 56.693 612.082 null] >> endobj 266 0 obj << /D [256 0 R /XYZ 56.693 606.6 null] >> endobj 267 0 obj << /D [256 0 R /XYZ 56.693 609.489 null] >> endobj 268 0 obj << /D [256 0 R /XYZ 56.693 548.58 null] >> endobj 269 0 obj << /D [256 0 R /XYZ 56.693 543.098 null] >> endobj 270 0 obj << /D [256 0 R /XYZ 56.693 545.987 null] >> endobj 271 0 obj << /D [256 0 R /XYZ 56.693 485.077 null] >> endobj 272 0 obj << /D [256 0 R /XYZ 56.693 479.595 null] >> endobj 273 0 obj << /D [256 0 R /XYZ 56.693 482.485 null] >> endobj 274 0 obj << /D [256 0 R /XYZ 56.693 421.575 null] >> endobj 275 0 obj << /D [256 0 R /XYZ 56.693 416.093 null] >> endobj 276 0 obj << /D [256 0 R /XYZ 56.693 418.982 null] >> endobj 277 0 obj << /D [256 0 R /XYZ 56.693 358.073 null] >> endobj 278 0 obj << /D [256 0 R /XYZ 56.693 352.591 null] >> endobj 279 0 obj << /D [256 0 R /XYZ 56.693 355.48 null] >> endobj 280 0 obj << /D [256 0 R /XYZ 56.693 294.571 null] >> endobj 281 0 obj << /D [256 0 R /XYZ 56.693 289.089 null] >> endobj 282 0 obj << /D [256 0 R /XYZ 56.693 291.978 null] >> endobj 283 0 obj << /D [256 0 R /XYZ 56.693 231.068 null] >> endobj 284 0 obj << /D [256 0 R /XYZ 56.693 225.586 null] >> endobj 285 0 obj << /D [256 0 R /XYZ 56.693 228.475 null] >> endobj 286 0 obj << /D [256 0 R /XYZ 56.693 167.566 null] >> endobj 287 0 obj << /D [256 0 R /XYZ 56.693 162.084 null] >> endobj 288 0 obj << /D [256 0 R /XYZ 56.693 164.973 null] >> endobj 289 0 obj << /D [256 0 R /XYZ 56.693 104.064 null] >> endobj 290 0 obj << /D [256 0 R /XYZ 56.693 98.582 null] >> endobj 291 0 obj << /D [256 0 R /XYZ 56.693 101.471 null] >> endobj 255 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 294 0 obj << /Length 1072 /Filter /FlateDecode >> stream xř]o6+ƾCrԒ]aH mȲWK1),5в/G/)Q{&ب&뽺FGBM}-ihm^!PҔ |~.G,7EηpcqYȒQ%m%ro@E_EYS/z* nb7BϽޱwg~fKe#K{z;AS{'MWwUr=p?PklgKP ɢL*nfV).IL#.A3ɽl_W %*(8;T#UC6Xp/}y]>8_UgŨGM_Ӊ..'YI)DB< qH7:x<&g,ih+qkq150n͞P, %#p[؞zyz r)I@1lLj66\CRF9z(QnNgG(˿}ͷflϹVn zPwA6R֠5Á˷YZ@V~$r"j +ħSptISBkm4[gkK woA#\4kamιQ8?G{̵): 9H=W< =TՊezߴ @|[e!_D>l 䅣hlC1"/^{E$l}(uWB ~fC "ͅ;A2+l>}:_ JH,Z JxM? p5.ڃ--xZvN)YRxW6pv,h.N޺ :A85b>$ߘn\ĝ@S:Y5Ŵomń6PtWN&q|__IJ(U<*oճzAchk^%Y48뿟G<"rv#W endstream endobj 293 0 obj << /Type /Page /Contents 294 0 R /Resources 292 0 R /MediaBox [0 0 595.276 841.89] /Parent 217 0 R >> endobj 295 0 obj << /D [293 0 R /XYZ -16.307 900.716 null] >> endobj 296 0 obj << /D [293 0 R /XYZ 56.693 739.087 null] >> endobj 297 0 obj << /D [293 0 R /XYZ 56.693 733.604 null] >> endobj 298 0 obj << /D [293 0 R /XYZ 56.693 736.494 null] >> endobj 299 0 obj << /D [293 0 R /XYZ 56.693 675.584 null] >> endobj 300 0 obj << /D [293 0 R /XYZ 56.693 670.102 null] >> endobj 301 0 obj << /D [293 0 R /XYZ 56.693 672.991 null] >> endobj 302 0 obj << /D [293 0 R /XYZ 56.693 612.082 null] >> endobj 303 0 obj << /D [293 0 R /XYZ 56.693 606.6 null] >> endobj 304 0 obj << /D [293 0 R /XYZ 56.693 609.489 null] >> endobj 305 0 obj << /D [293 0 R /XYZ 56.693 548.58 null] >> endobj 306 0 obj << /D [293 0 R /XYZ 56.693 543.098 null] >> endobj 307 0 obj << /D [293 0 R /XYZ 56.693 545.987 null] >> endobj 308 0 obj << /D [293 0 R /XYZ 56.693 485.077 null] >> endobj 309 0 obj << /D [293 0 R /XYZ 56.693 479.595 null] >> endobj 310 0 obj << /D [293 0 R /XYZ 56.693 482.485 null] >> endobj 311 0 obj << /D [293 0 R /XYZ 56.693 421.575 null] >> endobj 312 0 obj << /D [293 0 R /XYZ 56.693 416.093 null] >> endobj 313 0 obj << /D [293 0 R /XYZ 56.693 418.982 null] >> endobj 314 0 obj << /D [293 0 R /XYZ 56.693 358.073 null] >> endobj 315 0 obj << /D [293 0 R /XYZ 56.693 352.591 null] >> endobj 316 0 obj << /D [293 0 R /XYZ 56.693 355.48 null] >> endobj 317 0 obj << /D [293 0 R /XYZ 56.693 294.571 null] >> endobj 318 0 obj << /D [293 0 R /XYZ 56.693 289.089 null] >> endobj 319 0 obj << /D [293 0 R /XYZ 56.693 291.978 null] >> endobj 320 0 obj << /D [293 0 R /XYZ 56.693 231.068 null] >> endobj 321 0 obj << /D [293 0 R /XYZ 56.693 225.586 null] >> endobj 322 0 obj << /D [293 0 R /XYZ 56.693 228.475 null] >> endobj 323 0 obj << /D [293 0 R /XYZ 56.693 167.566 null] >> endobj 324 0 obj << /D [293 0 R /XYZ 56.693 162.084 null] >> endobj 325 0 obj << /D [293 0 R /XYZ 56.693 164.973 null] >> endobj 326 0 obj << /D [293 0 R /XYZ 56.693 104.064 null] >> endobj 327 0 obj << /D [293 0 R /XYZ 56.693 98.582 null] >> endobj 328 0 obj << /D [293 0 R /XYZ 56.693 101.471 null] >> endobj 292 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 331 0 obj << /Length 953 /Filter /FlateDecode >> stream xڽ]O0+,>]J5mB&$jiD5u1is}eMwHs4lq Ҳ-4.#|0-My7O595beuo|~\wŲx;~|~O$I22HR F]npP6elȾgr&6`d 0ͷnIiX}xct&<nWW!x6˫Q>Yq74ӖR +feAhX (Cγejʚ6o|`5V "􎍿fjTPe$^146$TH7+h=j+oڈ^x֡ex6-ϧö96ɚSRd(DZ-f\ԷPvg}zhf|H ^s\y4 I|3~$bGJI_̣m+R%bղft+CwJF}+~b;WF.L^tR/l#J6cw&«-6ڹ6Sz V}Q-z=>uꦅD; ݷFzm>wFHpfn.ϋL˭wxm˵4*gpORh$MfH?Ŋ5 (z4`PWMh5lGW!*J\6QR&sU+~v i`T,ПFF̬S^zRt "(LwՊghFH0wRϯ%!E%Rn=Pqƿ endstream endobj 330 0 obj << /Type /Page /Contents 331 0 R /Resources 329 0 R /MediaBox [0 0 595.276 841.89] /Parent 217 0 R >> endobj 332 0 obj << /D [330 0 R /XYZ -11.232 900.716 null] >> endobj 333 0 obj << /D [330 0 R /XYZ 56.693 739.087 null] >> endobj 334 0 obj << /D [330 0 R /XYZ 56.693 733.109 null] >> endobj 335 0 obj << /D [330 0 R /XYZ 56.693 735.998 null] >> endobj 336 0 obj << /D [330 0 R /XYZ 56.693 673.885 null] >> endobj 337 0 obj << /D [330 0 R /XYZ 56.693 667.907 null] >> endobj 338 0 obj << /D [330 0 R /XYZ 56.693 670.796 null] >> endobj 339 0 obj << /D [330 0 R /XYZ 56.693 608.683 null] >> endobj 340 0 obj << /D [330 0 R /XYZ 56.693 602.705 null] >> endobj 341 0 obj << /D [330 0 R /XYZ 56.693 605.594 null] >> endobj 342 0 obj << /D [330 0 R /XYZ 56.693 543.481 null] >> endobj 343 0 obj << /D [330 0 R /XYZ 56.693 537.503 null] >> endobj 344 0 obj << /D [330 0 R /XYZ 56.693 540.393 null] >> endobj 345 0 obj << /D [330 0 R /XYZ 56.693 478.279 null] >> endobj 346 0 obj << /D [330 0 R /XYZ 56.693 472.301 null] >> endobj 347 0 obj << /D [330 0 R /XYZ 56.693 475.191 null] >> endobj 348 0 obj << /D [330 0 R /XYZ 56.693 413.077 null] >> endobj 349 0 obj << /D [330 0 R /XYZ 56.693 407.099 null] >> endobj 350 0 obj << /D [330 0 R /XYZ 56.693 409.989 null] >> endobj 352 0 obj << /D [330 0 R /XYZ 56.693 321.972 null] >> endobj 353 0 obj << /D [330 0 R /XYZ 56.693 315.995 null] >> endobj 354 0 obj << /D [330 0 R /XYZ 56.693 318.884 null] >> endobj 355 0 obj << /D [330 0 R /XYZ 56.693 230.868 null] >> endobj 356 0 obj << /D [330 0 R /XYZ 56.693 224.89 null] >> endobj 357 0 obj << /D [330 0 R /XYZ 56.693 227.779 null] >> endobj 358 0 obj << /D [330 0 R /XYZ 56.693 139.763 null] >> endobj 359 0 obj << /D [330 0 R /XYZ 56.693 133.785 null] >> endobj 360 0 obj << /D [330 0 R /XYZ 56.693 136.674 null] >> endobj 329 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F99 351 0 R /F60 57 0 R >> /ProcSet [ /PDF /Text ] >> endobj 363 0 obj << /Length 1086 /Filter /FlateDecode >> stream x՚Mo6zrH?؎H( c(5Ȳ֖VBr)S5|fHɂ}b&| iXȌ2+~.$x)vONVܿt_T; ,f򟨣 +uu^Z<⥾ ̑%JKJnA LEMTM$'O: nb7Bϓ{cdk_3?32̲Ѹ;J=a'˶v9ޮ72ɲ:٦rL/UfY$MY~`$γ]O5պ)ԶPMi7uHZ{cu;};a,Pg6Մ=O/.!S>m_,֛6It{{u%y!C.V^XI䨪{28ɷ_Ya5Щ%W3way5St*0p>09mIZn"ɒjʖ:i{s+]ȭj;1FU'*&t~dHdӷ1~FCȠVc4ZaDТ P-P{YpdEs(_MVUH9%h GJ2H-0vZvX,8 SE0!eN2TAX<PRC>@ )B$u=Ip$I* NA)mT?Im,o{UHOV^Gi;YENNpִ@p.>> pE_IbEM@BvS#85bޠȜD@IKtxO#/)&Y_ܸ[oFQN5E:K2o = @IYp}&b5nzGkGnʇ1j!/hZcyG]?tO\0?VL endstream endobj 399 0 obj << /Type /Page /Contents 400 0 R /Resources 398 0 R /MediaBox [0 0 595.276 841.89] /Parent 435 0 R >> endobj 401 0 obj << /D [399 0 R /XYZ -11.232 900.716 null] >> endobj 402 0 obj << /D [399 0 R /XYZ 56.693 739.087 null] >> endobj 403 0 obj << /D [399 0 R /XYZ 56.693 733.604 null] >> endobj 404 0 obj << /D [399 0 R /XYZ 56.693 736.494 null] >> endobj 405 0 obj << /D [399 0 R /XYZ 56.693 675.584 null] >> endobj 406 0 obj << /D [399 0 R /XYZ 56.693 670.102 null] >> endobj 407 0 obj << /D [399 0 R /XYZ 56.693 672.991 null] >> endobj 408 0 obj << /D [399 0 R /XYZ 56.693 612.082 null] >> endobj 409 0 obj << /D [399 0 R /XYZ 56.693 606.6 null] >> endobj 410 0 obj << /D [399 0 R /XYZ 56.693 609.489 null] >> endobj 411 0 obj << /D [399 0 R /XYZ 56.693 548.58 null] >> endobj 412 0 obj << /D [399 0 R /XYZ 56.693 543.098 null] >> endobj 413 0 obj << /D [399 0 R /XYZ 56.693 545.987 null] >> endobj 414 0 obj << /D [399 0 R /XYZ 56.693 485.077 null] >> endobj 415 0 obj << /D [399 0 R /XYZ 56.693 479.595 null] >> endobj 416 0 obj << /D [399 0 R /XYZ 56.693 482.485 null] >> endobj 417 0 obj << /D [399 0 R /XYZ 56.693 421.575 null] >> endobj 418 0 obj << /D [399 0 R /XYZ 56.693 416.093 null] >> endobj 419 0 obj << /D [399 0 R /XYZ 56.693 418.982 null] >> endobj 420 0 obj << /D [399 0 R /XYZ 56.693 358.073 null] >> endobj 421 0 obj << /D [399 0 R /XYZ 56.693 352.591 null] >> endobj 422 0 obj << /D [399 0 R /XYZ 56.693 355.48 null] >> endobj 423 0 obj << /D [399 0 R /XYZ 56.693 294.571 null] >> endobj 424 0 obj << /D [399 0 R /XYZ 56.693 289.089 null] >> endobj 425 0 obj << /D [399 0 R /XYZ 56.693 291.978 null] >> endobj 426 0 obj << /D [399 0 R /XYZ 56.693 231.068 null] >> endobj 427 0 obj << /D [399 0 R /XYZ 56.693 225.586 null] >> endobj 428 0 obj << /D [399 0 R /XYZ 56.693 228.475 null] >> endobj 429 0 obj << /D [399 0 R /XYZ 56.693 167.566 null] >> endobj 430 0 obj << /D [399 0 R /XYZ 56.693 162.084 null] >> endobj 431 0 obj << /D [399 0 R /XYZ 56.693 164.973 null] >> endobj 432 0 obj << /D [399 0 R /XYZ 56.693 104.064 null] >> endobj 433 0 obj << /D [399 0 R /XYZ 56.693 98.582 null] >> endobj 434 0 obj << /D [399 0 R /XYZ 56.693 101.471 null] >> endobj 398 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 440 0 obj << /Length 2496 /Filter /FlateDecode >> stream xZs6_wkUE}Lz&pv<ĜʒWɥ D*ml;EA?Zk|8p؉/7V9AhE;<kGd >,Ԋ:s U=4N$u~r{6C&?/ Msb!H9 od!f$gJ̊@J~9!T8qhb!L #kjh ]Y"p[a̜ǟ]k Į-ߵ/3xA:4v,puŏXUV b'j?Z'V.߽Pp7<܏q쳘\ShȀ⯄(oOD(r{#J IqDDyx>(/v|Q';L_O>@׃+Y QgW{GSO8ʻG|pBx=5^ϢY8v iW^_*Ta~><1!{SGVkVey,# #~0}Aå$" zge$ђ%[|,!z^ y;S{Gzqx1>xRB~:+D^zGzexe7R \mϑKx~G!O˺Ln_fk=ytheqw sZ|cPY"$]]MGcWH?Vv?rxa"2-P X /&Nґih齱<tWh T)Z͋]8[q>ƌiO*S%.ӋA|ݧƍ/ƘC]*vwflM($NQׯgW !h?J2UnK]#&Pu8"{ռ]R@XCLRgkbBEFs"sQ,hCj]BaAҽ6= }z)r[H3> S H(F&{G9i bS@.gn F>PF5)4&FLIFvo~?HPSI;YlUY r8MFxnek?> '4VLO 䁨f4]ܘJ/TСZ2v4諓:УDɼQI%7%dpMr: M =L@&/t䐬KWz|!iTQ.oV Uz }82rGIumJ #X"sJ*4T!"`ܳ!z ɠ:*|kn XHv9"]rAJBwdT]a` .z@ФguTBD W*J5^J6$m`C3:E@$zEĄdPjjEfNO)ka噤H5v\xE[>$ lS !%CE] C ] endstream endobj 439 0 obj << /Type /Page /Contents 440 0 R /Resources 438 0 R /MediaBox [0 0 595.276 841.89] /Parent 435 0 R /Annots [ 436 0 R 437 0 R ] >> endobj 436 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [120.345 214.258 211.841 225.162] /A << /S /GoTo /D (gss-init-sec-context) >> >> endobj 437 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [451.951 214.258 555.601 225.162] /A << /S /GoTo /D (gss-accept-sec-context) >> >> endobj 441 0 obj << /D [439 0 R /XYZ -16.307 900.716 null] >> endobj 442 0 obj << /D [439 0 R /XYZ 56.693 739.087 null] >> endobj 443 0 obj << /D [439 0 R /XYZ 56.693 733.109 null] >> endobj 444 0 obj << /D [439 0 R /XYZ 56.693 735.998 null] >> endobj 445 0 obj << /D [439 0 R /XYZ 56.693 673.885 null] >> endobj 446 0 obj << /D [439 0 R /XYZ 56.693 667.907 null] >> endobj 447 0 obj << /D [439 0 R /XYZ 56.693 670.796 null] >> endobj 448 0 obj << /D [439 0 R /XYZ 56.693 608.683 null] >> endobj 449 0 obj << /D [439 0 R /XYZ 56.693 602.705 null] >> endobj 450 0 obj << /D [439 0 R /XYZ 56.693 605.594 null] >> endobj 451 0 obj << /D [439 0 R /XYZ 56.693 543.481 null] >> endobj 452 0 obj << /D [439 0 R /XYZ 56.693 537.503 null] >> endobj 453 0 obj << /D [439 0 R /XYZ 56.693 540.393 null] >> endobj 454 0 obj << /D [439 0 R /XYZ 56.693 478.279 null] >> endobj 455 0 obj << /D [439 0 R /XYZ 56.693 472.301 null] >> endobj 456 0 obj << /D [439 0 R /XYZ 56.693 475.191 null] >> endobj 457 0 obj << /D [439 0 R /XYZ 56.693 413.077 null] >> endobj 458 0 obj << /D [439 0 R /XYZ 56.693 407.099 null] >> endobj 459 0 obj << /D [439 0 R /XYZ 56.693 409.989 null] >> endobj 460 0 obj << /D [439 0 R /XYZ 56.693 399.03 null] >> endobj 461 0 obj << /D [439 0 R /XYZ 56.693 388.071 null] >> endobj 462 0 obj << /D [439 0 R /XYZ 56.693 377.112 null] >> endobj 463 0 obj << /D [439 0 R /XYZ 56.693 366.153 null] >> endobj 464 0 obj << /D [439 0 R /XYZ 56.693 355.194 null] >> endobj 465 0 obj << /D [439 0 R /XYZ 56.693 344.235 null] >> endobj 466 0 obj << /D [439 0 R /XYZ 56.693 333.276 null] >> endobj 438 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 473 0 obj << /Length 2934 /Filter /FlateDecode >> stream xZYs8~ࣴ1o<%Vbg#ek2S*lnQ#t,ŵbbn2 ˸xxγȌ|7k÷M?0BN`,VƗ5y&ԙ)Ioi©Y9Fޛ3Zysه8o K,m1&)GA8zM?tq 71e˟9`tx+7,v|hg_A(nd2'VfıQR qINQZDn$)٤=R~Ek7f{M8Ivo$9oZcRmyaYvB3f 0O#IS{ ?&[4,8-#!{J(Lm&1n+k*9[OŚ~I@B˄ ͆Ҹ-[YVn1P$Iަjjnʜp8K墮걿5\e@JF-};!Z3(P/x,),I ƈ> 6EP]QqmA6!!岪T"⍯d XKBӆJTZ=/b|6*]?HnZgtbxI.-WW<Z{р~,&^Nv;jܖtT Ԑ6aw4 VN2(4p~7>};l[482qM%Tض_?5vRSX]Mnbcy9Z&]^.g7Wwb*w)DL\0s$;]wxl[ҁ{k7tHrֵ,]s͏5j஁Ԩ[5!F'yYDfw]U\n M]ϸlFx=(Lko$s1%Pjbon| z (ʗTT!}&s1\M &Aв ҎMLML-7ϥnL IVx)^n&AWY1Ԯ:x:2IN UxÝ4x "s׮o zκt;ig$;۱3$#;aS0Hk G%͋6:٫$(H7M-"7\[l<7 ![Pe:IuCՃqB l-jl*D@ mR6f-ʚ٦eMg }eP0%k8}q<ϔ,с F,1A+$ g2/<9>b#jdq5D@ߎ!wys0Cs.3wŢ4!k̦o?%ŽXhzn;b ;?mb:G]Bhrp1Kh؅T~;gGMRŐp=nLÛoF0@rt%oc+ 蹣r~$MW#jS~}˓O<j Z%YW@]v@Uk]4EwnL(jSN9u>a+uUk>?׽Jck8oVntkfFFɍuSLBn@>>{UY|iO`VKe"z/lҼvl-NS>큎 -U>{+.߄` حH0ձ\^\4gZ˹a,U^9y~1ƪ& H=(Af:)߃ojpI-ex3@nxq@ˤ\l gE~/+;oXV}:y"cǡgZKn\9.,e7O+UH[ݽ'd^Rɏz?_d}?>&|K˷BxJޕ/ʅ^IV3Y2*!^U5M 5_PY45`bUt;}+ڣc !]S]m;A49?G@>Mvcm{!Ídׇ5_O̳aCe/!z3{C ZG+_p endstream endobj 472 0 obj << /Type /Page /Contents 473 0 R /Resources 471 0 R /MediaBox [0 0 595.276 841.89] /Parent 435 0 R /Annots [ 469 0 R 470 0 R ] >> endobj 469 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.176 524.782 419.299 535.686] /A << /S /GoTo /D (gss-release-cred) >> >> endobj 470 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [443.281 492.902 531.04 503.806] /A << /S /GoTo /D (gss-release-oid-set) >> >> endobj 474 0 obj << /D [472 0 R /XYZ -11.232 900.716 null] >> endobj 476 0 obj << /D [472 0 R /XYZ 56.693 342.584 null] >> endobj 477 0 obj << /D [472 0 R /XYZ 56.693 336.606 null] >> endobj 478 0 obj << /D [472 0 R /XYZ 56.693 339.495 null] >> endobj 479 0 obj << /D [472 0 R /XYZ 56.693 328.537 null] >> endobj 467 0 obj << /D [472 0 R /XYZ 56.693 158.826 null] >> endobj 480 0 obj << /D [472 0 R /XYZ 56.693 152.849 null] >> endobj 481 0 obj << /D [472 0 R /XYZ 56.693 155.738 null] >> endobj 482 0 obj << /D [472 0 R /XYZ 56.693 144.779 null] >> endobj 485 0 obj << /D [472 0 R /XYZ 56.693 122.861 null] >> endobj 486 0 obj << /D [472 0 R /XYZ 56.693 111.902 null] >> endobj 487 0 obj << /D [472 0 R /XYZ 56.693 100.944 null] >> endobj 488 0 obj << /D [472 0 R /XYZ 56.693 89.985 null] >> endobj 471 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F52 38 0 R /F94 66 0 R /F102 483 0 R /F106 484 0 R >> /ProcSet [ /PDF /Text ] >> endobj 493 0 obj << /Length 3477 /Filter /FlateDecode >> stream xڵrF]_- F\*'ڲeG$ł 08h]EБĕLOOOݠ9'߽qIhMg? md<=8;\sz.3Y$1\˸.^X/k__C~]:]pApWr- mR$I$y6 {rD6;zI''4'bz?gZx{dk@NAn'0 `NO~:1;&C|w1ۆo:q@-# ‰@pR ?ϔk*rBgV V!,n'4b =PǃBCedm)F73il岐)Mh˛b;Fz6)}TPge0ܖ2DY&M\~FG OvtL2lԊ75Cl3HICD؆ 87D#lWWJblLvqH~McIx>Řn5Dw87=Y&z>1)ƣ}M yd6L; p=_bO^a`W,2,|)}p 8ٮ,P11|yZ(M}6)}%:Nf|`y~]a<#~5nq%UU3pF@Ut&f+ ie[3$ wGE7mۥIUIDa-6x'e1sݩ1;säs*άAyLSwQmeXF*r)n{>`Zdb -F%͝__/\^_g}|f~uJyAui,U02zfSt+YGmRt*jCӊX} Bdulߛ~s"{?]hBI6YYEFcw;!G6Iad0ª.ZH^P,'ςsZ};e!{ܹmn8KҔFB ' %cˎnl۟^ 0SPīFB,<UHw|Qmk-V ( .(s\T{=Q15j3 8R{00ț晦ۼB{MSX2P 7rN!̺ȷHݬ@i\*s&QoDv$;m"kQ8f6U^_ e 4HITl54Tr{ }xˏ|zd9O| G0Gk9׮ڌqRi9MSa@S>L4y ~L5}ƒ%uP]SF}W֢$KCs]5ͯV?%~Qs)@WLѥqq|¼JrK hM2s󷠱j:x~zuP9(20[L y[ PR€qNw0nNiahfrpCوHr~u '4q7$q`pKH ^W_ S_^V[Bo^$ZpHV.-1 aB S Ӛ!ÿ0E#2|=(dDJ A/cc0f2^w%1%S{-3HӨxBFڗQof.piko*sCJrz*+\ N!RWr<$&Ll} 6n B1G: _j4ՒmTGB#֬rrۼQ mvi"L"iM͐U`[,CTupDj`o)R=R%p~MoƷ38bķuzul; ajWS-INvpbЏTQ5=9VDF;e; iaWU/^3Y7b$ 'Wpczk|-'`i08.5 Wh)8śRrQP_Ĵfi#49Giθ4f& )4ϚK9pZ@)nTvz2/(Gnؚ'MAש㧂| 𠴋@-zu$Et*X~9hc AK%;\14qO>ƹ b%0A%a)RAW 49>❩ FU,ZҼv|vdW2 2*x,+ [1ҜQJ"i5AQ<&A_3lK?M  )c)[2$yp[_r5h &{X^$ zWr`WI)} g@PMHv+A]t) T>W0]dD+|K}nܱZcZjw 1aXAmMݢ˲ɣЖbŹhX?[?,O3=욡2IA674YSMv~>v&2#>7 endstream endobj 492 0 obj << /Type /Page /Contents 493 0 R /Resources 491 0 R /MediaBox [0 0 595.276 841.89] /Parent 435 0 R >> endobj 494 0 obj << /D [492 0 R /XYZ -16.307 900.716 null] >> endobj 495 0 obj << /D [492 0 R /XYZ 56.693 760.065 null] >> endobj 496 0 obj << /D [492 0 R /XYZ 56.693 749.106 null] >> endobj 497 0 obj << /D [492 0 R /XYZ 56.693 727.188 null] >> endobj 498 0 obj << /D [492 0 R /XYZ 56.693 716.229 null] >> endobj 499 0 obj << /D [492 0 R /XYZ 56.693 705.27 null] >> endobj 500 0 obj << /D [492 0 R /XYZ 56.693 694.311 null] >> endobj 501 0 obj << /D [492 0 R /XYZ 56.693 683.352 null] >> endobj 491 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F94 66 0 R /F102 483 0 R /F106 484 0 R >> /ProcSet [ /PDF /Text ] >> endobj 506 0 obj << /Length 2696 /Filter /FlateDecode >> stream xڽZs8_ٗgjU߲KLR'832kOl?%V;s/ ~@Gy䌮8{:N"/-6ȳx4u}ۏGu=OбE)<ʣu|ѵs #|I|7AlD-J=cZGHh "E>ĞhIBy {3:#wFv8qFh m $ыc{~bx˙vAbNDl@/B^M+Q,-Tm$^v]Z̎;[o@ %FZ`ѪV-q&Ʉ3kDޕ˝z8^Ԝ_͡. Q)gJ*ez%o5աKaGEB5p5af}!fh5D< 4g&D8Ӣ}sUH]KZ4Q%zBN@{9G^l?!lSf~œW,MҰH4 ߀VPҦbM $t1BnŶ%~_ŠYb$? M)4]ng˫qh>&4b!/aKBԂzxJte\d0KU[3O'\b{Lrh"{`I/jPW:`Ք Œ(6Xd,d+\FY|GTS%ޱJf _OuJ*7uIbBY qI꼆ОA82}Rg Q8p/u'g,wyj XKaQ69&7}$wj r/f٩.cjLlu=AF7=4j3!q_SЧuFTfJAjRhD i(nFށ0s!`>aϴKLa|1/X@F9OCB%6ӄZL}(+<+YA:y̥HJoD@QBza#tӪ+<zf@ N6KjҀZܪ+ƚAdnoַ$Z>3tRϫ! k4}#9Yw"P0Qẩ13xr1i= \O5$`b(q 2.ŋ XEHo)ŽGz uJ"HdMmi:GS>rd #)!?#}1˸c|@%*,x&mh3P'e#voQ,U=PŇJhNGZ7'd*` <!3VH1ȕ0ٛD~B" xx1g2u8* ZGhXqGm`&hT YO 28l>ql-)}쪳 =2!_ԱC;gNodyS,<7`M\&ŋyvBX= Ae;,xxSԏRPѷ""0D;bU,^y/؎yWA4#^eѿdثZ&spY=*kuLoF+WIBXz8rC_?D?Ķ뢢UG 0=`toy-tcK>+YCœ |mc;Q#p endstream endobj 505 0 obj << /Type /Page /Contents 506 0 R /Resources 504 0 R /MediaBox [0 0 595.276 841.89] /Parent 435 0 R /Annots [ 490 0 R 502 0 R ] >> endobj 490 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.751 745.953 223.247 756.857] /A << /S /GoTo /D (gss-init-sec-context) >> >> endobj 502 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [511.433 142.217 614.944 153.121] /A << /S /GoTo /D (gss-export-sec-context) >> >> endobj 507 0 obj << /D [505 0 R /XYZ -11.232 900.716 null] >> endobj 504 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R >> /ProcSet [ /PDF /Text ] >> endobj 512 0 obj << /Length 3365 /Filter /FlateDecode >> stream xڵZYsF~ׯ#XeG$K]VRNCk`Њ{aW8O =}7=&kr{fu&?Y&c$] &q8te\iBLNeZ?^%M$u~u\=m/ҶHw~N>ȝ,e?{8/%{K,yc;f0S ~h 6&D Mr&od sEQtDVw۸F&0iQmG$'}ng[7_f?Pe{%qHN`T!g|:ˆ F[0i8yN7بR@8裸E{6xYG`D|c#d\9,{Fp/mIܺ_%;.Db=2,2:q\|P䓚GC\W2Yw@hܸp <.dØgox6%VG2޲CCo;VLv-F`md_O1!eFxu-ɮ 0'7CUZG iu@JH\؜{MgM1|?u8]tݠQ&) q-}+jy֗ aS@} ~=1LSEiGG+@XXdZ2NPyNtkW %]ř VSc3ky@˧æ0 )<15㒗Ynilt"Qh;'$4e)co?*؇1D)ےmxgCtyAn5)kAHu\1/M,^&B:/5?o: ~n:,2r}qBϸ8t(+V!@Y} cp!9ѳ6n9+>A4;d? =H}>(TWכT<ٖgB"k!\fͽU!\6(Q(ه*c^tձ 5 PC2Z"7͹•RT:h%itx`j3pVz,Q2v -Z,fw7|q wDV6#)p*&>,g%։^l0CFp61hWQ=Wc5H4DH [ @DVWЛk m|vͨk6 HzĦnku ޽_#¼ fm|pgoŇpgy|A  Q}%W^ACrc* F'ޗ48q :Y Ckä mKetuC¨2AD"G7zP]T34`_P.(@ #7,/pctˆU>C^]I$b'8K$Rʼn$A.T> Ɣukŵ.Eɶ0d562DaiG$^lҎlR@Na  >}֦ChR A #BPhI(f9/$dG.#YJ*8>A7%ANs] /oЫōΎ"Od}=b~UΣ9c{Dmd~AțA4(西X+ [ P,yWt^dE Oa y/m+h!Z:ڛ"-dդ6;ꞕLJ9"DАZl 0^BUaٖ1hA8.d"|Is}l5Ñ ķSȪڝ0CwPh z/>֋fv!2o0KWf`0j.YҊ~ŵko{gAu<]k= hlm4QlCs?LRqAs ZsήW+,{`c t|$ȫe reee dT/MKU *͚w1>gQbtDy>ծ0:ԣ-pu1ͯTrh'K˸ |aV! YKV(DG3CR!3:QhFR9d8q~\lYsn-}nAƧl^jņcNKAg\ ~Oy7^miɎ~qwKoȥeL@&9Uk{ZuSz75G=@f80SuL}Qt_k0^l4ݡ}!+O9gh?gc,cH9 endstream endobj 511 0 obj << /Type /Page /Contents 512 0 R /Resources 510 0 R /MediaBox [0 0 595.276 841.89] /Parent 435 0 R /Annots [ 503 0 R 509 0 R ] >> endobj 503 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.116 690.162 320.112 701.066] /A << /S /GoTo /D (gss-delete-sec-context) >> >> endobj 509 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.839 399.253 217.707 410.157] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 513 0 obj << /D [511 0 R /XYZ -16.307 900.716 null] >> endobj 510 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj 519 0 obj << /Length 3412 /Filter /FlateDecode >> stream xڵks6KFXo^76ǝImv4Yl)R%NbD|be<q{מeDf۾1]m2tc4~۞5/<ŮHgV|L^~<ј13 ̍1˴ƩxÕՒh,Xy*YXm5+bȳ_3o{E8,,Rm_ ,dA"ci3װ(+6~m6SaCK+N7#; 'RKZuuڞY!i.*&f8}}1E!'p|Y13=?"~g:!n,/feWv >l̦M fq|FM4XTϒ嬣}@:Ζ)?[e:s9`fOѡ^#:/ WWek1B{d:# Z`BSH#½Z;u8Ǩ5tL;`sP863Ba!Xr"o(̞I~VJ J/y^ȓ|Xڦ?P=œ pęd]5_y&uv`\h8.&6)~EfzSSy-Gt"2RQ}1T`fO(74= V+lrJ|0@? v~gB<[uB/)z}3 Fo^E:圩 _g|1*2/6z)c13-|Wuʱr*g0(rM~\: 3ݪl1/R̞9/rMbS]@Z,lT^Lsm57S4:UaJX(ho7r|O/6Z ئ^xSW\+gV0POЖIFm!M^IT &+ L?}W8n1[$ݦ"<#4Yϖr^ 2*IK 7TCI YvEvҿL,!,FbMr% |VEP\N ⹖ti'|@|K%*zIYPSfػ QS;s<}}W/eJZ8$QR}VD+Pٓx)Ϟ5,|B⚅Esvㅣ"#0xo)L{Kcz)nH4NL. B\_--%RLy."f'\נ!挒>|5@cO$?(1hljhwӻdj%%܀ -I7 Xi% 6R&)Y)w &V*O0~D!pHbٺO3RvT Iٺ|m"ހe}Z(tK(Ax.ĝc[`,ܕlP4^^\Gl' GD7"j+(H6:D(PoL 1x_ 801] xLy Je[߄9J}%50TӲ: ?km2kq}apMGkk7'{)J>~2%A5f`bM0J K*.źZCRt2Vhq+"[\.HFt.YGJVA}R3:+!&J];4<,D~ٷ(_OD[W~g]jeAsN걁C-8yweA@(e^bBrQ<"$"-y"bp$}U@5riKY^`Kp鑖 "jؓbٖ*#zr27̅"MkRȣĒZN\oB( DeK=@MC쐂4E{<ʼnqZ={P ud?']{ t0y9ont+GkmȂ"(! N "~{+CڒPP/K|ՏaI K%mᄤX`D] 6}Œ0wm) Z eP eL7ץx,|[˪$Ь}],lu9RtԷLqRKzN~1zrD8h{^w7p]8'ܿ`3hԡ0Wk{hNf"{XUu jSBIв WK%3/R+J}&,^5j%EqGOsx1uȐm TfQ>K>?PY5m) M/6:_?R{(\#[Vu+wp"7QI){uw@57inD*naJ1 {|iyzqJe"Hb#/1/ŢOAܦműhLͯDt"*Rq]k)IX=r:Mcu\}*%(9_ǘ6?&d?.Zo__LElKz! 쑖{.0S^{moԽC]T=ڨoo[)+e1U :g-f{AVY ").)48DFa[W.*|'NctF^ǩ|"O~Y+ QZ_i+6FXipIPt,mLѝ^uI_@/T[K`HGZlTj؁luкon*E, w(4k(O5!H*ӚLnA> endobj 516 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.898 87.556 238.548 98.459] /A << /S /GoTo /D (gss-accept-sec-context) >> >> endobj 520 0 obj << /D [518 0 R /XYZ -11.232 900.716 null] >> endobj 468 0 obj << /D [518 0 R /XYZ 56.693 739.087 null] >> endobj 521 0 obj << /D [518 0 R /XYZ 56.693 733.578 null] >> endobj 522 0 obj << /D [518 0 R /XYZ 56.693 736.467 null] >> endobj 523 0 obj << /D [518 0 R /XYZ 56.693 725.508 null] >> endobj 524 0 obj << /D [518 0 R /XYZ 56.693 714.549 null] >> endobj 525 0 obj << /D [518 0 R /XYZ 56.693 692.632 null] >> endobj 526 0 obj << /D [518 0 R /XYZ 56.693 670.714 null] >> endobj 527 0 obj << /D [518 0 R /XYZ 56.693 648.796 null] >> endobj 528 0 obj << /D [518 0 R /XYZ 56.693 637.837 null] >> endobj 529 0 obj << /D [518 0 R /XYZ 56.693 626.878 null] >> endobj 530 0 obj << /D [518 0 R /XYZ 56.693 615.919 null] >> endobj 531 0 obj << /D [518 0 R /XYZ 56.693 604.96 null] >> endobj 532 0 obj << /D [518 0 R /XYZ 56.693 594.001 null] >> endobj 517 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F102 483 0 R /F106 484 0 R >> /ProcSet [ /PDF /Text ] >> endobj 541 0 obj << /Length 3222 /Filter /FlateDecode >> stream xڥ]s6='y&[ޓxsf4qff6%U6PD$ =˳|kQn8fkh}1[ƕDlh 6uT/zV~M6&Yu{_@hbftN">YXGS`)p%/tvGߌBfqaS85>Ї(͗g@#?0m3ξn,^4=+ȷ-q_ϬW"Ӷbex:Q.mɡHAdU\%y0IBVdT9"ooizXFOq3gP }'=RsWitϬhw]l!mq 6.Vb9᜖6)ShQ5$@&9ס B@ >ljȱm2@_F2;CW&Iy2teuVfyǁ"(dFVrjke=I-@Hl icpu=8:u=9 b zUKGj9/-(w7mr~d[Ǡe`qAe&DwȄmȃo#ՙ/^.34JKoFWT{Lta/I8$rT1YOErqSDaE SNw|f)L(}%\a Z^lJ)M #5o89UksAR9Ęy/6!X>hpu61?;E^VKL$|#SeGouZ&?Y<*RK5햶.Umn뿢?|"zboM$ D[ vuh6 Z!<:׻Ә(fd>Rݠ#݆76 }.2ujX<Ǯ&^%<^C4@+@Iǜ [pC]dp{t I`{^FYpY{X1#TkzWUǃ ۸֫.Q^Eh㔥=9~ .E2Π뒋[X!Zb)*uNyU@-M j!ҚJѯJP6(m#QhDJ8~*m$F0n:YaM* uijۖi;x&}aގ4: V/ɊZU"[`|M&Ga`^Eb> endobj 534 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [511.433 358.001 614.944 368.905] /A << /S /GoTo /D (gss-export-sec-context) >> >> endobj 535 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [295.625 270.599 399.276 281.503] /A << /S /GoTo /D (gss-accept-sec-context) >> >> endobj 536 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [90.845 246.689 192.841 257.593] /A << /S /GoTo /D (gss-delete-sec-context) >> >> endobj 537 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.706 119.382 224.263 130.286] /A << /S /GoTo /D (gss-release-name) >> >> endobj 542 0 obj << /D [540 0 R /XYZ -16.307 900.716 null] >> endobj 539 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R >> /ProcSet [ /PDF /Text ] >> endobj 548 0 obj << /Length 3555 /Filter /FlateDecode >> stream xڽv_R=%y؎v׻]k{rNCKŮD*$HE`07 fL&7?$ȋ&$($odd]~μбU|ɝ;b??0yJ:WGAn?]-n@3.q[ 8I#s"91E0/nGT~ \V"@/.~ Z[/29;/7`pCp%BӆƘIREykUK9R{y_WMQl%x-u^7X"Ѩj)$\3F~WpY숛A0y!Vn0*ߢfLj7]'QaOAR_+,yϣC|mR]{~@pq ieN#kΫxnsdx HuyuDhoY8/։h}]@Ȉ&REЅ+RH<[-~p\Cu6v K27q "6{;`jko.^^ߵ2o܄M!G6/W-wsz6_&e> A9^ ΋x,qr)2U\Տsma-W"ڗx݆"Y]:< NXrCw,G$wwsՆz#BDh@pw76u[{9#s iDoHnfjdhE =2ɍ$Csv+PJ]UPsڍrAyفfKś;\ <>/I5%FaA*Ħw.=T6ȶVOW%o5Y5\u[fm.C>FD}.Ƣ 㷑R1NbТsN f !#@W@d#dErm xFm }N.ݓ;'dfm zPG &~NbٞL<;MI&kp[mzA/~.bv}.V E`Ah꧈"\e ,~فE#`(oF|]6 /xboϱʙkSL ]^l9GsU3HlOӜԜW #ѸKyڈ,(ZEcۃ?M_)W{$`{$k+I2g(G/{,!\cu^^CmF]xaGxIG.'"ʡUT,7UYP5 !f@]YyܣIQZJ.D' ,NM49vy1 [ccqzEG}Lq.鴼FOsɭŔܰ #}.E4k&GƞVOTK.@HgMH$:v1.7K.!^"=2)ci|.X%vluwĠs"L5a^&J8}sF78+Ip%4`M Ս<>J@̲2e𢂄aq[w kǸ  >1ϭKVPOOp!|YъrRsfVo ek}@Z#,Lwj!˷}[ SFc̉җ|J_| endstream endobj 547 0 obj << /Type /Page /Contents 548 0 R /Resources 546 0 R /MediaBox [0 0 595.276 841.89] /Parent 533 0 R /Annots [ 538 0 R 544 0 R 545 0 R ] >> endobj 538 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [301.951 722.042 384.819 732.946] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 544 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.32 590.535 341.97 601.439] /A << /S /GoTo /D (gss-accept-sec-context) >> >> endobj 545 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [80.603 566.625 156.727 577.529] /A << /S /GoTo /D (gss-release-cred) >> >> endobj 549 0 obj << /D [547 0 R /XYZ -11.232 900.716 null] >> endobj 550 0 obj << /D [547 0 R /XYZ 56.693 376.457 null] >> endobj 551 0 obj << /D [547 0 R /XYZ 56.693 370.479 null] >> endobj 552 0 obj << /D [547 0 R /XYZ 56.693 373.368 null] >> endobj 553 0 obj << /D [547 0 R /XYZ 56.693 362.409 null] >> endobj 554 0 obj << /D [547 0 R /XYZ 56.693 351.451 null] >> endobj 546 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 560 0 obj << /Length 2768 /Filter /FlateDecode >> stream x[[6~?B蓼H}jӓ,&.P - ٢mae%_ÛM9V|5',4%QN{/V:-3%1JaD0s+n>`X01#oWe,0/j֋peP.7 z!+f 0ʺi(D+XΗUي [͛MrՀ_xzJves"8Jīr;zL`#bЄ=McVpi10kO&Vj*D(V./[JR>N FNqa:Yأ L1(b!{m^ViӶk,k uR4>l( , >`{g@,cWƜ更 q YWS8g)* (tV:<}DW]y[[CH b(1?w+ΔP_pM3?՟feih2e1_Х!nT!jkulZ4yڊl7:N,?1{O`tpMN2IМ |Q_6rG~3vl+nVW+;B ]]-Dc5 ]-GZ>ʕgթ&6!Pj(Կ[Ad°_V)y܋-d'$"b x7gNMuÛMD#ZZr-*JvhΉ iJ~3x`#J HtjX֕6:mtMي,,LZ-4/5yE<1ڭu4Ҡ={̃im^Zl#5QF[%w6LrVl]7vM'Ec\Ѣ0%M|habB@Ny0`Ck^ȫP-~ _fbe{>ee 콣!E+l )G}U OW%I1<ӭ-Vq` v.u?eW.&T]EUK%ସrGъ ,O: (ZjWe 2.H 3n*"q]H.Qm :rz1s̰H-d$08 ܋LcD`!3Rp|uo6xVsOe835m QqASar9=lnw_s}3Q0\t.Q'6 Jy !Zk㗼8K~c|'Ĉzӧ?bF3[wJ ߇#>mO(Hz}#8է`ؙS(%$B s*ǼP I(J}X@^. sUffxCo7'_%y9UgCpQ]gZ-ilQJמlvlovഉPm+V4fk0B1įJ$+{P{q H}$]{kVڧ4 :#,ߤfѴ׭zܿM Ů2c MU u-@&8d qқRQzvPzVG( J2;q`R/gf2eeK3ס_M{N6V*q~NLeηsOk0e(5X)aW nE7}|^!"qxy^6j4`03>2'DMJ3Gjr4OdPȜ~vՍZO*%!\/Q>AIಫo+^̺T1FO~G-!u?;K1'2HAa\D endstream endobj 559 0 obj << /Type /Page /Contents 560 0 R /Resources 558 0 R /MediaBox [0 0 595.276 841.89] /Parent 533 0 R /Annots [ 555 0 R 556 0 R ] >> endobj 555 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [258.912 607.017 350.408 617.921] /A << /S /GoTo /D (gss-init-sec-context) >> >> endobj 556 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [351.185 607.017 454.835 617.921] /A << /S /GoTo /D (gss-accept-sec-context) >> >> endobj 561 0 obj << /D [559 0 R /XYZ -16.307 900.716 null] >> endobj 514 0 obj << /D [559 0 R /XYZ 56.693 739.087 null] >> endobj 562 0 obj << /D [559 0 R /XYZ 56.693 733.109 null] >> endobj 563 0 obj << /D [559 0 R /XYZ 56.693 735.998 null] >> endobj 564 0 obj << /D [559 0 R /XYZ 56.693 725.039 null] >> endobj 565 0 obj << /D [559 0 R /XYZ 56.693 714.08 null] >> endobj 566 0 obj << /D [559 0 R /XYZ 56.693 357.073 null] >> endobj 567 0 obj << /D [559 0 R /XYZ 56.693 351.095 null] >> endobj 568 0 obj << /D [559 0 R /XYZ 56.693 353.984 null] >> endobj 569 0 obj << /D [559 0 R /XYZ 56.693 343.025 null] >> endobj 570 0 obj << /D [559 0 R /XYZ 56.693 332.067 null] >> endobj 571 0 obj << /D [559 0 R /XYZ 56.693 142.431 null] >> endobj 572 0 obj << /D [559 0 R /XYZ 56.693 136.454 null] >> endobj 573 0 obj << /D [559 0 R /XYZ 56.693 139.343 null] >> endobj 574 0 obj << /D [559 0 R /XYZ 56.693 128.384 null] >> endobj 575 0 obj << /D [559 0 R /XYZ 56.693 117.425 null] >> endobj 576 0 obj << /D [559 0 R /XYZ 56.693 106.466 null] >> endobj 577 0 obj << /D [559 0 R /XYZ 56.693 95.507 null] >> endobj 558 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj 582 0 obj << /Length 2759 /Filter /FlateDecode >> stream xZo8_!|HTJ(iM wj.. Ţmʖ+Ms 9DN&/6?3gۈ89N^;^~qO +7|^ŌcwӛGL F{}}9ZO۬3%I% hx:GƊ8q_t0|:aAN\ыlfub^(M,4tj%K4x-qমjV VW=N+%6I(*Z~(捖]/,?=p>ɋ.bmYӯ V?ZFle%V?b_ڔ|mvOB~նi-豒@xG"0 P]/ڥVgmbKk8RTiv۠Oa=0?[{=XH[. \uS*[Uy1dڪ*>+~'$P8CcrlGqQ6SX$/K(} fiO[%_ͳ,f*eZwmJj@Qh?nG&aOC =.&DPDJOn 4?['8 /u6roZQնrʼnẊm=E]m9FwHt+Pl7(H4|.|R-[l{]9U:ѝY(7H06%5PLt֚߃ O]]OOoG1u_p>Jw<\ Sl}Zuʄh΋&IquaW NWx6Cme[e콜X770r_GHJb{/ :E͈-u; b8jH{=υ1PϿ4tOpm3~G9ԐST$d!BX_/Cw>A0BlZ5W%rFT"f-w0aҗDpRf@J ] Ba`>HC^yɳ,Zg}M^^}QCy~<B|<{4 XKIj;Lǿ]Dqy]f dH؊C6E xMm+_^բOhc41-@ ˋU- #؜a#ƊlMB-ÿ 2re]o+A9OSTΨBK}Ugå6YSX;\dC/&ԡbEVG>:&Ssgn\-j[wlj^ bKmy@_ߺINMc5aʊ.b݆wb73? ]2脌x ""s{J䅉c ^LyT S/g/6ˋ}'B8) =E ܯ}zڌ[4$^~"-/KY5\.g姪q7~Ż7?L6*~&?Iy}x @DG bfE>164}ީ(ȉ3qǑ0'k/N80 =FSXK ѡPuikBU$ F2}xneH6ּLk@rvv 5G žwlk"\M 4!ა|Q'X4|JGο =?:gl[ ̖AA% 2D_g"6^oHADϦSvгkg<=O" 547H9?fI80{+XHNgEVI^@mb* o 'ٯd'?Ɨ! FWQdE)sRruS4-_Ėiu?9aAT1?HC*(T jwr'ώ_p+A; ݓHUNWyvadg"K#VP(`-bBͯ^+jV&ݽiC?P#Z:?E!N BG* bPIQtwhm(>P8Աr`|CWo 'We[ ºO' X>\ތ!01fXW@ /dϘPO!0L8LGVzt߈T,߿W$ a ٭{VmhNwV.}׻`}e<(lJ,)ڀT6ՎZWa:7.ٕ =!0(P9uf5\jU$LbTQPPGsUه~=N\?cz| \|ڞd>:|^5iIJ<|> endobj 557 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.037 716.065 399.293 726.969] /A << /S /GoTo /D (gss-wrap) >> >> endobj 578 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [197.733 550.685 280.601 561.589] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 579 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.037 349.991 399.293 360.895] /A << /S /GoTo /D (gss-wrap) >> >> endobj 583 0 obj << /D [581 0 R /XYZ -11.232 900.716 null] >> endobj 584 0 obj << /D [581 0 R /XYZ 56.693 468.113 null] >> endobj 585 0 obj << /D [581 0 R /XYZ 56.693 462.135 null] >> endobj 586 0 obj << /D [581 0 R /XYZ 56.693 465.025 null] >> endobj 587 0 obj << /D [581 0 R /XYZ 56.693 454.066 null] >> endobj 588 0 obj << /D [581 0 R /XYZ 56.693 443.107 null] >> endobj 589 0 obj << /D [581 0 R /XYZ 56.693 432.148 null] >> endobj 590 0 obj << /D [581 0 R /XYZ 56.693 421.189 null] >> endobj 580 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 597 0 obj << /Length 2752 /Filter /FlateDecode >> stream xn۸=_!|Pf MmR`qڅ!۲4gȡlIqU>Y !MC˳g_I$T\93Gq|'`߹:7C.{qLqO<)V%D%6߀h Dx/],^vU+$@$gJ("?pb:=|!u#QpE3Y}:SΝr$ K3oRB¨BRE1ˣ5R7_®5,s١Nz/itdp9A3kӆ! x3=/|ˊ6`hR$7 ~2 =ה!DN#÷ף*IKQlBs>t+td*hv!Gp9BR ʒǠH"1qY>*ʨM}Ut҆SSz^S#gIjbdR~%ў+x-G(.%I);${J7H GI-(?fh~PTɄҁO(=@(*Cm45=$sPxO&6BM!B mc|޸AfW"F}"! (~:N bUO'6bM>b τ|J|!k*.h[mI/N6,M!$Cjwq8dqG&}&,DAyLhm=֛C$`6&iz*w/4^P`$úo|LC?VR$A-~ٛ`s>EYFE\ Sn?~] ̝Wvr:ŏl]&Y-؎SnXǓ|#vK>F {Klw6jfg>Ҭ:d7'ېoj!oVvi <$NY4n3Xf9 EEMh3.1M#X(`90$¤͘m[[,c NN8؎Ӧ&G!HMQH1hlT+e5Saw+u0XBO >> |pmQ l~s{wW/~mgPZ DK7¶l1y[#H%TxAiC<idƪuOb<6a-Rvr80DQ 8;t hom.=o;66J%auTknnét68M&Nw3Ձ߯4۟mp {ǿ۰Rܐ}=鮻:{Job(s/ ? .HNwցS=D'~rGs.Ӊ X{{}4 Gs޲dwOB!8Q /59e{.5O#~9BrgL? ~1)Lfm=e֛Cd^&qv7W0}S?;R]/W_4$p{I9^-'YUK֐˜ۑm^G?_"/-YIfV,4XtZ㻾:'u[OhRѬ$꒙)2-b@d%S >@|\"D6{f&Dwk ۼ/Q٦eǻ'us޾9^Êt]rz4y®yPlV endstream endobj 596 0 obj << /Type /Page /Contents 597 0 R /Resources 595 0 R /MediaBox [0 0 595.276 841.89] /Parent 533 0 R /Annots [ 592 0 R 593 0 R 594 0 R ] >> endobj 592 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.037 567.135 399.293 578.039] /A << /S /GoTo /D (gss-wrap) >> >> endobj 593 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [322.145 354.361 405.013 365.265] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 594 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [353.037 111.988 399.293 122.892] /A << /S /GoTo /D (gss-wrap) >> >> endobj 598 0 obj << /D [596 0 R /XYZ -16.307 900.716 null] >> endobj 591 0 obj << /D [596 0 R /XYZ 56.693 739.087 null] >> endobj 599 0 obj << /D [596 0 R /XYZ 56.693 733.599 null] >> endobj 600 0 obj << /D [596 0 R /XYZ 56.693 736.488 null] >> endobj 601 0 obj << /D [596 0 R /XYZ 56.693 725.529 null] >> endobj 602 0 obj << /D [596 0 R /XYZ 56.693 714.571 null] >> endobj 603 0 obj << /D [596 0 R /XYZ 56.693 703.612 null] >> endobj 604 0 obj << /D [596 0 R /XYZ 56.693 692.653 null] >> endobj 605 0 obj << /D [596 0 R /XYZ 56.693 670.735 null] >> endobj 606 0 obj << /D [596 0 R /XYZ 56.693 659.776 null] >> endobj 607 0 obj << /D [596 0 R /XYZ 56.693 272.981 null] >> endobj 608 0 obj << /D [596 0 R /XYZ 56.693 267.493 null] >> endobj 609 0 obj << /D [596 0 R /XYZ 56.693 270.383 null] >> endobj 610 0 obj << /D [596 0 R /XYZ 56.693 259.424 null] >> endobj 611 0 obj << /D [596 0 R /XYZ 56.693 248.465 null] >> endobj 612 0 obj << /D [596 0 R /XYZ 56.693 226.547 null] >> endobj 613 0 obj << /D [596 0 R /XYZ 56.693 204.629 null] >> endobj 614 0 obj << /D [596 0 R /XYZ 56.693 193.67 null] >> endobj 595 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F102 483 0 R /F106 484 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj 618 0 obj << /Length 2969 /Filter /FlateDecode >> stream xڵks63ב2K+~Hbv"sIGC+E*|qo.@Nm :֍XgGfG?9VdG[延X!6Yb}]|O\EZe jLE[e͝nU_EJOMPoF˫s>]UZeo㢍s\(1+|(ƭgGB aQ~v::}>bc1m?V1w\k>c%0(" [9smy̱]C=GRJQҰEd3'eѤ_*.<%:|A`BD9Xo#va?5ySEu%Uq"y,[IZ4'qӚzbDl̼׆:ʂUXL^uߨF\UF_pu;(X2 } P:+6m3W0$>4\]g.O.bP? IM6}v+z%-XI#y$F+퍚*]P-nxA~ڎ@Ѵ)+83r MFYRZI\jzu:v kp*2L/qiN)\A,%NT7UޟY8*ӸFih։ŽŁ3 q@[p{=e)K@wRTGA9 EYLHZ,uY)6%ΥQl4)rSuc:RR:8l;LtL{w}@K*L߿@"Wq;f ߺ=nákIH ղ%Ehͪ?3lC\ncG{G()@y* aE) F6ɒIa%/]z\z6mU<ͼ)*}-˷WoNg|9_٘^fhsBS* GKoY66(nAޑ5ቨURG\9r)3`&e{;|AsJqGбw25qVH inP8RʲBV=쮚cŠ̭Zrk9wԸN%PFK̔囓}.8ӻ\ 0`3IJJM$?GCȇa"z -0鲦)KZ\Q(vј%mw[y-. ɘ!l}M0 b f{5cA 1c21C+RXFLEڰMC I KCfOjVFhL4W:&^^Q6!XFB3[8=f yԖĞ^bЮpLf-a0@"c>b=VTЏ4|8heӹ h<&6KUe_g_ߟh ݸG§8 })Rom(3<ҝW:|$KvnLg W~n"{m[Fl97:F$M"I?B=``XaH،G|c|er(*f݃6ܻAmjCSۑWP^B%Io-9Y }1߉L:Q#c =?"ųyhYQV8k.~Ӈtu6lω4 $8o'KgO2}J`d#_یZ(4wK"Y'>%r0pȋX  M^a㘈O~}`d#?>we$7J7' ؇F1aqƱnٕ/,!}=6y;`),G>S釗y^~QDe/I@yD MvTJk)z\$8j 3zFj&2~:}ʋT)D(J[`¼AƦ6ePf!磺\@rY|ćc-AF%6oM@M2A-I L)ł WKtBu#۰bxC%XX|dC؎b}gFML@a vیDd?TKoY*y- 5iUQûRclrhWzS*UVk1Rjvm pzԒ[.YW?h[N ܤzҧ6Us}1‽4p `m&cj{,g"A+eB&RmC<0$)SeZ 6!C_]ߣ0`b'NԊTZ+xOke~<P2W.pMzh@sD1}T@ j-uzU0=A#5M"Ѵg=wL\vF*e&BN m#"z^S^mJ;Ik W0Tw "UY 0dY ,v-P]gD?~WvȺtz>tj&{cϲ9pdJE ?J{C"+|?Q.4# ?lo\ L3,)/l)VdF69-J\=>hsyrPc k!cV.ĥԼ%JZf|g'E1z<-nqbt<]$iwa}_ a{^U(O9~hÆk،=S޷WH$WdG5~{J8O <[ }ޝljo\޾vXfOc;~/a endstream endobj 617 0 obj << /Type /Page /Contents 618 0 R /Resources 616 0 R /MediaBox [0 0 595.276 841.89] /Parent 628 0 R /Annots [ 615 0 R ] >> endobj 615 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.102 694.287 426.971 705.191] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 619 0 obj << /D [617 0 R /XYZ -11.232 900.716 null] >> endobj 620 0 obj << /D [617 0 R /XYZ 56.693 500.445 null] >> endobj 621 0 obj << /D [617 0 R /XYZ 56.693 494.537 null] >> endobj 622 0 obj << /D [617 0 R /XYZ 56.693 497.427 null] >> endobj 623 0 obj << /D [617 0 R /XYZ 56.693 486.468 null] >> endobj 624 0 obj << /D [617 0 R /XYZ 56.693 475.509 null] >> endobj 625 0 obj << /D [617 0 R /XYZ 56.693 464.55 null] >> endobj 626 0 obj << /D [617 0 R /XYZ 56.693 453.591 null] >> endobj 627 0 obj << /D [617 0 R /XYZ 56.693 442.632 null] >> endobj 616 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 635 0 obj << /Length 2439 /Filter /FlateDecode >> stream xZ[w۸~#!A}ݸ{86G"!-E*ī")9x": fD;:W?,.^EP'&qb B'bYd'ԽTWneyKJ] zu{ 6y7`4gBhz߿>ȵeiM.)p,9,)$?Hȸ3$͢&Z4   N3PI7~N}$ǑFn(x¹5ҡC)ű^K0%5mvͲmD0+#!Z?QAD<`fF0VΘpd= n-Lj/\ߛ7see 7):[FJѺ/2IfsNǿ f2@}Ahu>)f=k(kc)T0|<$%/N2mgo^*uA=ڶyU&v~,3YVDFfVm- L˪E+!,F%n~w7˛7Z#'c kwjf״('5uE I2`Gq¢[pכ*;}UWdy'E4(*kSZLϽ4Am~OzuJhKDԽ1sA]]jXE(yhV94wMf[$6uFhY8ʹ$n:HK] -]mV,!ur3ntae*I*Cg0̡rd{ęKnϝ,[]GIѠC'@/4:8{@f86Xٱ9:@ZtXi*jƭɐjQ[csܠR:S \N+t.f!) Vkݧ5Ȏ'.{V5QVih9y{o@R.'B1X%TMK9հ)A@ADS6b؏\B&\uEOQ6PQVsd L<ݍG{,/orq-ߡdݡDͶ(BPkf\߿Q@ 뵀8)%AC^!IVu :U""x옌b]oW6Z6 N Du<`Jn Bm}qd?g ٚlqo(ϘC7WVeVw%F><4p!>{@0@hf/h=mb-jCJb7qF"mZ|}󀱍s5 B* |#q;td`Dx!c@f8\:зS8 ipoX딨uJ:s3'ByF7oxu!5pqA@76g4dCRpux!zz 0*:'$htEC< Bʀ*127ە&GܻOj]xaL}eub0xc!7x1HL,`yA4^ 1p}0t9,R'6 ^q#!_,O_AaBFB6~ >1q0|96g`6~ƱUٴO0c+h#'DZdyDr 3wb>:Gc ^N{#g*ܥ>Gwt |XxS\X<՞'q$O"3O˓L2k2)6iy_!dgA都p+A 0:bxQ]ԅ$&F@ ZPֲ CUT,+ua%'7UXyۤPF`n]u-l q9ݍYdzA7n%^(aMORIjE';bOLPUQ]?C__9Iw>.-F'n`UUxxσw_9cd_7v5)Ň"bcmI斻h> endobj 629 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [103.328 670.237 186.127 681.141] /A << /S /GoTo /D (gss-display-status) >> >> endobj 630 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.413 658.281 321.212 669.185] /A << /S /GoTo /D (gss-display-status) >> >> endobj 631 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [344.271 614.446 427.14 625.35] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 632 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [450.791 418.733 538.55 429.637] /A << /S /GoTo /D (gss-release-oid-set) >> >> endobj 636 0 obj << /D [634 0 R /XYZ -16.307 900.716 null] >> endobj 637 0 obj << /D [634 0 R /XYZ 56.693 531.874 null] >> endobj 638 0 obj << /D [634 0 R /XYZ 56.693 525.896 null] >> endobj 639 0 obj << /D [634 0 R /XYZ 56.693 528.786 null] >> endobj 640 0 obj << /D [634 0 R /XYZ 56.693 517.827 null] >> endobj 641 0 obj << /D [634 0 R /XYZ 56.693 360.072 null] >> endobj 642 0 obj << /D [634 0 R /XYZ 56.693 354.094 null] >> endobj 643 0 obj << /D [634 0 R /XYZ 56.693 356.983 null] >> endobj 644 0 obj << /D [634 0 R /XYZ 56.693 346.025 null] >> endobj 645 0 obj << /D [634 0 R /XYZ 56.693 335.066 null] >> endobj 646 0 obj << /D [634 0 R /XYZ 56.693 324.107 null] >> endobj 633 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 651 0 obj << /Length 2856 /Filter /FlateDecode >> stream xZYo8~ϯУ٢(QS_ӛE' Ŗ-lɭә_?U.;,>$"Gέ:\%pXўСI%T\͝_^N>yZf3j\*g>BS)ES.2$o%HZH~P*g8d h>oGtZX9a,v=g:a D~9r{\c!]MVGғ]ivUMV7uz,ɏk/C[2Ҽnüpb|kRĕy.rE] }S$MY7庨JOUOU-9!Zjrґ׃_YEyzy: שA}:m l^+c.Xy)H#A@6yuZQOpnp!x ,z$a8XYwM$ - Y6<;~{}~u׳/0Cbb |ʜ[ vQ E}ԗUc93$pQ+fd~lNͪYNYjtۭX7 \cvL W½((܋tL#6EcfK8 @ݰ-ZlD |/)+ Y m""-q`X&/c}'pZV?,p܅:9:- DiLi窡WuQ&YƑY}g&onlt<=)\ڂJ`G)eT:?iKqCx6(K5^vrqԤ$&džpc43io80UGv>`&՜PvCvMmHYQ'ic27Lk9tҘ4lM 4AfӏD=*XG"ATu ٫^OFy.QQXaB$Ǐ\-9 &}kr3IW hhgmiGB­cT(ыO_ǞxGlVբYtEկX9t{ŁZAǹf|VҮ(C]UOqBW* jg*#,'竗PU zawÅCUCUƛP̋̐swT C az I7A]zej ˩u@,.j25^L8*?or=y,s(ɱˍp[ҝ89Z]^9 b!x\ֻBt+ Gٷh u*|1P+MT]Tآ:e7Dxr V|C37\tuwCB,SRn)U 6t3G-bc "hn Po{]L >U?8/f^{yzd2 DD?(!".pD|`>nu?w!T q !4 F`OitXv“s"fw5K*qTFu Hq= s?;6ߘ# NUj{Z ?} ޭhguZw(&@%YN' m գzZOsHp':ڵ.#&;0Az_R#=fRFiNJS ՝NV tafYi_lO|?N(u X^#5@=B}׾J,moMNNf3ܬG mdDl7 JvHl5#e> G^6w%?A RCg(@eO( >7BjÏW~80؈o b0npKyG.J~3B)K [^C႕@; Ѻ|qb[Qgfjyd> endobj 647 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [307.21 500.417 390.079 511.321] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 648 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.116 152.276 298.673 163.18] /A << /S /GoTo /D (gss-release-name) >> >> endobj 652 0 obj << /D [650 0 R /XYZ -11.232 900.716 null] >> endobj 653 0 obj << /D [650 0 R /XYZ 56.693 739.087 null] >> endobj 654 0 obj << /D [650 0 R /XYZ 56.693 733.109 null] >> endobj 655 0 obj << /D [650 0 R /XYZ 56.693 735.998 null] >> endobj 656 0 obj << /D [650 0 R /XYZ 56.693 725.039 null] >> endobj 657 0 obj << /D [650 0 R /XYZ 56.693 714.08 null] >> endobj 658 0 obj << /D [650 0 R /XYZ 56.693 703.121 null] >> endobj 660 0 obj << /D [650 0 R /XYZ 56.693 397.919 null] >> endobj 661 0 obj << /D [650 0 R /XYZ 56.693 391.942 null] >> endobj 662 0 obj << /D [650 0 R /XYZ 56.693 394.831 null] >> endobj 663 0 obj << /D [650 0 R /XYZ 56.693 383.872 null] >> endobj 664 0 obj << /D [650 0 R /XYZ 56.693 361.954 null] >> endobj 665 0 obj << /D [650 0 R /XYZ 56.693 350.996 null] >> endobj 649 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F110 659 0 R /F102 483 0 R /F106 484 0 R >> /ProcSet [ /PDF /Text ] >> endobj 672 0 obj << /Length 2310 /Filter /FlateDecode >> stream xZK۸ϯQJ`wcO9;!Rq(Hb"w CҎFlU9A燖ws[zWt)NTLxӹytsx}:ѹ.u-_D/ԧ7аӿAHOzK7n|gXb^,),ɀ o(pL p67ӫ_18zQE>J9|BY|F  w+ړДaTYVU5c~%CG,rh$qEA HTz"83E8'Qy>oL~#SNR$w`,|r*U쪔ȪlVkGy'JQjM4kEh >#GzB&qcT|"BpE9VFק$;_h03{Q*8LZI'E^'4ى|=hV'PE |1_˙} 6?lNUuy=? =YCҿ$(+,ʅtQ*FoM.A MDGIy@V6`uM̸4_~7t&-rXԠYdiC#vm7V۴2ya*tie˴2g9,x"y8֫Cczc1dgH|IszU:fUvE{<a(M=t2CYUaUjqw~FGrSnBDTνުc=EAn%Ia ڔttmo.2gڨШJ3OݻM hH6\q XxnVx ]guwXo$Q {ڋ郛[D*yLa@g2چ"u=M2wq2De։  ( T뢌$Vj]DhUZ568GsezRwto6HhX]қt\遂a1:p [']oP0>a~x߿0FI3mfC3&LPu&c6}3e:dl p%>fqd<1Tv[^TB˨i0 `L&.4\mǭcQ¹l쳈3LގE(&*08uϏbT6֏ %fb]9%EFw;Az?j!CN8/W# 3rfO/[@_=-蟶n!> -bfh@5#‚<]~Y.#^RP \~ @ø augYXȂYj.Xi@8䀉a8򚌸˪ *V:vf?Ar%!;]䎯6Imgv #';=jwA, 6s4)8x| Q)(AO.Xz x5< h;&x0z v-\E/Ll1a<;)a'De2̞xDIK'iyr6ӧ\3"2uOMYωba. $w0H`Ŧ_N>V|ڔ+*Ɲ_ ZvI.{,ukw軆|ZH-d P8m ~fkǬN&ͱv4l. dLKN"љi ͹2X6 G~&Ձ\'{c<ΛS{UJL H-~n(.~1,Yc;w]ڽw{={^h'qxAC nWl)%3$ŏ}th 5 r;^Wl<8cͼduԓ2@ܦIKn^Q巌 ]o><<nTv^N$4*Vo㐡Xc=&Ba~@GwҦ4J}']13g=|cYw*Ox(`ދۻv;i endstream endobj 671 0 obj << /Type /Page /Contents 672 0 R /Resources 670 0 R /MediaBox [0 0 595.276 841.89] /Parent 628 0 R /Annots [ 666 0 R 667 0 R 668 0 R ] >> endobj 666 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [275.719 648.86 379.37 659.764] /A << /S /GoTo /D (gss-accept-sec-context) >> >> endobj 667 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [403.11 648.86 505.804 659.764] /A << /S /GoTo /D (gss-canonicalize-name) >> >> endobj 668 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [337.387 571.151 420.255 582.055] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 673 0 obj << /D [671 0 R /XYZ -16.307 900.716 null] >> endobj 674 0 obj << /D [671 0 R /XYZ 56.693 739.087 null] >> endobj 675 0 obj << /D [671 0 R /XYZ 56.693 733.109 null] >> endobj 676 0 obj << /D [671 0 R /XYZ 56.693 735.998 null] >> endobj 677 0 obj << /D [671 0 R /XYZ 56.693 725.039 null] >> endobj 678 0 obj << /D [671 0 R /XYZ 56.693 714.08 null] >> endobj 543 0 obj << /D [671 0 R /XYZ 56.693 488.58 null] >> endobj 679 0 obj << /D [671 0 R /XYZ 56.693 482.602 null] >> endobj 680 0 obj << /D [671 0 R /XYZ 56.693 485.491 null] >> endobj 681 0 obj << /D [671 0 R /XYZ 56.693 474.532 null] >> endobj 515 0 obj << /D [671 0 R /XYZ 56.693 304.822 null] >> endobj 682 0 obj << /D [671 0 R /XYZ 56.693 298.845 null] >> endobj 683 0 obj << /D [671 0 R /XYZ 56.693 301.734 null] >> endobj 684 0 obj << /D [671 0 R /XYZ 56.693 290.775 null] >> endobj 670 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F110 659 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj 690 0 obj << /Length 2627 /Filter /FlateDecode >> stream x[ߓ~߿5߀e]ҥRRHIO3#I,$'ai[΃7?Mo^ P t GR$=' 1ϙF!}q$o|wd߰'_`!!(B{i}qa W P8>$R{y9C((K}3݌7;ɀ9^@ԙoJX\;`Dʙ7CkX<@KCQxE<˒hVĥVJXuyR!scpe_(E8y,j5==f'ЂUJS93eIn|6p\pR,wg$-_j'9_Rb|0`0Oea $d5))1ߩ \'iϊ2,EK'Ź {LS~GtV 0 KL{p7~{H ?L̸C") OEoҺCC7]?gϋ2sE6O2cR.} 6cv: `wSUyn<\e0j23 ;24Qjґz]ZB}OMnl[&i*؈Ec^{콉Vvren*{RMewՊùi%i p&ڀuWSm0ЋGji [[u.i ܧnh͛hϢdYj#uG |u;~0T+pe&')L]qA!! l.t&ѫi=AXq^ (Nv P fjS{n̶Hc!&d6R&rB-lVɼ)<ݶY^MR1(Rr[U*E yLK,uUcj6=&$RnH?^Sפ2T qVmpP'=CR[)U 08@-`jDTUEYlX&ˍ܆EV2v eGaoߎލoѩ-?027c!J`T\mV&:$ϙ2棾ўxanܛ1q-2.>J+-Jϐ;ư q,@|7O}/%Գw  H'+sIITUJQO!*UfU@UDe3ɩ#/- )qf`,VeO_+|]8¬XzEaQr_6he[Rdwo^C!0As+匏5]LbbMo(: =|H}mNh2xg#ЮXVy3e8jV+]ڰnh-]LtZkMFnT٢ݞƍ&'ksE_|eJ]88RLtσ?EDWh%/"Վ%/EoS?"B .eiH^ yʪW풢UǺ _ݫ%#I!/g׽.u^>u| jՒ^geݰ WK~G:+{ vT DǪ%WGM%I41g+S'Y~aG)#n8*}9,VѦk\gU/-`(*SiV}0}4wGWU/̧۟>'n&N;C O>=́5= endstream endobj 689 0 obj << /Type /Page /Contents 690 0 R /Resources 688 0 R /MediaBox [0 0 595.276 841.89] /Parent 628 0 R /Annots [ 669 0 R 686 0 R 687 0 R ] >> endobj 669 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.902 674.838 283.661 685.742] /A << /S /GoTo /D (gss-release-oid-set) >> >> endobj 686 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.083 367.361 360.64 378.265] /A << /S /GoTo /D (gss-release-name) >> >> endobj 687 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [335.704 262.828 423.463 273.732] /A << /S /GoTo /D (gss-release-oid-set) >> >> endobj 691 0 obj << /D [689 0 R /XYZ -11.232 900.716 null] >> endobj 489 0 obj << /D [689 0 R /XYZ 56.693 739.087 null] >> endobj 692 0 obj << /D [689 0 R /XYZ 56.693 734.13 null] >> endobj 693 0 obj << /D [689 0 R /XYZ 56.693 737.019 null] >> endobj 694 0 obj << /D [689 0 R /XYZ 56.693 726.06 null] >> endobj 695 0 obj << /D [689 0 R /XYZ 56.693 548.048 null] >> endobj 696 0 obj << /D [689 0 R /XYZ 56.693 543.092 null] >> endobj 697 0 obj << /D [689 0 R /XYZ 56.693 545.981 null] >> endobj 698 0 obj << /D [689 0 R /XYZ 56.693 535.022 null] >> endobj 699 0 obj << /D [689 0 R /XYZ 56.693 524.063 null] >> endobj 700 0 obj << /D [689 0 R /XYZ 56.693 513.104 null] >> endobj 701 0 obj << /D [689 0 R /XYZ 56.693 502.145 null] >> endobj 702 0 obj << /D [689 0 R /XYZ 56.693 491.186 null] >> endobj 703 0 obj << /D [689 0 R /XYZ 56.693 182.738 null] >> endobj 704 0 obj << /D [689 0 R /XYZ 56.693 177.782 null] >> endobj 705 0 obj << /D [689 0 R /XYZ 56.693 180.671 null] >> endobj 706 0 obj << /D [689 0 R /XYZ 56.693 169.712 null] >> endobj 707 0 obj << /D [689 0 R /XYZ 56.693 158.753 null] >> endobj 708 0 obj << /D [689 0 R /XYZ 56.693 147.795 null] >> endobj 709 0 obj << /D [689 0 R /XYZ 56.693 136.836 null] >> endobj 710 0 obj << /D [689 0 R /XYZ 56.693 125.877 null] >> endobj 711 0 obj << /D [689 0 R /XYZ 56.693 114.918 null] >> endobj 712 0 obj << /D [689 0 R /XYZ 56.693 103.959 null] >> endobj 713 0 obj << /D [689 0 R /XYZ 56.693 93 null] >> endobj 688 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj 720 0 obj << /Length 3103 /Filter /FlateDecode >> stream xZYF~_}x&ؘ-;a%$")'~jGN"6ꪯ.ʙ&͏ބ$ȋ&$($odlμбުR_T͓yk/8`izy'U*ʹYy ,X|d)=;v,X}'n7߸3q'adG?S׎o>3@di2yI:G.&7?8"Y)vYjxmU&J$VN e= ֺ*5uCkcOg>4{YQۇndVl9/*fZ 4 6gPRτ5"'h*k8|!k;:cZiNJ6ҪSQnU>طhuuN+w|z!xR8P||}ͻi G˗ȱfZLЪOa21^j& ̈́G36@C궮HyMU+?[BT$ [yWz-sj_ϋ(wr|򣖸LD~i:Ɂ H$טD&l dS*ǃ#ko <}LVyU>}NhBDgNQc=qXWZ8vJc^ZJţA0a옅{[+xdQ 'TKBDPO.'|UۙV8Z /xo>V2hdDY/ol {d G}۟ԫ7ƕ2Ӂ/J}C|U]mgG}*(rC=dM6|-;OA'B<\ݎb\p+ b,F(`tPO gLu%qL'a*9FqT{D^3G ؚBb~v@ ~*z*GqUз 9{0{0m{ō6: Ó"%ab d6h T 4ev z, _ђ혌kttەL> !4Oޫ>+s}sەbp&R\?,qWDYJql'A}GDX` ,9FݚbjN[pz5Gj=C}%DCAhQeq,H0GtY!]wY) />5;\\rgy=$NsI8L,bbRdޘސ'Stcѥ88 Z-G)ɢu6Wa%K8]3hI*/׵jNu7Vl/\o2u.QWf-._ZR6L2S)'kK g[PwjO%E~=ժPVݿ7m"߽cJ \T//-s:v-9gbnk"SgcF &=`;.5 ;;"SQ?}?jFƋY!o cn[\ԋ|LV w%^~|fHH鰢{ D+h& |fcfTFhQ- ڢJiL:dc7jn~[6K~5"m) 7O_0_):J^\[atS2k X@}~qw^D8ALW9@.lDp-?9O38g+1|E]#{X&?g֌[3DI,NIb+S=(GfPxIRhWb 8d_ Y^rH2r›$t Im^9J㿹K><pq*ldangF*4i(?/q/yl{ \ӶE`32bsZπ_ҫbuuMlQXYP\H =v7j|0U)r4<+ )K)>L>)G{!2u *[Z|R4\.;PʉUj$X?S :-e臧ê*rY=,q F>lw#I^ EgٓSյG+jN6$[cL > endobj 714 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [511.433 435.118 614.944 446.022] /A << /S /GoTo /D (gss-export-sec-context) >> >> endobj 715 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [484.878 333.499 565.435 344.403] /A << /S /GoTo /D (gss-release-name) >> >> endobj 716 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [245.74 289.664 326.297 300.568] /A << /S /GoTo /D (gss-release-name) >> >> endobj 717 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [281.644 277.709 373.14 288.612] /A << /S /GoTo /D (gss-init-sec-context) >> >> endobj 721 0 obj << /D [719 0 R /XYZ -16.307 900.716 null] >> endobj 718 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R >> /ProcSet [ /PDF /Text ] >> endobj 725 0 obj << /Length 2925 /Filter /FlateDecode >> stream x[Ys8~ࣴa1lYoS5)-Bk)R!q_ 4xRv_L}΃CWW/~ND"9'd.q.q>^m^\ վLWW*[xwH ײy3MLKXN: A0z0)g?Wt`A0Gď\')wV۫R'wy#`pׇv^zEth_JQ,yF}da:zϚφ@!ᰊ(2 ٶH¥m/Ȳ_FbcU䵜31\>,{¦>KL~כ`|@nNgЮ3vrUĬ^[غWʰVe*"'@ָr |ׯUϼQO ȜQ#$!gY˼:+8]vwo޿V=?"` NU` {ˤu@iw@w=wPڜj)3NJ5%B2^dcoUe[佣 υZ>nY_ ,ݦ5T֍ez^s|U3$ #κ\-j{#7 aFO&b@15Ч;YM|pmޡmA@{7}.qQK3a0oi}eY@h߾FE7tzi^K0`4{vV`+]Lilf2'(C0X0=U}Y՟i9] DP&3{(4"< TǨb_vc g@8ә=mBӯJQ42i_OE!'TSBcy4pJ8&yeŜ#l<|/WϠxዺe a4Qm!g-38!旪kW H߆֛rUu:P1HU+Yf\M ;,kjD2M*jx`{OiM2mQ$uuS-+rCNj,&UVJ-EE}%ā*v053 jsVbGƿiʢ.VEv07L .h_$f7LV0kJjs]X*r=\yj1R+L֬X!1WbX R*96`0v?tbmzvkW JQ?8K _߽Ƿ/,>&ca*?* FԖRF!տHc*4< \F^sN/)}AS3+n^t~=Ґ7I1 |k|t^2?hS!{]XU6ژ"eC`ț9nG5tꩪ#`}zE eyi%@3QX98qw…&o̴֕* c+|_V5YSfaE:Q*4٪FХUChE:t=fD#}nV5_ᠺJnv֧6<|O9tukfP0rU9'ƇŞA1cl\mƔU:v^_jl$-̄ a  =o5g qm9>Tunk+hh8l69W"f^[~Oh+s ݩ7< r':҆)TY(BO\ai!5m@,qc_Þ3173$z \ m F;^g gVebm6t\Fm;?׃ o8<vf0o;W7 Wn\36< (M/h&׿p0Apw8tl :`@/=D@V]BN4U#5֎d dEy`z!{.Dio\:r;vEĽtfOcT*;v^0$2'jdfϸ`S6w:(rFc5> endobj 722 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [440.145 512.622 530.684 523.526] /A << /S /GoTo /D (gss-wrap-size-limit) >> >> endobj 726 0 obj << /D [724 0 R /XYZ -11.232 900.716 null] >> endobj 727 0 obj << /D [724 0 R /XYZ 56.693 666.066 null] >> endobj 728 0 obj << /D [724 0 R /XYZ 56.693 661.193 null] >> endobj 729 0 obj << /D [724 0 R /XYZ 56.693 664.083 null] >> endobj 730 0 obj << /D [724 0 R /XYZ 56.693 653.124 null] >> endobj 731 0 obj << /D [724 0 R /XYZ 56.693 642.165 null] >> endobj 732 0 obj << /D [724 0 R /XYZ 56.693 631.206 null] >> endobj 733 0 obj << /D [724 0 R /XYZ 56.693 620.247 null] >> endobj 734 0 obj << /D [724 0 R /XYZ 56.693 609.288 null] >> endobj 735 0 obj << /D [724 0 R /XYZ 56.693 215.531 null] >> endobj 736 0 obj << /D [724 0 R /XYZ 56.693 210.659 null] >> endobj 737 0 obj << /D [724 0 R /XYZ 56.693 213.548 null] >> endobj 738 0 obj << /D [724 0 R /XYZ 56.693 202.589 null] >> endobj 739 0 obj << /D [724 0 R /XYZ 56.693 180.671 null] >> endobj 740 0 obj << /D [724 0 R /XYZ 56.693 169.712 null] >> endobj 741 0 obj << /D [724 0 R /XYZ 56.693 158.753 null] >> endobj 742 0 obj << /D [724 0 R /XYZ 56.693 147.795 null] >> endobj 743 0 obj << /D [724 0 R /XYZ 56.693 136.836 null] >> endobj 744 0 obj << /D [724 0 R /XYZ 56.693 125.877 null] >> endobj 745 0 obj << /D [724 0 R /XYZ 56.693 114.918 null] >> endobj 746 0 obj << /D [724 0 R /XYZ 56.693 103.959 null] >> endobj 747 0 obj << /D [724 0 R /XYZ 56.693 93 null] >> endobj 723 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F52 38 0 R /F94 66 0 R /F102 483 0 R /F106 484 0 R >> /ProcSet [ /PDF /Text ] >> endobj 758 0 obj << /Length 3400 /Filter /FlateDecode >> stream xr6P$WE ߏi2qf5qc)I(C!x~(dj['hhtWO+w껇o~Udwdz$b7Q]νڝrxֽCSՍ7{l<'"[NUǼ9U $&xj9Y"D,J7ᝮn`Cw孢؉`djW_*$9a>zy1?\{Kw9˹n] e^mTjh2xhsw\o4[?b SWUlA(`kAyd؏]#[x(wGzg27tdC6=֧~mOtE̢x];?^绝ͮmc[g aQá= e#;1Wh 'Oá3'Y][|ǩ=a7^\d?uv3Tp>B)Ct=8.+A56}]}Aa@_US٘42aS |jvx_~Iu"񇏞'bE(OU!\.\߉),.vi?`v)zՎa'$"'w"r1PhtDfӵGtN?J'1@VTY҅YL ^pWD.<)U2g+; G\xX|HIaṄ 8d ' xzp6#ly|/caQ~zoqF QxH/A@s:LsyоV`I=?R/?pr+jTɒZCK?-1{< \Y쮺7޽ZB,rx͢\W[G%krm<ϟk}}uy\OȄVIъ?4(d&'y4iׯo~~Q$|/J* 6E6L3(  #R7z Z]IV[GfKۡnYK {h3;[V% ށImˎ-\H>lg2݁Wn$O`(e>&AbuJ08]߷L?ggVp9CXZ?,f eR^\@jmpB`53Cﯷ9,1!趌d0Tց8NPR, !L{{!q{bH%K\N_ xUSjTDӉ2Y , r,A{T A6bKRCj1לE2K1AJ1)q;YFb_ ͮm!g%88` +9f@p^ZwbunP A79i4襍638e w9K &,Kl @.&g6Vgf9J7ٰOvfI32f gbG~}CIo̕ev=৞Yb'q E4o3GkTm$1xQb.}ȗL'JB{zl$rB8T‘;9?e8Y|)Qf {Yiu0̄f?. _{Cllֳ|m܏NkVlG*'3sDNh 9 Jӕ? lڪr^XtGFB2Ib .s[r]P3)}dNKYIڏ<>Y>qɅyW<$z-rőmg"|ƶdWGBǂz 2)=}).`9[%{^!]E9; rNvl6,DPS2rVՌd+7iJ7Ė hlG Mҩ_$1 =#ZGe8D&!~ԥGhauae:Oboan> endobj 749 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [144.413 656.289 235.909 667.193] /A << /S /GoTo /D (gss-init-sec-context) >> >> endobj 750 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [467.807 656.289 571.457 667.193] /A << /S /GoTo /D (gss-accept-sec-context) >> >> endobj 751 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [153.811 429.141 231.599 440.045] /A << /S /GoTo /D (gss-acquire-cred) >> >> endobj 752 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.581 417.186 565.435 428.089] /A << /S /GoTo /D (gss-add-cred) >> >> endobj 753 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.809 405.23 202.933 416.134] /A << /S /GoTo /D (gss-release-cred) >> >> endobj 754 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.389 305.604 287.243 316.508] /A << /S /GoTo /D (gss-add-cred) >> >> endobj 759 0 obj << /D [757 0 R /XYZ -16.307 900.716 null] >> endobj 756 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R >> /ProcSet [ /PDF /Text ] >> endobj 764 0 obj << /Length 3225 /Filter /FlateDecode >> stream x[s۸_G1~=l]NNc妝 %Q6;#_],@Rƞ<-%UG]+d˔*~_a1cND}Jizڇ$',1+,sBƭġb0)C+]Lf^0XеNs+^kXrDY_ȭ3xuw Ӊan@$ X̮R*<}VjJi^gfn-agkp{URezƺ(z.)mZHl!d};m61w}{oZ! .I.&3Y[)GՓ$73зgDJeZrVjժ*YRTV?||qam+ӱCud C=`YJ N/4ţ&n-:+rհn+5v#{gKB8a݅쿯bA'ʠϰMhxs D7‰&rHIZA,tPpƐ9ySxS#&-{gTm XeQ۪9&A9X b=Q/HVT'Qׇl@ZRrw LQcM' :u|sWer/񧤗z,13l^eJ#=%DLLa%p .Ȋl56X¾Cw7 pJv߼,z9X<+6fc Av@7Pl!4vK)FTۅ~(Kdo.|UQ`  Xk-.\R4pd928MX6YiQ y#f9f=5oWS}hpžFuoFwG|*TwTpDjtZ4:!3Oo'?OoZ1nvʙ_2} ttt[cYx+ yt,:]cB6 7N:yJ@g(qժ5ifB[Hh~8.Hwfv&o!͚JATwO$_ \ ?;̏Fz"]퇏' flh~նC py=0Cs<}&YlR"e(6:Q&|T,JDl+?R4,I#T^<˖Z:V.V~u5s@TD6fH}uz `k=if3[SӫKl2|4g$YƝdLգT%9ǒFaX{C6T~?ik t+i?bPh,hhէ5l|zn>)T!p0єr)k]u;e߬zzR2i7x8Fڃ ,4ګQ)nn64wS5R\|eO陚rU*BS8uygSO :٨]U ctU`Ϡʄ[[ej; ppO' K\-&yU9f.|V#Տ͉Eǰj؎A.|5o!5xA K1qH-D1qEVg6FW7ڛca`c?7g3{px.X MkWQ`GS:>~o?f%(wp5NJa^]v ϼ} 9k)  ӴIO6׻6v6/6.0CO)INCu|;4yg3;1jwظξB7]I+<ٗ\!|quh Nɖj 8~DyՍ(r.iqߢf@y>ۀǶǜ ;F^U ̛l^*@qF,Vax zQm7 Cv'd8Y)wu(Ki"P ӲRÒr"8ݻ:DʍAޘt ƁeQ45NUFwCꛧZf2}nV^]2%ӯ7/k3d5I>&&9+wN)n>z  '->ңX!ʿ΄aIUe]Sm4v*$qEB>Kp4Y#Ul?>%d)A1~qtJB U.B ]tj&*JvPti0&i2!gnHI҄!ؿPӺ!M7rѸH+`~7e,,B* h"eRPʢk2ǐE,pT,`A,Ёn+tE#_+|"h ԗ>e.r0}cCS@RxR,}ӟUPU%U;ggXEO 2dh* lxd~#ET3A(#ꡒVQ&(]%ჴf>Rw0)̇t2hR=+zV_ ))t虡P&TXJ*DcvvgҞ^fMdj@RW Y).6 !?&tt}_~!"H~6_D<*};4#ˍuJu@Y.J"sy( IE=:e(e"Y09^u'Ϸ_1J endstream endobj 763 0 obj << /Type /Page /Contents 764 0 R /Resources 762 0 R /MediaBox [0 0 595.276 841.89] /Parent 748 0 R /Annots [ 755 0 R 760 0 R 761 0 R ] >> endobj 755 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.942 722.042 492.065 732.946] /A << /S /GoTo /D (gss-release-cred) >> >> endobj 760 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [442.616 691.499 530.375 702.403] /A << /S /GoTo /D (gss-release-oid-set) >> >> endobj 761 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [280.083 283.615 360.64 294.519] /A << /S /GoTo /D (gss-release-name) >> >> endobj 765 0 obj << /D [763 0 R /XYZ -11.232 900.716 null] >> endobj 766 0 obj << /D [763 0 R /XYZ 56.693 491.317 null] >> endobj 767 0 obj << /D [763 0 R /XYZ 56.693 486.677 null] >> endobj 768 0 obj << /D [763 0 R /XYZ 56.693 489.566 null] >> endobj 769 0 obj << /D [763 0 R /XYZ 56.693 478.607 null] >> endobj 770 0 obj << /D [763 0 R /XYZ 56.693 467.649 null] >> endobj 771 0 obj << /D [763 0 R /XYZ 56.693 456.69 null] >> endobj 772 0 obj << /D [763 0 R /XYZ 56.693 445.731 null] >> endobj 773 0 obj << /D [763 0 R /XYZ 56.693 434.772 null] >> endobj 774 0 obj << /D [763 0 R /XYZ 56.693 423.813 null] >> endobj 762 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 780 0 obj << /Length 3211 /Filter /FlateDecode >> stream x]s]dG>'Ǖ]ZLiQDC FѿpBٌN_HaooowsxΛo/^GY|ā'N W$|8y,YʺXVu>Q[4ɋ7O6E{>ȍe}|+$IX Ia/Yf %XG;]\/~aC(vL8I滱8ŏ?{Inν;﹁y^³ha^L5BNho.ZDh\x nN"H7NG~~nfN-Al|I g&5+v U;>t "Iű([8c#m@M0\ i葝Sllt1(fcMf@j \OKϦ663lb6"gưYziVb?_ T%)@V6/;"MEl"?O)"~/qAj q{V/OSatN{-bk oZ!r餭9гV6Ն茶7_hnk?9Lgd'w:z-zSWǶ(혂Y݃އ&}0˳|v sHp-*5L;k;h-WX]6Rj# +^_i=of M1}<^ET{_cc9vC/ P/wEE ڌA+J^BZ;pd~7UW,Ɖ$avbd-s: ~<{ 'ɀ I fPGI0۫ HRKWҤQe ,ix-V[fs[=ķ r؏qQEKXv|3DTِn)(@SU%~K'7%21|M l I"FW>B>?.c|8 {5= Zst ֦&zV *^"Ps[yݭr?6\ys&pd a'pH{y^ȖNY2 Ճ)W)X,{* .i( dxENcOzWc%g\* q4͒L9>|6JHu,GS L[UH{ gqT{97'$M2 8jeK%v+;֦>#HI%sVr)V&Nc^& 15&}Eg fGl 'J&l%RB6)ĬeSخBH&0Q<wi]o)"BiYQ "ɿ^$fτ#FXBq!; C v\!6HvS,>KAuO~M`f Ǻ#&>rWò*m(C7-pئQqACYhq,sH|GD9^1DC,l&e4#s0y=gqGbjD4mZ #\Ldn4PTWpޤ.k ]w.tV|lۭ]纸&w=R H7rasՉo2pmETH"r(}o߿_W褽m)M OGf`޳V+HT}F [‰-U̱>p*uS7 3[ڬJ3Fh kW}n rۗ߼|6oUA3TJ'Tс.ߍҝIoZetw gH݋=םywR H>6z>6g W`n]<[O .%nd#_`&=Uqz}2X&)bM$>l>~?Wg2lb?Ŏ"_u|'/^ A"_vfC2%\?# μO^g;Ē!~3L /59KNw!ߖpIQ7W#m\Io%vqo%_rv'7cj?}zZ>ʥT#H]#{\/U^]酥j\̢R:k^qBefcKVԇ|'*TzU7VGq.`ԺnɺX> endobj 775 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [402.452 648.86 505.963 659.764] /A << /S /GoTo /D (gss-export-sec-context) >> >> endobj 776 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [301.951 373.891 384.819 384.795] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 777 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [343.176 136.336 445.172 147.239] /A << /S /GoTo /D (gss-delete-sec-context) >> >> endobj 781 0 obj << /D [779 0 R /XYZ -16.307 900.716 null] >> endobj 508 0 obj << /D [779 0 R /XYZ 56.693 739.087 null] >> endobj 782 0 obj << /D [779 0 R /XYZ 56.693 733.109 null] >> endobj 783 0 obj << /D [779 0 R /XYZ 56.693 735.998 null] >> endobj 784 0 obj << /D [779 0 R /XYZ 56.693 725.039 null] >> endobj 785 0 obj << /D [779 0 R /XYZ 56.693 714.08 null] >> endobj 786 0 obj << /D [779 0 R /XYZ 56.693 303.274 null] >> endobj 787 0 obj << /D [779 0 R /XYZ 56.693 297.297 null] >> endobj 788 0 obj << /D [779 0 R /XYZ 56.693 300.186 null] >> endobj 789 0 obj << /D [779 0 R /XYZ 56.693 289.227 null] >> endobj 790 0 obj << /D [779 0 R /XYZ 56.693 267.309 null] >> endobj 778 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F102 483 0 R /F106 484 0 R >> /ProcSet [ /PDF /Text ] >> endobj 799 0 obj << /Length 2305 /Filter /FlateDecode >> stream xZ_s6ϧ71"EJj6n䞶bѶzrq$Y:VI$ ?@£w~ԋI,dD^sC.>~x]\tnl[fd3e:RAno>0}RsUMd3@%ߋ@%Q d$7$R Id̽0̛/>FށJ$#AS=S¸ʻmY5Tq:r 9aKc$bT޼]Y>P0'0z(k6gc$4yI ˅gK4h Byl\zq3㵃ܼ))=@2j}hKY0'BZ-~ <,/iU'4<60!l?0p+{Dp gd AX@ht\ '?0o IJsXGH(bFO<լdWJ* }fbcVuY0h4ZF{Xfil'y4{Rԗ-pZ7I4Nz},q }?5bg\:,m劌'ܧ}h_Tvk%K}oU]nn,bnk5[&yV552͋)mY /۬Txr?qc̍)?([$$ft1" YJl"-#ufG?v6jn4UϮm hЊmY[@ħ ߸7о~b ęirhlN1FC4F(v`eNVb=jG8fMxDh5:̖6ʓfȭ/ yѼVnWCV[^d61|p.J%rۼuCç~Å@ԇm>=§n>Ӈ89fnvzY)'z'!=J"@.I{|E?<$q t0Õ=Ž#]ا {O{ !/ 6a3X^)e36d8|lʾāpq\!"s bF|i:ߥ)i >w6:MmRYeƞLq =a Yq~3 `h=W"K%t#d`4k f]ʴ2% ҚIDaJh$eV̡@Ubp|dǠ^&E#>4&^ x)]j{DHK I>CǴ਩Ӻ2B;VlpafP F xxH/<3NWԹarf[ Ѓ,2 X9H\DM(!D]֙ 1j_î,XqՅݺiYc]b Җ*H&5enJUܧrgu│_5VنS5ӖwӨ]tHҧwԭ[m2miB[=8boWiTzu]c%nvoT`e_=(\ر0#ӂ!#9d-jGe_b,F#!B8 6"yUTqJ81$2?/,=ӄNHzHQV͞(c)[-)c|S݄3lqgyKOա3ܫ@fmk/ݏaX3JVUaǰRnX`9Mo-د%{oF)W_3}X9O.Wj( 2` _?"3=`~VƵ)ERI~ x.UYuhl]/lVE9+~_T^ԯ?;}?/8 endstream endobj 798 0 obj << /Type /Page /Contents 799 0 R /Resources 797 0 R /MediaBox [0 0 595.276 841.89] /Parent 748 0 R /Annots [ 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R ] >> endobj 791 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [521.585 683.729 633.703 694.633] /A << /S /GoTo /D (gss-add-oid-set-member) >> >> endobj 792 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [299.46 613.991 387.22 624.895] /A << /S /GoTo /D (gss-release-oid-set) >> >> endobj 793 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [250.38 465.103 364.152 476.007] /A << /S /GoTo /D (gss-create-empty-oid-set) >> >> endobj 794 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.135 215.592 287.452 226.496] /A << /S /GoTo /D (gss-indicate-mechs) >> >> endobj 795 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [291.302 215.592 369.089 226.496] /A << /S /GoTo /D (gss-acquire-cred) >> >> endobj 796 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [390.504 215.592 467.196 226.496] /A << /S /GoTo /D (gss-inquire-cred) >> >> endobj 800 0 obj << /D [798 0 R /XYZ -11.232 900.716 null] >> endobj 801 0 obj << /D [798 0 R /XYZ 56.693 739.087 null] >> endobj 802 0 obj << /D [798 0 R /XYZ 56.693 733.109 null] >> endobj 803 0 obj << /D [798 0 R /XYZ 56.693 735.998 null] >> endobj 804 0 obj << /D [798 0 R /XYZ 56.693 725.039 null] >> endobj 805 0 obj << /D [798 0 R /XYZ 56.693 555.329 null] >> endobj 806 0 obj << /D [798 0 R /XYZ 56.693 549.352 null] >> endobj 807 0 obj << /D [798 0 R /XYZ 56.693 552.241 null] >> endobj 808 0 obj << /D [798 0 R /XYZ 56.693 541.282 null] >> endobj 809 0 obj << /D [798 0 R /XYZ 56.693 530.323 null] >> endobj 810 0 obj << /D [798 0 R /XYZ 56.693 304.822 null] >> endobj 811 0 obj << /D [798 0 R /XYZ 56.693 298.845 null] >> endobj 812 0 obj << /D [798 0 R /XYZ 56.693 301.734 null] >> endobj 813 0 obj << /D [798 0 R /XYZ 56.693 290.775 null] >> endobj 814 0 obj << /D [798 0 R /XYZ 56.693 279.816 null] >> endobj 815 0 obj << /D [798 0 R /XYZ 56.693 268.857 null] >> endobj 797 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj 822 0 obj << /Length 2530 /Filter /FlateDecode >> stream xZY~_Gń`';UJEGKv$*ph*_|nϚY#Mpd& bUi/sUetٔY}/2o\W?C\~wh.Z޿uuZyڛ$o , BHH`p|X R 57kaa mPчHb0߀ \=WҐ~cv2J_`,oj|ֵ!Y7[Wj&woMJ|!o OY)>y /\0m,Ǩh⠷pPU'uSX}wo(> Ot:@ l2a|dXyU7m޽MIUSg,|afis@G: k؃l_KxφF! t1e<6s!3gG-$SQxYkCnu CC{D 3rK10=-܈~ B!~V!#3]a0kxuԷbgrItWxQ'u%`_&KG<^2ɳN007#2uEU͒܏]4M|@’RvH؁p"\%[9rn*n +n(dQy[=;jh&xҋ6l'$ك hX{*њ8K:[68MN\V@BNuoӜ&FeM <7ph6+ڥ#pAc ]ݲ'%'_`^&y6p(C\9gM'KBp˒5ͮVp&i ?zV4YDhڈG=T$+ :VsO*[6\a݁fT2оcMQoziD7.z (3'J?7.`bz:+xx_΁􂚔3=_AMH-OOfj]w)մ0n\Hn!Mr"#3Cf2(Hڅ( ܏OtfaCac?phd p:'o21_ y e": c9uPskA\} IE@*5n+WV`֧0j-8.'HR^gu`zBb=FΥ0R+)V`l_9Pwp5친 =z|=Ǖ`jzpڽ_yi֮lTzH( :Ymf{?6@BC>(ACIU@qZ_s6\&Hƕ {2wX>]JB;bF(q綯#;#Ŭ_OPi枽rSW_ՑyWiuҡCH`=1k endstream endobj 821 0 obj << /Type /Page /Contents 822 0 R /Resources 820 0 R /MediaBox [0 0 595.276 841.89] /Parent 748 0 R /Annots [ 816 0 R 817 0 R 818 0 R ] >> endobj 816 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [268.188 595.748 355.947 606.651] /A << /S /GoTo /D (gss-release-oid-set) >> >> endobj 817 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [246.041 304.377 333.801 315.281] /A << /S /GoTo /D (gss-release-oid-set) >> >> endobj 818 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [55.697 121.086 147.192 131.99] /A << /S /GoTo /D (gss-init-sec-context) >> >> endobj 823 0 obj << /D [821 0 R /XYZ -16.307 900.716 null] >> endobj 824 0 obj << /D [821 0 R /XYZ 56.693 739.087 null] >> endobj 825 0 obj << /D [821 0 R /XYZ 56.693 733.195 null] >> endobj 826 0 obj << /D [821 0 R /XYZ 56.693 736.084 null] >> endobj 827 0 obj << /D [821 0 R /XYZ 56.693 725.125 null] >> endobj 828 0 obj << /D [821 0 R /XYZ 56.693 714.166 null] >> endobj 829 0 obj << /D [821 0 R /XYZ 56.693 537.294 null] >> endobj 830 0 obj << /D [821 0 R /XYZ 56.693 531.403 null] >> endobj 831 0 obj << /D [821 0 R /XYZ 56.693 534.292 null] >> endobj 832 0 obj << /D [821 0 R /XYZ 56.693 523.333 null] >> endobj 833 0 obj << /D [821 0 R /XYZ 56.693 512.374 null] >> endobj 685 0 obj << /D [821 0 R /XYZ 56.693 233.969 null] >> endobj 834 0 obj << /D [821 0 R /XYZ 56.693 228.077 null] >> endobj 835 0 obj << /D [821 0 R /XYZ 56.693 230.966 null] >> endobj 836 0 obj << /D [821 0 R /XYZ 56.693 220.007 null] >> endobj 837 0 obj << /D [821 0 R /XYZ 56.693 209.049 null] >> endobj 838 0 obj << /D [821 0 R /XYZ 56.693 198.09 null] >> endobj 820 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F110 659 0 R >> /ProcSet [ /PDF /Text ] >> endobj 842 0 obj << /Length 1971 /Filter /FlateDecode >> stream xZ[wF~УӃK'4(ID-iMȿEb[qi^"i/̷^^&pXR\I 0b|dB\Y>U.3}[_TOXsxBBP,7R$_' 3T"A*IfT!E!aD8Jq h=J/# B" r3f*!G 2 |{ඕةčJl#Si멾])ٶ(ّϬiLoj'7>1/b\df l.OZ:K4z%yV-ݐyQ,vm4ɋf/KQS+*2SUV:0ܨ$f C[?p;FRi c Rl:!bmL/nƼpϙ Xx1V?x͌]:N(G16Z*ԣ[jvwUUYS 2bo SgJ ^\XfU\.OLHDL_IژǴ9@͛C^y꩗D Xv!MV\ҽ+Sdta-Nry7&+B%3fMcwУ3Dge^m DD3c&!Nϧޝk` skXHH[p|$45\H1i/L2뺒 ](Eq ؑT"BIL],ɯc.+eIp]׮D$ǑCtю{ݕAJ=#r+;LB$d{RbQV:.Μ>3X|I(̸"Ĺ7uZw/.6*m^;#`eA;K?VLRx3|ĦYa[-IIt1uʿVDAM[ gܧ-PU:˯\D8U涶|kS,!ٻ}zC2Ƭ)LE|f E%8oFluTfjOVh_&gHmLLu ZF$m ~N[UuuX_͞1l!>%3YuS^慮Rѫ=Yd!*Y1 I&W-[scMrxNn< mXmJavs5 ˓{Hg[ [EwGGJכ7(;wtIM踇B൳/?n-f]"jT#+C{o8TҤ؆RڨܢF+l;jןVt^nBRBS6_01~}\ԁK-JR{c{C䧉2jGZeWACGo8=ÊNY9(b'UMujMOT-,]<Cg{b± / 嗃ѕ?Gu#pUaYBʇ:ᆭ' :&32]!W2Lr$(~+{dPr8ws::>:X_U J@:% !rՓ?,>WvwJ@cާB>ZJ@eҞ2X=2)1\V@Gq̏OW@x+<RKDnJo$`ӕ?Pxlm0ӕ?m:LjѠ_s GID$:lWR(O endstream endobj 841 0 obj << /Type /Page /Contents 842 0 R /Resources 840 0 R /MediaBox [0 0 595.276 841.89] /Parent 863 0 R /Annots [ 819 0 R 839 0 R ] >> endobj 819 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.116 702.117 298.673 713.021] /A << /S /GoTo /D (gss-release-name) >> >> endobj 839 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.116 487.476 298.673 498.379] /A << /S /GoTo /D (gss-release-name) >> >> endobj 843 0 obj << /D [841 0 R /XYZ -11.232 900.716 null] >> endobj 844 0 obj << /D [841 0 R /XYZ 56.693 643.455 null] >> endobj 845 0 obj << /D [841 0 R /XYZ 56.693 637.478 null] >> endobj 846 0 obj << /D [841 0 R /XYZ 56.693 640.367 null] >> endobj 847 0 obj << /D [841 0 R /XYZ 56.693 629.408 null] >> endobj 848 0 obj << /D [841 0 R /XYZ 56.693 618.449 null] >> endobj 849 0 obj << /D [841 0 R /XYZ 56.693 428.814 null] >> endobj 850 0 obj << /D [841 0 R /XYZ 56.693 422.836 null] >> endobj 851 0 obj << /D [841 0 R /XYZ 56.693 425.726 null] >> endobj 852 0 obj << /D [841 0 R /XYZ 56.693 414.767 null] >> endobj 853 0 obj << /D [841 0 R /XYZ 56.693 403.808 null] >> endobj 854 0 obj << /D [841 0 R /XYZ 56.693 392.849 null] >> endobj 855 0 obj << /D [841 0 R /XYZ 56.693 381.89 null] >> endobj 856 0 obj << /D [841 0 R /XYZ 56.693 194.247 null] >> endobj 857 0 obj << /D [841 0 R /XYZ 56.693 188.27 null] >> endobj 858 0 obj << /D [841 0 R /XYZ 56.693 191.159 null] >> endobj 859 0 obj << /D [841 0 R /XYZ 56.693 180.2 null] >> endobj 860 0 obj << /D [841 0 R /XYZ 56.693 169.241 null] >> endobj 861 0 obj << /D [841 0 R /XYZ 56.693 158.282 null] >> endobj 862 0 obj << /D [841 0 R /XYZ 56.693 147.323 null] >> endobj 840 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F52 38 0 R /F94 66 0 R /F110 659 0 R >> /ProcSet [ /PDF /Text ] >> endobj 866 0 obj << /Length 1210 /Filter /FlateDecode >> stream xZKs6Wt ޏδv&}pR5Xw) J!Jr$b[vWdE(N~M^(q4d$62 狄+z1l^T_n.kmY/ JT]flyߖh#MҢ4I (p6J22e5THg C@JQ8r\I %g(p-1.9W$K2.n,}[⺪u qԸbIj^gqm@ ST05Om1/SLR u@.bɷ atrvvn3.Prz>#PId@qkg$udeI:t85@cWo|B[F3WYeQQZ^u^\'ZSt|ȴձT?+8EƣBJʬoiQ ,iM[} MuE&x)Eƛc/&-x >/E> endobj 867 0 obj << /D [865 0 R /XYZ -16.307 900.716 null] >> endobj 868 0 obj << /D [865 0 R /XYZ 56.693 647.441 null] >> endobj 869 0 obj << /D [865 0 R /XYZ 56.693 641.463 null] >> endobj 870 0 obj << /D [865 0 R /XYZ 56.693 644.352 null] >> endobj 871 0 obj << /D [865 0 R /XYZ 56.693 633.393 null] >> endobj 872 0 obj << /D [865 0 R /XYZ 56.693 622.434 null] >> endobj 873 0 obj << /D [865 0 R /XYZ 56.693 611.475 null] >> endobj 874 0 obj << /D [865 0 R /XYZ 56.693 600.517 null] >> endobj 875 0 obj << /D [865 0 R /XYZ 56.693 589.558 null] >> endobj 876 0 obj << /D [865 0 R /XYZ 56.693 578.599 null] >> endobj 877 0 obj << /D [865 0 R /XYZ 56.693 340.147 null] >> endobj 878 0 obj << /D [865 0 R /XYZ 56.693 334.169 null] >> endobj 879 0 obj << /D [865 0 R /XYZ 56.693 337.058 null] >> endobj 880 0 obj << /D [865 0 R /XYZ 56.693 326.099 null] >> endobj 881 0 obj << /D [865 0 R /XYZ 56.693 315.14 null] >> endobj 882 0 obj << /D [865 0 R /XYZ 56.693 304.181 null] >> endobj 883 0 obj << /D [865 0 R /XYZ 56.693 282.264 null] >> endobj 884 0 obj << /D [865 0 R /XYZ 56.693 271.305 null] >> endobj 864 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F52 38 0 R /F94 66 0 R /F102 483 0 R /F106 484 0 R >> /ProcSet [ /PDF /Text ] >> endobj 890 0 obj << /Length 2107 /Filter /FlateDecode >> stream xZ[s۶~ׯ#uDNҴv44ٜ#Q /IﻸP")ّD+=>߷. )Iep$E2 by! ^\Y^:zhފOYX2'XhBRB8y/v.t|6diHJxDQDX0HE^)N(_ƭ4z}38" H $"Hbч?p01P qU FIx^ѯ#9R"X:Urг2)yҳŘp]V:;542p$f!\Tg(<C D"Jx@UP`ҵ+p"f'Csoڲ$RT=V`q` 0(YG&Rb!;2 N?/& AB*"UBeTuS)4{gGIp\btywqx1Nė+ =BP,Z.^u5;IcsᑱK] a Wx(Vѹ G&#~ .CU==i~--M>:&vh z~ܠ-~jSWqV&"q]fI+j9h'q )?B *evO"/["V6ts>Ϊ^Ӟ~"VuC1t>_lbдE_S@p(IH"DN'G(,g:۪ZϳŃ]2fcL}5zX $:M F B7Ud\݄;M%ͤk?ֺxK~y$n[UՐ[pvQ$i}0aRVE!6sזҟ᫝HnB:3# OÃW_k|7^Kz=n6Orp%S|!~>0=3 #}x|aY=zx2On~E3#ca1uIc)>Ǣ873zY4&h@Gȸx:htvnw7@6Qcn?~}0M pΦ޽צPp8T^6Aj%&~5% l%pۻu?Ʀ`i lJC'lQBڔ*rN`%3XBד?,PWJuҋ69PPev9td`eO(/!YпƱB ٕ?ʞ$:5x : pFp,A*>_ȮW Z`~1GqZ%m@N3xW+`O/}u #uO'sp'̧HM8;[5\Ŵ')ϓ`˴2]+$s6csS_o=6p+2x-*^be4h Dz|EqH[Uays{یaBRNd/u׹azh?T`T'UWv`8|yjLj?;P . 槤aav0Hi4 $ >6_vwdP$ϹMC}Bb$+`pm6:krIv^ w#r z'X`6\3J2Fzq\|^4nPH}-aƱ5D ;AZ9G Jr&Cr?3o2Dx]f v˳goF8_U 0$ۿW b "^Lx'⇙`U.z6NgA %3TմP;W{ endstream endobj 889 0 obj << /Type /Page /Contents 890 0 R /Resources 888 0 R /MediaBox [0 0 595.276 841.89] /Parent 863 0 R /Annots [ 885 0 R 886 0 R 887 0 R ] >> endobj 885 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [325.183 567.062 408.051 577.966] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 886 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.051 535.916 429.919 546.82] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 887 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [347.051 504.769 429.919 515.673] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 891 0 obj << /D [889 0 R /XYZ -11.232 900.716 null] >> endobj 892 0 obj << /D [889 0 R /XYZ 56.693 739.087 null] >> endobj 893 0 obj << /D [889 0 R /XYZ 56.693 733.843 null] >> endobj 894 0 obj << /D [889 0 R /XYZ 56.693 736.732 null] >> endobj 895 0 obj << /D [889 0 R /XYZ 56.693 725.773 null] >> endobj 896 0 obj << /D [889 0 R /XYZ 56.693 714.815 null] >> endobj 897 0 obj << /D [889 0 R /XYZ 56.693 703.856 null] >> endobj 898 0 obj << /D [889 0 R /XYZ 56.693 692.897 null] >> endobj 899 0 obj << /D [889 0 R /XYZ 56.693 447.892 null] >> endobj 900 0 obj << /D [889 0 R /XYZ 56.693 442.649 null] >> endobj 901 0 obj << /D [889 0 R /XYZ 56.693 445.538 null] >> endobj 902 0 obj << /D [889 0 R /XYZ 56.693 434.579 null] >> endobj 903 0 obj << /D [889 0 R /XYZ 56.693 423.62 null] >> endobj 904 0 obj << /D [889 0 R /XYZ 56.693 228.953 null] >> endobj 905 0 obj << /D [889 0 R /XYZ 56.693 223.71 null] >> endobj 906 0 obj << /D [889 0 R /XYZ 56.693 226.599 null] >> endobj 907 0 obj << /D [889 0 R /XYZ 56.693 166.27 null] >> endobj 908 0 obj << /D [889 0 R /XYZ 56.693 161.026 null] >> endobj 909 0 obj << /D [889 0 R /XYZ 56.693 163.916 null] >> endobj 910 0 obj << /D [889 0 R /XYZ 56.693 103.586 null] >> endobj 911 0 obj << /D [889 0 R /XYZ 56.693 98.343 null] >> endobj 912 0 obj << /D [889 0 R /XYZ 56.693 101.232 null] >> endobj 888 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F110 659 0 R >> /ProcSet [ /PDF /Text ] >> endobj 917 0 obj << /Length 1934 /Filter /FlateDecode >> stream xZKs۶WpD UwvWiGCPV"U>%H -3z|CNY/K_X\+/Ny<*fS^sә^;=)+xVӆMզs`R@a!G8-~ad j$B \`Oa?N*Bǧ, H!ʱlJE]8[{KXeNG~BM谛<>")$y191U& Hau:?yN(#"b$*` ]FDb"~;<[ ߴP֎N?qBס.O:C3]g6#\ƈ3b/L7u>4%aveS êcx1̈@$RV0+`R05 +4=0!;&/BWDU%) thPr ky B-LOO. k'L7/L's )nb6>|okXΔ^J Y@>l!Й_az핁 ] @Ww vp<7wv_qiB{[7I%Ukq/~+אh`-`q6%TqG\ \3aG~;:(GO_5*82l,y&c '%|b7KdI '?tRMLz /%vǕnڪlAH-u-۲ěӇaiB[t12g=;ǁsY0L6F>ψ!nAPdWѫ91)q1!eőyYq>܈ eq }fBLdtBBʅ0"J1>'ݶ뵮V˕صU'%v͢]̌4`Kb_LZ0Y(tHL{j (һ(#"-]YAK0`€/Г ʏ(˗#7@vz8ovEWXҍ+Blom֛{_x4^i]ՆG$^ں -r#z_"+P:6_{ECEhFځN.!Xw19))_ķoڐQ6 ÎG0xX0 GV-?SCpAzjjz#*q Y!Nm_y`N6,yk(5e13=?e5<,>3e+6,^?SEO8ڟ0`իo~k[uTdy3qXizn\zl *F ikZ0\{TbݕDUP HW9P/ F}oWQKHJ+v_"<ܡZ3tҥsඨw:u&[AhcL$ћ!//}rV endstream endobj 916 0 obj << /Type /Page /Contents 917 0 R /Resources 915 0 R /MediaBox [0 0 595.276 841.89] /Parent 863 0 R /Annots [ 913 0 R ] >> endobj 913 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.135 203.744 513.003 214.648] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 918 0 obj << /D [916 0 R /XYZ -16.307 900.716 null] >> endobj 919 0 obj << /D [916 0 R /XYZ 56.693 739.087 null] >> endobj 920 0 obj << /D [916 0 R /XYZ 56.693 733.109 null] >> endobj 921 0 obj << /D [916 0 R /XYZ 56.693 735.998 null] >> endobj 922 0 obj << /D [916 0 R /XYZ 56.693 673.885 null] >> endobj 923 0 obj << /D [916 0 R /XYZ 56.693 667.907 null] >> endobj 924 0 obj << /D [916 0 R /XYZ 56.693 670.796 null] >> endobj 925 0 obj << /D [916 0 R /XYZ 56.693 608.683 null] >> endobj 926 0 obj << /D [916 0 R /XYZ 56.693 602.705 null] >> endobj 927 0 obj << /D [916 0 R /XYZ 56.693 605.594 null] >> endobj 928 0 obj << /D [916 0 R /XYZ 56.693 543.481 null] >> endobj 929 0 obj << /D [916 0 R /XYZ 56.693 537.503 null] >> endobj 930 0 obj << /D [916 0 R /XYZ 56.693 540.393 null] >> endobj 931 0 obj << /D [916 0 R /XYZ 56.693 529.434 null] >> endobj 932 0 obj << /D [916 0 R /XYZ 56.693 371.679 null] >> endobj 933 0 obj << /D [916 0 R /XYZ 56.693 365.701 null] >> endobj 934 0 obj << /D [916 0 R /XYZ 56.693 368.59 null] >> endobj 935 0 obj << /D [916 0 R /XYZ 56.693 357.631 null] >> endobj 936 0 obj << /D [916 0 R /XYZ 56.693 346.673 null] >> endobj 915 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj 940 0 obj << /Length 2113 /Filter /FlateDecode >> stream xڽ[w_G <96ƐnOGG$"$77!ɰ Ҍfl[غ[^_; PRZ,-"׳|Eb}LC xj1H*1WO79<ѐ8wa<3nl X>2AQf x(ۆK So}@-b9.rfyA.V}[ |wyrc9#\x_[?{% DH/0q-wa"KHˆAxtHeö1Tl;EEX >O j(D>K)\{K̴>[n:@szҬbTi(4u1>]8`Cx L‰ϻ%xFX@@M:Tz 363 lbO0 B]@f#])h::M7R+a&7Ly9اh3D(٫i^画n#Bۓ"v ڝltALq<|@7#2|q,-74KOV3}`Q ,iV)d>TNT\хC{mշH=>( N0Hw8n&Fbj[=]6 .P+JKsbL4LF\FJ3+4*iZe9\|z^ԛae[-IyO\C23b. r7eeIT$@" K2wA)%3ov[%&$vpiξmY(';6d+Eb^`R!risV+]& I;iw M[qþCA&o|uя-1R6'XS8uYI8Ѯ=D&OÞ})tSKSoь,62\ c?}%l|<.@0iaaA&W"+H98f.8/ޏ#FDa,Ic @1Dnqٮ%B BHԗjUMzFEZ^4BZX b' pʫr1}.O1(E9v|­hMhT [ XDZ |^ZVEHxPhBݣW*P@xNz^'W[^F"E04wўNoKZbW{ uoq*yQǑ24]VBQB40uu#}GZ8!Wx֐ApݞDd5hZ9d!RO_a S,߂;%c:1WK\6YJBRH <[c jEm}Kk WHbl1}4 @+Y 2lI]ncwPZ[ >&ECﲍ  4aD 8ʀ* <B7^ pY8PTi d9_Ɠgtxw1]Qˀ}߷ӻA`OTPneȩͲ 1EՀpXb*FzX  ' 5spN.fP:O'qF;MD>TYų>1I~#!3j!KA1K!naUAfPWuSeNET> endobj 914 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [249.752 660.815 349.587 671.719] /A << /S /GoTo /D (gss-encapsulate-token) >> >> endobj 937 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [430.683 583.107 513.551 594.01] /A << /S /GoTo /D (gss-release-buffer) >> >> endobj 941 0 obj << /D [939 0 R /XYZ -11.232 900.716 null] >> endobj 942 0 obj << /D [939 0 R /XYZ 56.693 739.087 null] >> endobj 943 0 obj << /D [939 0 R /XYZ 56.693 733.109 null] >> endobj 944 0 obj << /D [939 0 R /XYZ 56.693 735.998 null] >> endobj 945 0 obj << /D [939 0 R /XYZ 56.693 725.039 null] >> endobj 946 0 obj << /D [939 0 R /XYZ 56.693 714.08 null] >> endobj 14 0 obj << /D [939 0 R /XYZ 56.693 525.258 null] >> endobj 947 0 obj << /D [939 0 R /XYZ 56.693 488.261 null] >> endobj 948 0 obj << /D [939 0 R /XYZ 56.693 431.228 null] >> endobj 949 0 obj << /D [939 0 R /XYZ 56.693 265.404 null] >> endobj 950 0 obj << /D [939 0 R /XYZ 56.693 239.046 null] >> endobj 72 0 obj << /D [939 0 R /XYZ 56.693 213.684 null] >> endobj 951 0 obj << /D [939 0 R /XYZ 56.693 207.707 null] >> endobj 952 0 obj << /D [939 0 R /XYZ 56.693 210.596 null] >> endobj 938 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R /F110 659 0 R >> /ProcSet [ /PDF /Text ] >> endobj 956 0 obj << /Length 1535 /Filter /FlateDecode >> stream xŚ[wFz%}r۴IG։$wVH& }mwvf\88t^"p`T@R$U CLy{:(xl?Sz" |:Å>O~ #w̵EWQ%e0YD *IfU"EX(I+wq#uηq@!4,P i0[t>~J<- Q&6w~ UJ S:˦,J{w_>v J;l崦#C @10VG^(EF Ҷ}:kQۺ|?!U6aSDP^f=i$$:s9r})k7{BbS2 %@I ۶5GM10%FIU~KJZ+ۀ&!r q!" Lv&L94NOFC 6LsScv}xwK>N0T47fmQ^D7V-WʿJVRN٘t†L#2͋`qާo܏ňUk  JԦhvëVBt-V8zۋMnXM _T"&Cfn%-dٛo(cxzKZk^6@w3\c th-7 ggA8wny/ X#0ǣk_X[]٣ W$dgCA0Lx0,!F. K_)`J5{+jm^} T4 amΣl֬@XL4-$̋[[WC`??ɻ`z S;\þr+Uojs uPϏs @jrGrO=X!؝Vvܲ=?"cCJ%λMA=RփnAGERM (om MADf .G〧 W"GNq@ FB*sM~8hl8P~8hT-X" (EbxGD=ROlM~K[+P|jz-vHA;>Di$j>c3~")l]"vķW9*M%A/PDOLч2'b0kElŞMV)RUPaiWlU endstream endobj 955 0 obj << /Type /Page /Contents 956 0 R /Resources 954 0 R /MediaBox [0 0 595.276 841.89] /Parent 863 0 R /Annots [ 953 0 R ] >> endobj 953 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [254.25 684.729 332.456 695.633] /A << /S /GoTo /D (gss-export-name) >> >> endobj 957 0 obj << /D [955 0 R /XYZ -16.307 900.716 null] >> endobj 958 0 obj << /D [955 0 R /XYZ 56.693 739.087 null] >> endobj 959 0 obj << /D [955 0 R /XYZ 56.693 733.442 null] >> endobj 960 0 obj << /D [955 0 R /XYZ 56.693 736.332 null] >> endobj 961 0 obj << /D [955 0 R /XYZ 56.693 725.373 null] >> endobj 962 0 obj << /D [955 0 R /XYZ 56.693 552.829 null] >> endobj 963 0 obj << /D [955 0 R /XYZ 56.693 547.185 null] >> endobj 964 0 obj << /D [955 0 R /XYZ 56.693 550.074 null] >> endobj 965 0 obj << /D [955 0 R /XYZ 56.693 488.771 null] >> endobj 966 0 obj << /D [955 0 R /XYZ 56.693 483.127 null] >> endobj 967 0 obj << /D [955 0 R /XYZ 56.693 486.016 null] >> endobj 968 0 obj << /D [955 0 R /XYZ 56.693 424.713 null] >> endobj 969 0 obj << /D [955 0 R /XYZ 56.693 419.069 null] >> endobj 970 0 obj << /D [955 0 R /XYZ 56.693 421.958 null] >> endobj 971 0 obj << /D [955 0 R /XYZ 56.693 360.655 null] >> endobj 972 0 obj << /D [955 0 R /XYZ 56.693 355.011 null] >> endobj 973 0 obj << /D [955 0 R /XYZ 56.693 357.9 null] >> endobj 974 0 obj << /D [955 0 R /XYZ 56.693 296.597 null] >> endobj 975 0 obj << /D [955 0 R /XYZ 56.693 290.952 null] >> endobj 976 0 obj << /D [955 0 R /XYZ 56.693 293.842 null] >> endobj 977 0 obj << /D [955 0 R /XYZ 56.693 232.538 null] >> endobj 978 0 obj << /D [955 0 R /XYZ 56.693 226.894 null] >> endobj 979 0 obj << /D [955 0 R /XYZ 56.693 229.784 null] >> endobj 980 0 obj << /D [955 0 R /XYZ 56.693 168.48 null] >> endobj 981 0 obj << /D [955 0 R /XYZ 56.693 162.836 null] >> endobj 982 0 obj << /D [955 0 R /XYZ 56.693 165.725 null] >> endobj 18 0 obj << /D [955 0 R /XYZ 56.693 127.98 null] >> endobj 983 0 obj << /D [955 0 R /XYZ 56.693 92.148 null] >> endobj 954 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R /F110 659 0 R /F99 351 0 R /F60 57 0 R /F101 475 0 R >> /ProcSet [ /PDF /Text ] >> endobj 986 0 obj << /Length 1012 /Filter /FlateDecode >> stream xڽMsHS80oi*'AlR!YpͿBaH$k0n<=A b( X+Cae#rmdnчλ=&IOWztm|Y/i~H1 ɼG=J2sA~,K0ܬ,XXDTXilM" ->[>t $,~l$%qPlH); e[mz Q1%*%ulC(lbAz!L`vݦw$v$8Ѭ/8{:xINS̃˚a45qp/ث?YѠdZ-SO]Mog'~Nv׵0z&oi-<\ 5#q'՟oI@S]a>Qhw&b|W5@y?cԁ" p S}fyW> endobj 987 0 obj << /D [985 0 R /XYZ -11.232 900.716 null] >> endobj 988 0 obj << /D [985 0 R /XYZ 56.693 738.489 null] >> endobj 989 0 obj << /D [985 0 R /XYZ 56.693 429.202 null] >> endobj 990 0 obj << /D [985 0 R /XYZ 56.693 402.844 null] >> endobj 991 0 obj << /D [985 0 R /XYZ 56.693 377.483 null] >> endobj 992 0 obj << /D [985 0 R /XYZ 56.693 371.505 null] >> endobj 993 0 obj << /D [985 0 R /XYZ 56.693 374.394 null] >> endobj 994 0 obj << /D [985 0 R /XYZ 56.693 312.281 null] >> endobj 995 0 obj << /D [985 0 R /XYZ 56.693 306.303 null] >> endobj 996 0 obj << /D [985 0 R /XYZ 56.693 309.192 null] >> endobj 997 0 obj << /D [985 0 R /XYZ 56.693 247.079 null] >> endobj 998 0 obj << /D [985 0 R /XYZ 56.693 241.101 null] >> endobj 999 0 obj << /D [985 0 R /XYZ 56.693 243.99 null] >> endobj 1000 0 obj << /D [985 0 R /XYZ 56.693 181.877 null] >> endobj 1001 0 obj << /D [985 0 R /XYZ 56.693 175.899 null] >> endobj 1002 0 obj << /D [985 0 R /XYZ 56.693 178.789 null] >> endobj 1003 0 obj << /D [985 0 R /XYZ 56.693 116.675 null] >> endobj 1004 0 obj << /D [985 0 R /XYZ 56.693 110.697 null] >> endobj 1005 0 obj << /D [985 0 R /XYZ 56.693 113.587 null] >> endobj 984 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1009 0 obj << /Length 1061 /Filter /FlateDecode >> stream xڽo6wb?<~<کxi4Rv]!RhX7ɒ7K n$HǓ#- VՏ(HGf$79P\YV>,]I~wO훢{ûOu"+ c t=boyi]|8O_#(%`R2II[-(v.)m M;l]~ (04xŬnd_g> @QJ\{!._X1{;#R9Ԟ0)fUQej|*|Jй7M6Qq+4JqI(s%h&wjxT?/Km;6~wA4dX{nn9mq>M6ǧid3#ĠwGwPDalCPYH1YUl~^fnoI6՘L ~d'%BtnCEs5@wzm\4XeARd#5: ~d'-wԕ6e}6*b@OSHF26:4uMk:αjsG*LuB.Kx_P $S81/_|b~~rż<<mim:8"撁ď$im4H .5PI\SA`#/r_\-=&t-4ʤsݏ:6iQV ]7 :S!h&,{ ׊:ruզ(6yBZ{@T2̃qĬ& 1@ hx;ЏAηUqg`9N$S<8:I*~`Xr4)iy ÒZpntZbͦX=Kh4ҧ3ݏi:6i`9M|A@4KP'AcwMWлu` V{2::IրZNzjB7IDYYg;j*fggg96I^P%W}8q)>lGs.w!5 endstream endobj 1008 0 obj << /Type /Page /Contents 1009 0 R /Resources 1007 0 R /MediaBox [0 0 595.276 841.89] /Parent 1006 0 R >> endobj 1010 0 obj << /D [1008 0 R /XYZ -16.307 900.716 null] >> endobj 1011 0 obj << /D [1008 0 R /XYZ 56.693 739.087 null] >> endobj 1012 0 obj << /D [1008 0 R /XYZ 56.693 733.604 null] >> endobj 1013 0 obj << /D [1008 0 R /XYZ 56.693 736.494 null] >> endobj 1014 0 obj << /D [1008 0 R /XYZ 56.693 675.584 null] >> endobj 1015 0 obj << /D [1008 0 R /XYZ 56.693 670.102 null] >> endobj 1016 0 obj << /D [1008 0 R /XYZ 56.693 672.991 null] >> endobj 1017 0 obj << /D [1008 0 R /XYZ 56.693 612.082 null] >> endobj 1018 0 obj << /D [1008 0 R /XYZ 56.693 606.6 null] >> endobj 1019 0 obj << /D [1008 0 R /XYZ 56.693 609.489 null] >> endobj 1020 0 obj << /D [1008 0 R /XYZ 56.693 548.58 null] >> endobj 1021 0 obj << /D [1008 0 R /XYZ 56.693 543.098 null] >> endobj 1022 0 obj << /D [1008 0 R /XYZ 56.693 545.987 null] >> endobj 1023 0 obj << /D [1008 0 R /XYZ 56.693 485.077 null] >> endobj 1024 0 obj << /D [1008 0 R /XYZ 56.693 479.595 null] >> endobj 1025 0 obj << /D [1008 0 R /XYZ 56.693 482.485 null] >> endobj 1026 0 obj << /D [1008 0 R /XYZ 56.693 421.575 null] >> endobj 1027 0 obj << /D [1008 0 R /XYZ 56.693 416.093 null] >> endobj 1028 0 obj << /D [1008 0 R /XYZ 56.693 418.982 null] >> endobj 1029 0 obj << /D [1008 0 R /XYZ 56.693 358.073 null] >> endobj 1030 0 obj << /D [1008 0 R /XYZ 56.693 352.591 null] >> endobj 1031 0 obj << /D [1008 0 R /XYZ 56.693 355.48 null] >> endobj 1032 0 obj << /D [1008 0 R /XYZ 56.693 294.571 null] >> endobj 1033 0 obj << /D [1008 0 R /XYZ 56.693 289.089 null] >> endobj 1034 0 obj << /D [1008 0 R /XYZ 56.693 291.978 null] >> endobj 1035 0 obj << /D [1008 0 R /XYZ 56.693 231.068 null] >> endobj 1036 0 obj << /D [1008 0 R /XYZ 56.693 225.586 null] >> endobj 1037 0 obj << /D [1008 0 R /XYZ 56.693 228.475 null] >> endobj 1038 0 obj << /D [1008 0 R /XYZ 56.693 167.566 null] >> endobj 1039 0 obj << /D [1008 0 R /XYZ 56.693 162.084 null] >> endobj 1040 0 obj << /D [1008 0 R /XYZ 56.693 164.973 null] >> endobj 1041 0 obj << /D [1008 0 R /XYZ 56.693 104.064 null] >> endobj 1042 0 obj << /D [1008 0 R /XYZ 56.693 98.582 null] >> endobj 1043 0 obj << /D [1008 0 R /XYZ 56.693 101.471 null] >> endobj 1007 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1046 0 obj << /Length 985 /Filter /FlateDecode >> stream xڽMo8b=9uvRK) :J l궲,)dJK'ZΐP3$Awx/YlS(Cas[a4_]'L>!4|H⸦ƱG=KR3F?Qmn^..:~#䣗ma" 36ǀ1'?aFcHDN{vK˱7kn̻;۞yi5`s80*%bHhj jq50.KA2G(:=U}G}Z-R9 9%@wr;1G/cAFYx K^(Strkn;x rڄHwEzfr^w2,vBq|EݑtGG;p6f@9e'ļ;hik-D~ֆM>I4rs,/QTwvŘDZ4Zb $aAX_]-Y{uզDT։8ViXx6ձn7NމWFQYNkmUC.>-|&~=> endobj 1047 0 obj << /D [1045 0 R /XYZ -11.232 900.716 null] >> endobj 1048 0 obj << /D [1045 0 R /XYZ 56.693 739.087 null] >> endobj 1049 0 obj << /D [1045 0 R /XYZ 56.693 733.426 null] >> endobj 1050 0 obj << /D [1045 0 R /XYZ 56.693 736.315 null] >> endobj 1051 0 obj << /D [1045 0 R /XYZ 56.693 674.973 null] >> endobj 1052 0 obj << /D [1045 0 R /XYZ 56.693 669.312 null] >> endobj 1053 0 obj << /D [1045 0 R /XYZ 56.693 672.202 null] >> endobj 1054 0 obj << /D [1045 0 R /XYZ 56.693 610.859 null] >> endobj 1055 0 obj << /D [1045 0 R /XYZ 56.693 605.199 null] >> endobj 1056 0 obj << /D [1045 0 R /XYZ 56.693 608.088 null] >> endobj 1057 0 obj << /D [1045 0 R /XYZ 56.693 546.745 null] >> endobj 1058 0 obj << /D [1045 0 R /XYZ 56.693 541.085 null] >> endobj 1059 0 obj << /D [1045 0 R /XYZ 56.693 543.974 null] >> endobj 1060 0 obj << /D [1045 0 R /XYZ 56.693 482.632 null] >> endobj 1061 0 obj << /D [1045 0 R /XYZ 56.693 476.971 null] >> endobj 1062 0 obj << /D [1045 0 R /XYZ 56.693 479.861 null] >> endobj 1063 0 obj << /D [1045 0 R /XYZ 56.693 418.518 null] >> endobj 1064 0 obj << /D [1045 0 R /XYZ 56.693 412.858 null] >> endobj 1065 0 obj << /D [1045 0 R /XYZ 56.693 415.747 null] >> endobj 22 0 obj << /D [1045 0 R /XYZ 56.693 377.978 null] >> endobj 1066 0 obj << /D [1045 0 R /XYZ 56.693 342.131 null] >> endobj 1067 0 obj << /D [1045 0 R /XYZ 56.693 284.694 null] >> endobj 1068 0 obj << /D [1045 0 R /XYZ 56.693 155.505 null] >> endobj 1069 0 obj << /D [1045 0 R /XYZ 56.693 129.465 null] >> endobj 1070 0 obj << /D [1045 0 R /XYZ 56.693 104.42 null] >> endobj 1071 0 obj << /D [1045 0 R /XYZ 56.693 98.76 null] >> endobj 1072 0 obj << /D [1045 0 R /XYZ 56.693 101.649 null] >> endobj 1044 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1075 0 obj << /Length 734 /Filter /FlateDecode >> stream xڽKo@7w<$b4"DcW"cƯ9l)4N>-j$[u eluyk'w R> qƆa_f24T`Ax0:\8݄5 @ԯBe%@MJ̾65e4vvV.^rRx/$M} X;~5=Kv߉Ky ,^ 8i(f #8[wK񞷾M~fhw_t$c8K$ endstream endobj 1074 0 obj << /Type /Page /Contents 1075 0 R /Resources 1073 0 R /MediaBox [0 0 595.276 841.89] /Parent 1006 0 R >> endobj 1076 0 obj << /D [1074 0 R /XYZ -16.307 900.716 null] >> endobj 1077 0 obj << /D [1074 0 R /XYZ 56.693 739.087 null] >> endobj 1078 0 obj << /D [1074 0 R /XYZ 56.693 733.109 null] >> endobj 1079 0 obj << /D [1074 0 R /XYZ 56.693 735.998 null] >> endobj 1080 0 obj << /D [1074 0 R /XYZ 56.693 673.885 null] >> endobj 1081 0 obj << /D [1074 0 R /XYZ 56.693 667.907 null] >> endobj 1082 0 obj << /D [1074 0 R /XYZ 56.693 670.796 null] >> endobj 1083 0 obj << /D [1074 0 R /XYZ 56.693 608.683 null] >> endobj 1084 0 obj << /D [1074 0 R /XYZ 56.693 602.705 null] >> endobj 1085 0 obj << /D [1074 0 R /XYZ 56.693 605.594 null] >> endobj 1086 0 obj << /D [1074 0 R /XYZ 56.693 543.481 null] >> endobj 1087 0 obj << /D [1074 0 R /XYZ 56.693 537.503 null] >> endobj 1088 0 obj << /D [1074 0 R /XYZ 56.693 540.393 null] >> endobj 1089 0 obj << /D [1074 0 R /XYZ 56.693 478.279 null] >> endobj 1090 0 obj << /D [1074 0 R /XYZ 56.693 472.301 null] >> endobj 1091 0 obj << /D [1074 0 R /XYZ 56.693 475.191 null] >> endobj 1092 0 obj << /D [1074 0 R /XYZ 56.693 413.077 null] >> endobj 1093 0 obj << /D [1074 0 R /XYZ 56.693 407.099 null] >> endobj 1094 0 obj << /D [1074 0 R /XYZ 56.693 409.989 null] >> endobj 1073 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F94 66 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1183 0 obj << /Length 1171 /Filter /FlateDecode >> stream xڽ[s8+t 3" s l1;d;+gc;Ť_v'vڽ fOg(\ 1 `bʹtM@$*+l@e֬ZKʗjY߿U_%^d c; !1&A]XbeԔ$So$ -YHWX;Q,[]M  S3XLA`%iC_u~fwсQٚᘨѴnci>ϟkVu!`M)h "C֊v=6_fY΍~n,sMf]wԿuA# }B~p//ˊѲbN^\,DHPY.xkbO܆!T\ԣn<5#:"1u$$~ #zהQI:VyA.XaU C>#R~≷fa _?$i"̕]D$ fMPZY~qh{n(I^4ջ"i" ]OpX gjiKU*Ao%;5mʬ;m -xQo6"f?ALVH|ǒ9'ݺ]Ӕ~st'sMt'|;n'LE:Xd~)I]? K7P4]|"RGFnu(12Yќ=s_zY9M82)nI 84|Y/F;#wY\1jܬF7nۚ~R1T^Tl(}'ː\`lOBT^~.Hq~\؜;4bEe+6ebۤU(U쓻SCA9r_,ߏ endstream endobj 1182 0 obj << /Type /Page /Contents 1183 0 R /Resources 1181 0 R /MediaBox [0 0 595.276 841.89] /Parent 1006 0 R /Annots [ 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R ] >> endobj 1095 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.701 568.119 167.656 579.023] /A << /S /GoTo /D (page.22) >> >> endobj 1096 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.838 556.164 141.793 567.068] /A << /S /GoTo /D (page.17) >> >> endobj 1097 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [114.904 544.209 126.859 555.113] /A << /S /GoTo /D (page.34) >> >> endobj 1098 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [163.77 532.254 175.726 543.158] /A << /S /GoTo /D (page.38) >> >> endobj 1099 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.618 521.016 139.592 531.203] /A << /S /GoTo /D (page.9) >> >> endobj 1100 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.35 509.061 181.305 519.248] /A << /S /GoTo /D (page.11) >> >> endobj 1101 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.1 497.106 144.055 507.292] /A << /S /GoTo /D (page.11) >> >> endobj 1102 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.315 485.151 153.27 495.337] /A << /S /GoTo /D (page.11) >> >> endobj 1103 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.486 473.195 158.441 483.382] /A << /S /GoTo /D (page.10) >> >> endobj 1104 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.366 461.24 166.321 471.427] /A << /S /GoTo /D (page.10) >> >> endobj 1105 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.37 449.285 157.325 459.472] /A << /S /GoTo /D (page.11) >> >> endobj 1106 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.868 437.33 141.823 447.517] /A << /S /GoTo /D (page.11) >> >> endobj 1107 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.542 425.375 143.497 435.561] /A << /S /GoTo /D (page.11) >> >> endobj 1108 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [142.052 413.42 154.007 423.606] /A << /S /GoTo /D (page.10) >> >> endobj 1109 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.447 401.464 163.402 411.651] /A << /S /GoTo /D (page.11) >> >> endobj 1110 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.774 389.509 166.73 399.696] /A << /S /GoTo /D (page.10) >> >> endobj 1111 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.218 377.554 147.173 387.741] /A << /S /GoTo /D (page.10) >> >> endobj 1112 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.795 365.599 142.75 375.786] /A << /S /GoTo /D (page.11) >> >> endobj 1113 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [146.476 353.644 158.431 363.83] /A << /S /GoTo /D (page.10) >> >> endobj 1114 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.648 341.689 144.603 351.875] /A << /S /GoTo /D (page.10) >> >> endobj 1115 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [126.003 329.733 137.958 339.92] /A << /S /GoTo /D (page.10) >> >> endobj 1116 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.055 317.778 180.01 327.965] /A << /S /GoTo /D (page.12) >> >> endobj 1117 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [129.32 305.823 141.275 316.01] /A << /S /GoTo /D (page.11) >> >> endobj 1118 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.436 293.868 142.391 304.054] /A << /S /GoTo /D (page.10) >> >> endobj 1119 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.847 281.913 144.802 292.099] /A << /S /GoTo /D (page.11) >> >> endobj 1120 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.467 269.958 163.422 280.144] /A << /S /GoTo /D (page.10) >> >> endobj 1121 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.426 258.002 142.381 268.189] /A << /S /GoTo /D (page.11) >> >> endobj 1122 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.924 246.047 161.898 256.234] /A << /S /GoTo /D (page.9) >> >> endobj 1123 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [122.277 234.092 129.251 244.279] /A << /S /GoTo /D (page.9) >> >> endobj 1124 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [210.834 222.137 222.789 232.323] /A << /S /GoTo /D (page.14) >> >> endobj 1125 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.3 210.182 229.255 220.368] /A << /S /GoTo /D (page.13) >> >> endobj 1126 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.722 198.226 159.696 208.413] /A << /S /GoTo /D (page.9) >> >> endobj 1127 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [158.8 186.271 165.773 196.458] /A << /S /GoTo /D (page.8) >> >> endobj 1128 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [171.85 174.316 183.805 184.503] /A << /S /GoTo /D (page.12) >> >> endobj 1129 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [145.928 162.361 152.902 172.548] /A << /S /GoTo /D (page.9) >> >> endobj 1130 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [150.889 150.406 162.844 160.592] /A << /S /GoTo /D (page.13) >> >> endobj 1131 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [137.051 138.451 144.025 148.637] /A << /S /GoTo /D (page.9) >> >> endobj 1132 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.03 126.495 163.004 136.682] /A << /S /GoTo /D (page.9) >> >> endobj 1133 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.438 114.54 168.393 124.727] /A << /S /GoTo /D (page.10) >> >> endobj 1134 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [168.364 102.585 175.338 112.772] /A << /S /GoTo /D (page.8) >> >> endobj 1135 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.473 90.63 164.428 100.817] /A << /S /GoTo /D (page.12) >> >> endobj 1136 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [215.088 78.675 227.043 88.861] /A << /S /GoTo /D (page.12) >> >> endobj 1137 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [433.225 580.792 445.18 590.979] /A << /S /GoTo /D (page.12) >> >> endobj 1138 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [450.012 568.837 461.967 579.023] /A << /S /GoTo /D (page.12) >> >> endobj 1139 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [416.458 556.882 428.413 567.068] /A << /S /GoTo /D (page.12) >> >> endobj 1140 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.18 544.926 417.136 555.113] /A << /S /GoTo /D (page.12) >> >> endobj 1141 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.138 532.971 439.093 543.158] /A << /S /GoTo /D (page.12) >> >> endobj 1142 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [451.118 521.016 463.073 531.203] /A << /S /GoTo /D (page.13) >> >> endobj 1143 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [477.13 509.061 489.085 519.248] /A << /S /GoTo /D (page.45) >> >> endobj 1144 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [458.48 497.106 470.435 507.292] /A << /S /GoTo /D (page.13) >> >> endobj 1145 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [484.492 485.151 496.447 495.337] /A << /S /GoTo /D (page.45) >> >> endobj 1146 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [490.39 473.195 502.346 483.382] /A << /S /GoTo /D (page.13) >> >> endobj 1147 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [516.402 461.24 528.358 471.427] /A << /S /GoTo /D (page.45) >> >> endobj 1148 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [502.565 449.285 514.52 459.472] /A << /S /GoTo /D (page.13) >> >> endobj 1149 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [528.577 437.33 540.532 447.517] /A << /S /GoTo /D (page.45) >> >> endobj 1150 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.105 425.375 501.061 435.561] /A << /S /GoTo /D (page.13) >> >> endobj 1151 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [515.117 413.42 527.072 423.606] /A << /S /GoTo /D (page.45) >> >> endobj 1152 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [478.993 401.464 490.948 411.651] /A << /S /GoTo /D (page.13) >> >> endobj 1153 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [505.005 389.509 516.96 399.696] /A << /S /GoTo /D (page.45) >> >> endobj 1154 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [445.798 377.554 457.753 387.741] /A << /S /GoTo /D (page.13) >> >> endobj 1155 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.81 365.599 483.765 375.786] /A << /S /GoTo /D (page.45) >> >> endobj 1156 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [417.355 353.644 429.31 363.83] /A << /S /GoTo /D (page.12) >> >> endobj 1157 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [439.312 341.689 451.268 351.875] /A << /S /GoTo /D (page.12) >> >> endobj 1158 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [462.117 329.733 469.091 339.92] /A << /S /GoTo /D (page.9) >> >> endobj 1159 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [435.457 317.434 447.412 327.965] /A << /S /GoTo /D (page.13) >> >> endobj 1160 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [436.403 305.823 443.377 316.01] /A << /S /GoTo /D (page.9) >> >> endobj 1161 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.988 293.868 494.943 304.054] /A << /S /GoTo /D (page.14) >> >> endobj 1162 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [489.454 281.913 501.409 292.099] /A << /S /GoTo /D (page.14) >> >> endobj 1163 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [450.63 269.614 457.604 280.144] /A << /S /GoTo /D (page.9) >> >> endobj 1164 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [485.539 258.002 497.494 268.189] /A << /S /GoTo /D (page.14) >> >> endobj 1165 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [492.004 246.047 503.96 256.234] /A << /S /GoTo /D (page.14) >> >> endobj 1166 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [431.362 234.092 438.336 244.279] /A << /S /GoTo /D (page.9) >> >> endobj 1167 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [437.997 222.137 449.952 232.323] /A << /S /GoTo /D (page.14) >> >> endobj 1168 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [427.297 209.464 439.252 220.368] /A << /S /GoTo /D (page.39) >> >> endobj 1169 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.338 197.509 420.294 208.413] /A << /S /GoTo /D (page.44) >> >> endobj 1170 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.805 185.554 423.76 196.458] /A << /S /GoTo /D (page.29) >> >> endobj 1171 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.597 173.599 420.552 184.503] /A << /S /GoTo /D (page.42) >> >> endobj 1172 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [414.585 161.644 426.54 172.548] /A << /S /GoTo /D (page.42) >> >> endobj 1173 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [409.613 149.689 421.569 160.592] /A << /S /GoTo /D (page.42) >> >> endobj 1174 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [406.286 137.733 418.241 148.637] /A << /S /GoTo /D (page.43) >> >> endobj 1175 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.66 125.778 406.615 136.682] /A << /S /GoTo /D (page.43) >> >> endobj 1176 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [410.709 113.823 422.664 124.727] /A << /S /GoTo /D (page.43) >> >> endobj 1177 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [402.819 101.868 414.774 112.772] /A << /S /GoTo /D (page.25) >> >> endobj 1178 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [438.375 89.913 450.33 100.817] /A << /S /GoTo /D (page.38) >> >> endobj 1179 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [388.573 77.958 395.546 88.861] /A << /S /GoTo /D (page.8) >> >> endobj 1184 0 obj << /D [1182 0 R /XYZ -11.232 900.716 null] >> endobj 26 0 obj << /D [1182 0 R /XYZ 56.693 593.19 null] >> endobj 1181 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F52 38 0 R /F60 57 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1293 0 obj << /Length 1443 /Filter /FlateDecode >> stream xڵ]w8+s6sic`pH踶_mW8i|GfF&=Hui$Gu,ݒ{U˖zP [Jg 3B75+\Kg">$/G2c5?b| xM?$ $ˠ.LձQ}=C}Gd@MicHTKӥٲ&oDuzҏΥdM |^HI纣u̮ͪ<%xv_ZE b#}٫~8lSAx6ݔtKd)@Avx 34[XV7ܼ,Oh5]bиivݕ,ulwE>e#s?,:Xjr3Pڱur 8x\6hGa䞱\ Llռ% n8L]燒+>UdQ-*uiI+WlHuVsyL[0MuWdQz\2Jҁbr?CXiBVDzNڶ G홯'}㌋w91Ӎ½C2vG\3=$Cן(.3L}~iIJwP>WXz%8޲6?ɧd ,VOlRfqo?"W0Q#WaDm)DDCF΁?VWbw@.T$Toqz ^zyr{!J&BenSBQ$UC?d{;܅>'LEߊ|gO$;HrJOaE@6<|n8@ѦX0=zظ'tzs|^%U4$rnyax%F_]wn˺Şsr{C=FA[64!Ki.4b>!Y i2s s GhHgwc3$0c6&"R:r'Uc?Ltd͒:UH-ݬN<;v 1kiYzŤJ\ڗ7ݹ 'ZhXbvD?=ڬM&MtX|G6Q}xgW|5wxQL7fztWbX;q?Qoyl^R70Nx9hzt~J~xʼnkp갟P7~aȗ9}8>÷v^'xЫQћ[DSkH]M,男+ endstream endobj 1292 0 obj << /Type /Page /Contents 1293 0 R /Resources 1291 0 R /MediaBox [0 0 595.276 841.89] /Parent 1006 0 R /Annots [ 1180 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R 1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R 1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R ] >> endobj 1180 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.954 745.953 137.928 756.857] /A << /S /GoTo /D (page.8) >> >> endobj 1185 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [111.048 733.997 118.022 744.901] /A << /S /GoTo /D (page.8) >> >> endobj 1186 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.885 722.042 163.84 732.946] /A << /S /GoTo /D (page.44) >> >> endobj 1187 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [154.047 710.087 166.002 720.991] /A << /S /GoTo /D (page.25) >> >> endobj 1188 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [133.733 698.132 145.688 709.036] /A << /S /GoTo /D (page.30) >> >> endobj 1189 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [134.849 686.177 146.804 697.081] /A << /S /GoTo /D (page.28) >> >> endobj 1190 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [141.474 674.222 153.429 685.126] /A << /S /GoTo /D (page.40) >> >> endobj 1191 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [151.885 662.266 163.84 673.17] /A << /S /GoTo /D (page.43) >> >> endobj 1192 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [116.747 651.029 128.703 661.215] /A << /S /GoTo /D (page.14) >> >> endobj 1193 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [130.256 638.356 142.212 649.26] /A << /S /GoTo /D (page.31) >> >> endobj 1194 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.561 626.401 167.517 637.305] /A << /S /GoTo /D (page.37) >> >> endobj 1195 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [110.491 614.446 122.446 625.35] /A << /S /GoTo /D (page.25) >> >> endobj 1196 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [131.521 602.491 143.477 613.395] /A << /S /GoTo /D (page.30) >> >> endobj 1197 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [156.826 590.535 168.782 601.439] /A << /S /GoTo /D (page.37) >> >> endobj 1198 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.368 578.58 152.323 589.484] /A << /S /GoTo /D (page.29) >> >> endobj 1199 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [143.546 566.625 155.501 577.529] /A << /S /GoTo /D (page.18) >> >> endobj 1200 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [140.777 554.67 152.732 565.574] /A << /S /GoTo /D (page.32) >> >> endobj 1201 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [128.742 542.715 140.697 553.619] /A << /S /GoTo /D (page.32) >> >> endobj 1202 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [170.246 530.76 182.201 541.664] /A << /S /GoTo /D (page.36) >> >> endobj 1203 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.277 518.804 203.232 529.708] /A << /S /GoTo /D (page.42) >> >> endobj 1204 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.209 506.849 192.164 517.753] /A << /S /GoTo /D (page.39) >> >> endobj 1205 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [180.209 494.894 192.164 505.798] /A << /S /GoTo /D (page.39) >> >> endobj 1206 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [191.277 482.939 203.232 493.843] /A << /S /GoTo /D (page.42) >> >> endobj 1207 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [109.395 471.701 121.35 481.888] /A << /S /GoTo /D (page.48) >> >> endobj 1208 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [270.62 459.746 282.575 469.933] /A << /S /GoTo /D (page.48) >> >> endobj 1209 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [95.547 437.056 107.502 446.022] /A << /S /GoTo /D (page.49) >> >> endobj 1210 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [235.372 423.88 247.327 434.067] /A << /S /GoTo /D (page.48) >> >> endobj 1211 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.384 411.925 273.339 422.112] /A << /S /GoTo /D (page.49) >> >> endobj 1212 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [217.16 399.97 229.115 410.157] /A << /S /GoTo /D (page.48) >> >> endobj 1213 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [243.172 388.015 255.127 398.202] /A << /S /GoTo /D (page.49) >> >> endobj 1214 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [225.26 376.06 237.215 386.246] /A << /S /GoTo /D (page.48) >> >> endobj 1215 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [251.272 364.105 263.227 374.291] /A << /S /GoTo /D (page.49) >> >> endobj 1216 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [192.065 352.149 204.02 362.336] /A << /S /GoTo /D (page.48) >> >> endobj 1217 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [218.076 340.194 230.032 350.381] /A << /S /GoTo /D (page.49) >> >> endobj 1218 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [209.23 328.239 221.185 338.426] /A << /S /GoTo /D (page.47) >> >> endobj 1219 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.414 316.284 249.369 326.471] /A << /S /GoTo /D (page.46) >> >> endobj 1220 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [221.394 304.329 233.35 314.515] /A << /S /GoTo /D (page.46) >> >> endobj 1221 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.542 292.374 207.497 302.56] /A << /S /GoTo /D (page.47) >> >> endobj 1222 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [212.807 280.418 224.762 290.605] /A << /S /GoTo /D (page.46) >> >> endobj 1223 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [176.921 268.463 188.877 278.65] /A << /S /GoTo /D (page.46) >> >> endobj 1224 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [213.086 256.164 225.041 266.695] /A << /S /GoTo /D (page.47) >> >> endobj 1225 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.234 244.553 236.189 254.74] /A << /S /GoTo /D (page.46) >> >> endobj 1226 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [200.314 232.598 212.269 242.784] /A << /S /GoTo /D (page.47) >> >> endobj 1227 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [209.768 220.643 221.723 230.829] /A << /S /GoTo /D (page.47) >> >> endobj 1228 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [223.058 208.687 235.013 218.874] /A << /S /GoTo /D (page.47) >> >> endobj 1229 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [238.51 196.732 250.465 206.919] /A << /S /GoTo /D (page.47) >> >> endobj 1230 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [261.773 184.777 273.728 194.964] /A << /S /GoTo /D (page.47) >> >> endobj 1231 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [232.264 172.822 244.219 183.009] /A << /S /GoTo /D (page.48) >> >> endobj 1232 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [237.972 160.867 249.927 171.053] /A << /S /GoTo /D (page.47) >> >> endobj 1233 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [202.197 148.912 214.152 159.098] /A << /S /GoTo /D (page.47) >> >> endobj 1234 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [209.569 136.956 221.524 147.143] /A << /S /GoTo /D (page.47) >> >> endobj 1235 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [135.407 125.001 147.362 135.188] /A << /S /GoTo /D (page.49) >> >> endobj 1236 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [107.721 112.329 114.695 123.233] /A << /S /GoTo /D (page.8) >> >> endobj 1237 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [117.684 100.374 129.639 111.278] /A << /S /GoTo /D (page.43) >> >> endobj 1238 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [169.449 88.418 181.404 99.322] /A << /S /GoTo /D (page.24) >> >> endobj 1239 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [101.086 76.463 108.06 87.367] /A << /S /GoTo /D (page.8) >> >> endobj 1240 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [407.073 745.953 419.028 756.857] /A << /S /GoTo /D (page.31) >> >> endobj 1241 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [400.727 733.997 412.682 744.901] /A << /S /GoTo /D (page.18) >> >> endobj 1242 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [405.16 722.042 417.115 732.946] /A << /S /GoTo /D (page.31) >> >> endobj 1243 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.363 710.087 424.318 720.991] /A << /S /GoTo /D (page.32) >> >> endobj 1244 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [437.599 698.849 449.554 709.036] /A << /S /GoTo /D (page.14) >> >> endobj 1245 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [440.259 686.894 452.214 697.081] /A << /S /GoTo /D (page.15) >> >> endobj 1246 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [421.449 674.939 433.404 685.126] /A << /S /GoTo /D (page.15) >> >> endobj 1247 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.487 662.984 423.442 673.17] /A << /S /GoTo /D (page.15) >> >> endobj 1248 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [421.649 651.029 433.604 661.215] /A << /S /GoTo /D (page.15) >> >> endobj 1249 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [446.555 639.073 458.51 649.26] /A << /S /GoTo /D (page.15) >> >> endobj 1250 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.487 626.775 423.442 637.305] /A << /S /GoTo /D (page.16) >> >> endobj 1251 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.717 615.163 420.672 625.35] /A << /S /GoTo /D (page.15) >> >> endobj 1252 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [428.274 603.208 440.229 613.395] /A << /S /GoTo /D (page.15) >> >> endobj 1253 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [481.384 591.253 493.339 601.439] /A << /S /GoTo /D (page.15) >> >> endobj 1254 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [499.646 579.298 511.601 589.484] /A << /S /GoTo /D (page.15) >> >> endobj 1255 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [504.069 567.342 516.024 577.529] /A << /S /GoTo /D (page.15) >> >> endobj 1256 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [419.586 555.387 431.541 565.574] /A << /S /GoTo /D (page.13) >> >> endobj 1257 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [460.533 543.432 472.488 553.619] /A << /S /GoTo /D (page.16) >> >> endobj 1258 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [462.734 531.477 474.69 541.664] /A << /S /GoTo /D (page.17) >> >> endobj 1259 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [482.121 519.522 494.077 529.708] /A << /S /GoTo /D (page.16) >> >> endobj 1260 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [488.757 507.567 500.712 517.753] /A << /S /GoTo /D (page.16) >> >> endobj 1261 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [459.795 495.611 471.751 505.798] /A << /S /GoTo /D (page.16) >> >> endobj 1262 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [471.97 483.656 483.925 493.843] /A << /S /GoTo /D (page.16) >> >> endobj 1263 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [459.795 471.701 471.751 481.888] /A << /S /GoTo /D (page.17) >> >> endobj 1264 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [408.329 459.746 420.284 469.933] /A << /S /GoTo /D (page.16) >> >> endobj 1265 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [425.484 447.791 437.44 457.977] /A << /S /GoTo /D (page.17) >> >> endobj 1266 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [442.072 435.836 454.027 446.022] /A << /S /GoTo /D (page.16) >> >> endobj 1267 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [432.119 423.88 444.075 434.067] /A << /S /GoTo /D (page.16) >> >> endobj 1268 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [412.941 411.925 424.896 422.112] /A << /S /GoTo /D (page.15) >> >> endobj 1269 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.032 399.97 437.988 410.157] /A << /S /GoTo /D (page.17) >> >> endobj 1270 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.682 388.015 456.637 398.202] /A << /S /GoTo /D (page.16) >> >> endobj 1271 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [435.347 376.06 447.302 386.246] /A << /S /GoTo /D (page.16) >> >> endobj 1272 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [438.764 363.761 450.72 374.291] /A << /S /GoTo /D (page.17) >> >> endobj 1273 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [366.436 351.432 378.391 362.336] /A << /S /GoTo /D (page.41) >> >> endobj 1274 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.552 339.477 379.507 350.381] /A << /S /GoTo /D (page.40) >> >> endobj 1275 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [468.373 328.239 480.328 338.426] /A << /S /GoTo /D (page.14) >> >> endobj 1276 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [435.775 315.567 447.73 326.471] /A << /S /GoTo /D (page.38) >> >> endobj 1277 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.408 303.611 383.382 314.515] /A << /S /GoTo /D (page.8) >> >> endobj 1278 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [376.398 291.656 388.353 302.56] /A << /S /GoTo /D (page.41) >> >> endobj 1279 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [380.822 279.701 392.777 290.605] /A << /S /GoTo /D (page.27) >> >> endobj 1280 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [377.504 267.746 389.459 278.65] /A << /S /GoTo /D (page.45) >> >> endobj 1281 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [373.938 255.791 385.893 266.695] /A << /S /GoTo /D (page.40) >> >> endobj 1282 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [394.51 243.836 406.465 254.74] /A << /S /GoTo /D (page.26) >> >> endobj 1283 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [399.651 232.598 406.625 242.784] /A << /S /GoTo /D (page.1) >> >> endobj 1284 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [438.396 220.643 445.369 230.829] /A << /S /GoTo /D (page.2) >> >> endobj 1285 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [437.838 208.687 444.812 218.874] /A << /S /GoTo /D (page.2) >> >> endobj 1286 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [447.252 196.732 454.226 206.919] /A << /S /GoTo /D (page.2) >> >> endobj 1287 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [435.267 184.777 442.241 194.964] /A << /S /GoTo /D (page.2) >> >> endobj 1288 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [370.859 172.105 382.814 183.009] /A << /S /GoTo /D (page.27) >> >> endobj 1289 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [415.142 160.149 427.097 171.053] /A << /S /GoTo /D (page.34) >> >> endobj 1290 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [379.726 126.994 386.7 137.18] /A << /S /GoTo /D (page.8) >> >> endobj 1294 0 obj << /D [1292 0 R /XYZ -16.307 900.716 null] >> endobj 1291 0 obj << /Font << /F50 34 0 R /F51 35 0 R /F60 57 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1296 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 1297 0 obj [277.8] endobj 1298 0 obj [1000] endobj 1299 0 obj [667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556] endobj 1300 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 1301 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 1302 0 obj [333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722 722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000 722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 556 444 389 333 556 500 722 500 500] endobj 1303 0 obj [667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722] endobj 1304 0 obj [333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500] endobj 1305 0 obj [333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 222 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500] endobj 1306 0 obj [556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500 444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000] endobj 1307 0 obj << /Length1 1428 /Length2 5932 /Length3 0 /Length 6897 /Filter /FlateDecode >> stream xڍwT}?RP i7FtwH66K.%U[JIARiPQ:"vh}[q(#DK$~X 76sMA@o1 /q`KoK\DܯUgHNIJ!  R(I}u{N[O"YSIr#Zӄ ^7uB Zʋ3ohk.K0QbuDAu]C@W|wo4}ǫ@߸Cq=j̧\S乑ռ|?`yik_bMgDhg!=zQ%0EV׭5oOCh}U',D?9>4n`W0~igOPƿʓ2tqeMZYI:7*N n H-5$Z|=I(d C4aj7=&XM5,"Z徰[`*{Ahr2a4Jȕt528Y1Ŏ]XbG;LoPM$ i:&P<}E|II' „w wePxxcO%[ !{˃KJ~—^|h(Iy~!'m˅b@*[O?en;ng_j:|Sa7ϟ;zwv:ҥڬ5] apb>ϦVW#Z j~ߨ:$]jR]v[T| miyoq)u'hf rIViIrbRTxxq9tI׶Wv1p*Ror\BV? PsXG\sl} T ; ]GMIs-j*zѨLd- ﵪlL^D ,-1Sfܤʝ,kӁjd$NH-y2ހ>$ ^9o]@ o42թJ-ctxCj徹x8Z7cmCvkQ#(w+D>amϻˬ܈c>P&GЏ_r_D oz-n-SP j݉)"dh!̝q=xfd Vu_ZsɯrY2`ٓx1B)q3W5},a4fl_`E3`U4tA*-_ɏB IԦFҐÎTHsfb\EKy$w/.>@X!(YG1Nf&wcy:VtdKU}j>Ҽxn"D~DE=<9w{wa2l,U6JLDZbH , '_EӖkW/A(9SYO^ӉpSd#AIz'Òx ]_Bb7Z|sR„d鸎ӊUeK阸g) 2on,cO;¸մԵbq$a9)ƭc%4}%$D{iÎ?nN bL[NIno=ʩO: 9Sd:vy%?GVNgN!c =^lh x$*'Vz*LVrRyjPq 9yv}~@hd'z]{M=) >ޘW$3WķMD޵eCvWkK]RY|V޷mic6SYiA}+ACi9|"LIb {})͟r(=״rEUR@s@_ڔGZ\dDiHܭzpvjV#p$faVee!a2Nw}v47E@[ךW;.DQ<(y6]clV z1% 5NKuf!g(@maXFV"e}O <0/i*U׷wO@t"jngZ1$sWg)Jpsˈ 7n4[k_ )}Rb|se jiH܁ꁷH\(~hݨ.eM. qC6Xʏy``T}9Wa(!Rvy]fޜ}<6=1WъGK2TPV<oCnR> Q㛰_byOOKMǸ7kbh0mf^}ؖ B>}2 s5D?jVF\҄4SM8ujjTw]U̻<_ft+Z*ZI/bbcLKh-UվlrH)LRY]fu= 8^džx_QS*kLTqh)W'oTʖ~8"sM{kfGOcM)ًꯟ}uִۃpJqnؚ_.H\V̳5~唞$F15hOcnER+b&%V\Z] cdX:%]s N7.? * MJ>q=]\JDe ^~ls&}zFWw#knIgٍȏJ!גkԨGnH^xlKΑc^.I\u{y;&?VBY(MӛNR߰={;CN*nC{- ^"w)`آS_0@M?^-FG?__<8S9/ܸu4Vbȇڣ=Y]tm9<lqݘp~.T^`oƷ]lK K鍋aiV)xؽ|qZ{-B R\ 2͋3NT{zkT i$/k̎1Oq\]knt4BtvZ]ū7+{I@^.QmM%lZ,Y7Ȥs F5- P)UNrgLܝw!?}Q_1Ŵrm*w@כ󪏗Jx;t?SmU ]ڙEߍI\o+hYQ2 %{)%ogMz-nW $uܫ{ (ti& Q}9R]q]{9OV)堇I9 9ႜ35'H4yC+#\w*-RFA_'_e[ =N݁}L ry[HQ'{W4vRDM^Ph)@w"R6lxk9Tٯ5ޖVH.s3KRL.J+(ZVxCnp8zݢF<4 rOm?OB":Y=J+x/LGRR%DXiiwnnj 0= A窦\$S,GZ+\-7=rݜ 4;™?44|%FwJғ-; ȋVж5Lm7?+2aկQO.R+{]7_eRK-qY`(%N{XmLJ,8V4\Ce/$E+\ӣ#ީ6%J' 1{R烠@Nް"Q3 ®v lt%{f=ǣ%RBM#r(1fUm+o5+<lL [E/f 40' s߫V"At3-<V^6:kp띎k:mbBh2y̑Wa/#׷oѥk~;˓eƖ1PwhjLz :c-xخ25Us9.FˢLRI$xZ B꜒f95*qÊXFKkc39exW3zeKWOx[?ېfg endstream endobj 1308 0 obj << /Type /FontDescriptor /FontName /LSUPIB+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/arrowhookright) /FontFile 1307 0 R >> endobj 1309 0 obj << /Length1 1406 /Length2 5979 /Length3 0 /Length 6938 /Filter /FlateDecode >> stream xڍxTS6ҤW{I B$t^7A)QtA4i_xZ߷~gywڜl&H'z&V" D89Mah8o;9 C"dqDcljh Px1@DBFDRDA 鿁H/@ wSsqEc} yiiIဲ vDzhW" 0)x\hOaa___!GEW]c q~Q=  q0_$08 A0!gh_`ݿDDOD0`G0!\(  4t~h G!1>0{뎀a DP0/¿`Yᬊ (_SyAs\w C8Cp6CyC`0&\ h@$-!!.@?f @O'ЀàQ !HDpр wvka'~}ugQ37w5ULM PSE J @DDD_'7VCG؟GFm HEsz ?c >goy~+*ޑ7;z={1L⿡Z o63#En ne4`~gCn"Q_L_>1e]d:t5?F8(UgoB$`8PѯƊ˜(/Er#= 3uC ~0,,^Wps oe;.j VQ.~='7GWEO1}URXW9,vdp|N9Ո׆;b2JWlҫnԖe1 XqG'Qzd{jM\a?%t&_IyUC:'Tw GӆiR۪-`5鈓W#1Hfˮܽo(% :o=Ʌ3!EݚJbdŦoMu dCgI.J~$*) 4yxMS2y oRE t]*oZR.U%疋T~SU޿[Musrc5<.g:dk.$3/NqF4e#5-ilu;OZ z_C[N؜n@I=%-D/K:8Ir~zalqTӖ<}+c=Ϊn.SB/O&c$@yR/A$t|Wd-Dz< 1h[AVSm0<Ħ}#̳[7SGX=sj٣_65*8R~4- 'kl˓?HTG#̑| ?)6ff7ȏS\^%3nxj|n+=錒@h>Y;%m}nh]ݘ㻐KU=>?dP3^5b">,2y¦Mfz'{|s>o EPdJivbqRhߨ<&̀7$9q40R"811t'0fҎB݉FI`NΚJ\ŋB([y~S%[0TzAwk: (͙i >c#$cȆ]dG[\ GR6ȗ)kkvl$ث a]&ŲۙvX&qDG9*K%>u'9 QSgUTxc!SJE3Yra׮㞈$UX]9Qߪw C=U'ۊGNbxz+DOX^ <׍)&>Ƴ6/ΗeY=>,IZi joׁt7}ICHyNAel YceƆz;ܕ~k~̙oQ(0%)8f1ahT%C.ċDqz6>OWMλB .3:ʊQNrTjQ]1rO4LVM*Kɜ7XRDXED[4[טV nqo\_1Y$a+_^}J'ہyD g^}MoN$ؿ*(=yч3" fpқg 8iz{o2p. M;>[H mER^$dml~Y׬K@-krWyzne6D~ز0gve ٷUgK |ʼz/ycg@;-KJzB3lo2GRYWSa9糗8Bqb*WRkPg ز.3{,O:1M9C;W÷fӋd`}Zyqp:qqִ3/'eIw|;5XM J]h/e<[x#Sf Â.&bmrT$ol1x* rP:K9<yЎF%#p($ m- !ve!5 }٘<:lRoX i<"VfDӣb~rPZ6M聭"P]{ΞL\LevJF'ծ{&GXW^,OnƏg)M<yjX`dHd:# /}>w67|O; ;YY;!\6~uJwc9pO^B讱vU oK(-,< v)si{<,|XG&ˈ8'ywr$e]B僟Mepgڶ1tzd!-&%Ze- rg*쒘R/JXdk7/ɭ>d=J7ZI#y|in))\i==*7?K|AO-0%=x&O!m⮳V!twiO/X!gPVja/.zj" Xp}z7ݓ )ޏ|{\ކYzzD͍$}ZFTW6ZtQށsO*`~EaX.e$P[cKF1gbf0$uU)Pc nq^VRՅ=jY쀹6Wά[%)]-yq-F/YShnLgi~uɆC <ۣ_ ;&є93?ŽƳ::aQ7,PDޜw3$^;zž%]% a|` DV(٠*][ oDAݟExoX9^8 J m5BB _ N7_c!亁c_tCxӱ[c+*7u>5ȏK []o3KGR)^v y/"z.CTߑH84+9@>yr"i^V]^ ehh؆fF7޵;Ɋw).N#gV],ZToLPNCb}#fؾkō6kɛQXS&֔ɤ8wnr??x竿Y87_1܈Sų,MmN}sCUd1sDϪ|@9BPᙖغR-As#[_A_n S,S'%ǩ~پ˙4ZsgPOWju% yκXgjóg|hRv6J~f̞^؉A<Ѻ3U5|1<%_[hyhno;,vdb>Cky>uL-|.6M[/FA 艹n] H.ϊ?t6V3"B0vC"n_6 ߯dYr*NUp6.JU1o>g:.uyoȞr}0Dæ$ԔHniMmsƕMd~XcN|U\&S:L: VOdg謹rt7ӫ]R/#lxHc?'s>ﶰ‹jD4szT7uC[[NFNMEn@ =C=r}N!*[gsi y=:$/`RiѩVaطz,E\}Jg]zΨ\y7??AiW~O2fN]eqĈF|pU[GP>3F`J:X)4m##~ W<^m1/LT; H\gКL-\Xj )O~y=3oT8?/M([I[ß~ XOyTp:#&_.,fv?m 56a D旽nWV(qw%Mt^\['cqlUEw#6H;D4 WWk -{eI { v*r^tD9KGJ+S-:1xjt eWlbt>5Qkq mTIDtI٥'3I˻Q[ҼJЀV_u8 Y#I9~ ൗ5򢎤WAv endstream endobj 1310 0 obj << /Type /FontDescriptor /FontName /FRBTTO+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 40 /XHeight 431 /CharSet (/arrowleft) /FontFile 1309 0 R >> endobj 1311 0 obj << /Length1 1624 /Length2 8350 /Length3 0 /Length 9182 /Filter /FlateDecode >> stream xڭteT۲-ܡqwww[h N!-s~}GVͪY2k-zjMvikK3Kvp.hah vqBA"5@dp d]\} `[;(IOۀߖ?.K!/`[gˇ' }_@`vd54(+ gxi 96.5Ok/\ d~ y[\@lW l!@g .^6. qypz^4]ܡV+USN:v@bib񧥿 ; o\ 5 w+`@@@#t'utuu+/ u9pq䴂;qYeg7vka _b3/E]} 4NuKJNe#GK{ItzY+Pyg7t;Qt4]bP8m_$a vW{5P+; eZAG3EտLlgC g"_sjk˲Oo_/;qo.u## x. `qp\\\܀}2с_ `+EݿnK: 7 myJ4>-3ZG;8.g ?Zڨ[Tƥ; -b]6ӤS-BGTq>-sowvA NR_1N~  pooki<"QLBPNnzǧvO n]/佛k/#Cg[d9@")P e⽧&KW/c2~}ޥr\Iy:BVwC-\9@FZ-,[ؒJ ,~"L8" (ŠQzd*N3;[٠/gLoJ)B'xRsA i[۠ z"*@'wԺ^!SVW9z.뛥r8ZYWy`ME Y""(MӐ NlNCN?3+#};:zwP{o [t`;ݒ'ջ̞9-GG[rMMm!MmJhܑ<=2fn_35 ˣ(^qpϒ7qQPWQ덿ELI|P"O۬1~3 @ Ѩ j /eH˝a^ϱ#[g"jg(|hRHeo\j9(l;?b{PM;!W?]= 7} *5|{D4h;,m_or5c)>/K|Xo$$fa8? PXVk2tUљq0 ޭO7˰d}z ߽d/}0.FnfG-j%q?Фw^ެPekd;}T[8xzNaQtIYR,|xY14ae%13&`z}V7XG+$p(4N2b{;Vy:s%k1z\-i:昇Ѩ|㯘R7ַl+F%t㘟^/Tܹ_pActbٙ];9"ŒMEϛKVRSUq4˿/ͭV@匘H-w>G P-UF\}V6hcY>hME`tq};7@7jvE}1!U G<`\.&5?ǩ"=uoK0Zcsl-Cn˩`;6K׏aZihl{,xSٽ 4 팼pɵhh˓eĴ&(hԏ0$D}rTG!^*79ID&-AAKOgaoS=.ƻ.s: s iP!U:uRtwg1eʵwz{L26Ab]p&IHp^CmD'%w*aڼkkNM[k5M˘w}?أ{F]\y8knI$Dc3x:z9HqmQ2j8*B%Jz;d'XY#n}t:VTGQג̡ò' ˴ɰb|&1C'1?98*1n c# ;YV|~1Q_&)@'4CT~x 4{N/ZAVSp@ KP3XBq(;Ⲫц.) R5FdeSĥZNZҦ}jdUm:ũӌ*\P kw7"ïYh@7[}#.!SՊ{'7(t-\BAb{5M] AF%>["k\t=(`o߱U.[Slbseu!~|M]%%PgƌtFEªx>EUκTn9)7Gwl1S \ܴh q$|"K|˵,MG̛0}Hh[uϑbͶl=OH*o!߷@ߪ^Tr!sW "zgΰ=2 ¹cWD? L=}L^U-W!15Pp_h(P1;IeJֲrNđ9s*<1.&aLQC \VU&mCj=-h ?%_C3q.F֒|8~(QID(c*ځŜ=ӱ2$St}RC?5#n)ulBKϬ&yu4k$Bu=nXG:10ǝ۫b+K#Dwo_I{.f =R_+@@"),?-t@<Cs{ːZ-HAQoŷ[uBcUv(˛Ϸ3tÐou418m镪a WA|bZm A" ۛԤi"گTY5ۧuUmIB72!~\>!kD h~a Ps6;i9s0]Tu޼+9fI6 #}mNs=+4vV^% )L̓K}Y"."m3³F- {2GRR0'Zu֧ ~~ 3&+o!w-T\pi7ƫo)lS5RQcLJ;gDdn78j]c^}qzӎM iI&ӣ%W (4ފcm#h8Ŷ]!6zE=/x6Åƪ+HDw{L zyF4:",{:LոB̲%[TÞ`~O}Xoް ;{N"MUX42" +B*Dbsɝ ~i!/BN)x_N^rLljA0sDp/-.:t~B8#Ҷ2̝1٭Ovjnn$ֺLtm+#U370Xt{Mn7*&HW7SrQ{wo'4ו}c-bYcJهH0c 6rXsj5_d+=gI s|ec38jt;h8ip~75=k6#%xۦ(Zp<81[nX{MIDkOLȊ>3h3|~w!/d_AaRgD}FugtNTUzM$._`꣇MAOVeFJʨc^&[D20;,V)X%.+ȤyyM3;DKP$%Nl{M&-!z3<[<(xFLp v<uȋTp{;(Hd% #"֤ioRFbh7aԯ).sgt`(|]y˺Ni >3u4=|hAض|*F,.]i}?/vF%IUv3So};bm+CO#,q5 >hrѫRAyoIIrXwzT{I־s{z}zjaVJG%M,^ƿŏ,J0#HO#1 Sݍs*wkN IDr7S?VHm,6 ր9GwKAoNNgEbQGPs_,֩ϱOwpN#~u2>SL3T,6jիfy1nOv=-6{ u:xNnSS`t_ )uIBFD䥯hL\ dܵJD[r/c3]LGpmPOO7 w?LAsx,ywu 5Z?IjH心]`^dL\H*֑FosAjd 08^no6ӘԜdFs3 ªٷ4ΖZY,˧yG1t 'g#Gl:B!NU;氐C#U +% ;P_*)\W[~jEz1_X $71<˜Ҭ$bkcU9oăubtk ,4-YJbqJV ~ Dcc.[n3soTjy6=ķ#ܾ kkIy](y>ܪKuSj%vfR֝;Fj.fTJ];NC]Ag$olw6yIXӎ(&M0@;edKtn(69Kͪa|? ia'w`:&QOd୐b:Z!JJy.D%ŸxmDsʘ4&hvtJɤ/kF=ztM.zRSv)m8oܙ I>%gWm@v;Q&Bk(:<7_X[ ~5YMjy5;nd.3`^sO/˱ 8h_$:eey%N{M`a7 |w3uhD~V3}ObV/ۊ8F);4TWKu-.\ݰ?MuX Cmc,8cN+1 `RO؃6N.T%4F^HՂNMiO7xmKŰ`.?V 7$#BklyA[$6=j7'q͸N:Τ"'~ͷ(we*}o+Xrx?j]c?=(O09zi| b&%\~ CàNfw<%`Ӈ%fX;=j_ 'YxO$]#}p|}z MˇB @o6_UBղτ<^mA9uB^׈!t+IjҔYX6Ԉ=gYx=H$?ɟ)hd?#:TnsO`>48jx0W.MScP09\�HEQRV:\@/ `Yi'2He3hQAƏe@e '(}).J\'.Z1`} =a6|H.gsnѺC'ԏʊĈ!VNV1Q bX~IgQ5T)4WXP].Dx $2b}3^,vmT|-M%K箨vs4o6Js~!ǩE H=v7t$?%ծA]jCmc _ Y,VVJz#QZحߒZuu}$tYxJ endstream endobj 1312 0 obj << /Type /FontDescriptor /FontName /TRRNEC+NimbusMonL-BoldObli /Flags 4 /FontBBox [-61 -278 840 871] /Ascent 623 /CapHeight 552 /Descent -126 /ItalicAngle -12 /StemV 103 /XHeight 439 /CharSet (/a/b/c/d/e/f/g/h/i/k/l/m/n/o/one/p/q/r/s/t/two/u/underscore/v/x/y/z) /FontFile 1311 0 R >> endobj 1313 0 obj << /Length1 1612 /Length2 17061 /Length3 0 /Length 17903 /Filter /FlateDecode >> stream xڬcx]-ꠓضmΊ͎mtl۶ضuy߽gǺ{V5FyߋHQN(noBD 5vuSDF.vF.@n 403"N.J5e *0;-܀6@;U@`fi((jIK(%@; @ kisR6^LL-)͙/34 ttv t;ٹ큋=f"d7/ oVEQt0r'_7o?%O.c o`Nlig_ hN@s#'S_to98xkKg=ߜ&.s[13(Rvf&M] Q33TIxLfp .S(TA['j?]mll/ 玱1rZx6g$?p\6C 6Z:[*ZX̌lv_v5;Sj&?|&v.+ҿ3(*)h(ſڻz8%?J7_0@:f߄LL>laߒUJ?`LM#;ӿ M\נ?&pk&F{l(zRy}HQ7;8hK4e v&ߡ;X`I1H|MRc1;QAj N)Fzn h~’}M>%Jr0to0|upQ B?Kju!j o&KS5R†*9tM@}\Z=! v d봔Ύfs8 *vy_Js4V[rINi˯$ Tj0.6n[ #~yIÊ5Id&S!B= ]N0 틦2] uUzb#O~cV49[XQÀ(" VRH3 0m@,MQZ66TGH hg)n(MHXU+ 9֮a\AS ̠UnD!T:_s au'A7f_K~̱N*"hh蘒2#S>Ȩ.޺&yԼ/_@m5rLKR}kA+OGK)K*=0Sm fl<<oمIyw'QљNk%IDjt&/:3i~޾Z#W ~GUXvqmb=2NN1IUc0 վW̒;pސZJp8u %ٳ&M<I/EDVA{+pW D;/#:!GCFf& s) &SIȱlt!!h; )1f*9.^G|`սOKX_}Ac*;% 9^ |t94;֭9_`+ l6سO. *븻$[3~75a!MGOhu/ӨW׼O~BRaKiNe3;X|RO,͉f 7v MRM8?e%:Qڇ*_QŅBȾ^ao!1yYU<[AЅu)gkP92ܻ*X0$2قnlh-Mcw;@sL#ov΋(xXx0) VFƭ;p /pNl$}+3}п)ENaƋ$bX<0r Z xO(4* &!@x,W7aą53V_HE#!X(®ƗUeAIb,#MF@sqU7J@n%!&ZToLgUc7dAkuv"aQZ>w݀(ǒJwFuaI߉㤫H[((@I>4u=Ke^I )8RqPh-h]Pc0'Qmqc32f$p6PacT.a>}{Mj6~&*<^w_VS+>)ktM gYWn;3$ioe"[WK`]P~* Lgɯ .$u=:L2~)\Ub&;k&~K^oA89#?ԄK &V`=E141 $~6B1'4`p f3B8I|ߍ~x/@BWfQ>JeWHcl:9ؑK?kb l8y!Ċn<9:tv;MT8z%?q宄ӯnNV,J<6mY}Vʋ9WgǗ3ȕ|o) 6D}Bu ?(ES|_WI3voccAgoՊw-3uէ1cD&C t_t41cX7"HӲwZuwBybR)G]GH+_WJZX9f).s%̇ľ?\iB|œDg)E: WлV&|%13Uf3TO|CKgV#wgZ[ ~r3Hn @Z?JB\v=,;4wj7a(@ė%]Ju7ʹOr-~ u5&*!5+߉ X~Xzneotɑ:jӂҴ\iIX@S)>Kwv"z%p"ՕRRc"Ds 9GYKEieJ&|P)EJ`"M"ֽgK`:-$0cy@`:p~L0+bM*S c |NHmDBV}=UX@#1t7' !cScq/"qDQ|SCTN7unQ;+،mQL-E^|WJ(H o"HuSť<9!GhkJY`IIo7ذ%F[:U]9 D61io'Y/KGY{(]r,zأsF'!E<)^׍!ZbFG>2:&/}% ֿXVe _9xNN3e[t)|oρ0b̥im`>Z5po G^)>UR!RB$Z{1EGl#;7u c_Snjژm;ٶVm*';hm_{A7E`?uȤۜ)iZ+x`^(tfFW.e=ܺZ"c/8E.FeOα:׶^P6}kR;uW5N7ƈˡy_fwbm% =*+hh]}lE@Skg3?0:ɓKs5:w74c0dX\C4  iPRKmPyhIyŬhpaհ'ϯ9>&j$ΥޑE(hS`u(ؒ.evQGH_]3-w\Hrpp 0hJ.6IgэTYZ=(#"v8hV iگ>/SLP;?ПR<@Rs@WSȵA& h)arEVEqGܯ18@?:2vDI (*YK]vG>hwϑ@Kw('b! B5I(#+"i?"3\d_m\z$'E#S;[KE& 0g𞢋RJjHJ|~Bn|V5[HWԤa4'봚+KҼ&xc:ФGO?XT8:aFxb'sNё~\6GVpXC4Ғ!1'鞈k9ŷ.\RYTOhk7~ f&l^@!++?r,Bػd"npvEѪR2E荘Fלz䷛@mZ_l@_մgjᨁrmӶ.DŽH(ȼGB|ȹ[\p0Ոy/5Vw)2yhiz~g9E&I >بw(4Mޯt|W>llkH@2T dIJ!>kۍ.s;±=CS.r?K%΢4},[pa+q-f춞ӼLp*. $* -6g÷31c_BMW"ۭ(ͱ[h[&ZQQB~1:#=Nҝt]TORlALOarU Wbׄ`<@g` ݫG:ԁU[ EJ0ڱ>Yi.-HҚ)nn,˨kdn[/?Ѧ)C6EgJTr$9d;14{Y *ca %bw/C¢G'l2*_zA&e}+.){"'|a7@v87@86i.횥ZS+6Rq <~NX0[m3< omWjiC#cTD2<+1y<]b?*f)6LSh,!6y%Bҁ@$IEV;ٴ\ʺ{1d j:,o0:U0W'6%FIhNԂp4  &+OB fbWG1h 1#сE ;1˾?G+"azkLM* ?j?Bmrv.xo d ,<#}I:v}=p2G7pWV,!ɳ5Y5Z w֩ϵK뽁'1X؛zkw0Ō:Ys۶ Ѡd {b# 7jn07AM4 *"&Hik0stGvju \eKgs5ʜk4y>U4 >1N 25=Ǐo/ɻLIˏ!TGFs jxO}3I6WsI `l:"8aMˇgN9*>;Q"L mA:[oA1Ur/OǮĔ<'ɾA|'G98*fSoƨz9'B(^z%rr`]ËqF{[]Wzױ-*Ksq"LB /)/:森^7etPOvs#q7Y3/Å)G"S"&XJUtݨr)"՟&*[=+&d;AbdasQ9&xzCg;L0Kc~ygoMw_pߖCSXyXJN*˥l;Ntp =~dJg{WB{&LY4q|E@@+nHh6᣼M)^]"mDe2lWwi}bn {;F0-l ~cR ^6^GQM% ŃK=W>6a1 }NIĆ#U^焀=j1r9 38y_.$fY o7ϓ8oŠ#ATOs}Vy}DiΦ x8aơ,?-,_-eQ1O,S ^0|&yRԽ}hMwdQW:# ~xIY^Ku 0.װ>r#L2ZR+C1iwgw_N+)8p 9"mQAeg}NQq1*gO R)OZ$l|{prtjKe$fpr{t5zXw\y/mr}m;xd̆+]hSلvGRV sWyDZCo3adC%m=j:y;@K*RU} *#WiMUv|D4KrZ`2< Uy|~!.iǨkSYsR:t]dfpUī*k|b D+z u7hu_uF ]e7QRLG` /̲Eq}t5D{FH%bԅh? ~oq=6sXrr֟EQE)3fݐʔ| p9ʋ"8:4MYζLXC˽<ٌ-"u >Mϙ;ELd쟧7z, h\6cxiZ'[%4KFVcLx~iliXokN^:Q{bΛZ0.܇ g9ZBʌ Y]@v0zǩlp7g˜eE[TSH;DPCuEU#,I:_䜶pRV OԭCDkhtpKŵ(AܜݲER1Lā`?aÁe8@\`ng='Lk$2Bڗⓘ^gGa{Ι!})АX<5Z/rkOE2zjt;V352+X6FqӉc$#_#xXi P`ɋ`%kF'l̺IŪ%zWK9dM]KvHj2=P!IqJGb3zܤMRå..R5 |J/az/+5hNʘqsiHyd{?fxwmI4=,r ǒ+0n.ZRAC^r1t( zG 7c,8oۦ Sn ~&5qF.X0l&CaC܎oo!eO*Fcxϵ(M+TC Er=ڒy؄8;:]j)с4^AI*Er ̛qfe㮮rj֡mҏ/~Vbg2 ]7'p߈pb_*/ؖ@ŪʃF=kSRZ]@wH2b ~o?=wj]΄XA2o}Ĝ;j(7dzcpc)Zɖ|UlOڑw ]p"nAZa'ͮEa_ϓMkpzRe›?F˻:.sDVҍ̬2]r6/ZfnfDM#+"*f0smQ:gP`A{!x|-q hT=K֪8vG uMXHkGܴȘ a)Aat|!ur l.>6>ب'sе:8{ךS3 ƑN>S<1*=6 X1eG ጂJ{FTȌPkUukҭP'v2e6^3whd| |s9 mzz!?n!rud;g7 cuW vZ&?ytpE'8f!g*xa?m,w J_Qd"XMoD3GҰrN͋,cKVjkt.NÀ?r=<~ E_<)}z~fƆ~%zS EɬUYx@)ni'5q87σ2* $'I\fqE"&{'dWJ{̝A=p՜c2Q(wa1ͱʤnHDB@WdZT\'d d b9wvH zҿoP%RwGa#`hz30KĒ|p{aǸ⋄"h X#ց-}WBĜoѶ#bg `)fyXB)ꥰZ7<TH.U"H cABme""*J2ԷkzHY7쒫("düHeeٗAT^TQe?/t.`I&q[FG.EOqS:}j|;Nz\" :Y@jү+x;)+ /J9̚9O}#ot sOl3~(KfO\3r$mN"hRSew BF)%Xnzr[Ki/]2ELhc%lC yy)^?K,!\bN2U͎6 dCh? 6)a loA{~`IPg %^U]C{H :bѶ"Uӵ > '^&]^ ä#d 颥w:DҔ掀 IF,=-D<2q=tƚPˠE=Q2UJN*PD^1=X2wgMw ;9ʅLԛ@J)N㖹bﯘQکCFέE5wM^2"^J$'$Y[RIecBz% XQ3C2:OsRQݓG@s ۂ(brpVɯm s5i"uC⑗PZ "MA59 odUX`Wē}!LpȨ$>KQWvgwA.XG2ұ|G?2rR eP3k1v`C4%ե[ڤ -dd0?9.@7d#L.^}b‡Wda꩑"xfl>-WzyEApLq0<s-^C3QC@IYS5AҍC17aNuEa~ء b27{8jU٬ zrW|HEM$ Fǜ&B8Ռ{Ux b`IfizHoIN0 6{ 1Onp/ϖH62"B8̼xE_LE6EF/h;k:|PYUq;H@rg." }1g5꫚^,Sh}AVGjB w(1ԙe/YX(˖%+Ra}Fr23"%Qz?σzL PFݾѨ$TQ:? LCŗ%F _^^m X)('/ sk2㘍\X8od$1=ѥ ܟQ$MbA5lXng%Zx?ײ^saPOuw?jY~7evOEM{>!qt6qz./@[ i\5ʗte\b9$.M4IsH g`fޗMt2&aC]vɣNҏ@NJnV΂0idNR6yxK㨁ty hZ%JfC߳X'6ΰ&9Kp6XPp+Ha/t"᷽:y$iܨQW h2Px :L4 .Ш {i;83vdZ@@񊣗. 7M8jAML3ۮ c#"x̺ 2YJ,.*1RBA%5&UҧZs: 70 zN2SZ**pA27Uxz:s߯,dW֪ ќ$rșn" ò>)Wd߉)V*~ݙlBڐ5Kp6tt)U3:LGLV:H/PkPѿK`/jQQ"U;XA=Iݚ! a%#p*BdIz%ew|} di9JZV Wd?6Vxwh[.D\B*, /\Dp} q-Дc |6(RQaý@ϰ!(lI^ɑUo?,İ-Y+9V@%  p*ыx-' =]T|f(7qXWwhxD}.Y:AQf@q4~`| m |MlYa:柁qhDg3Oux5X?2al\_<$ͣX_#SOc!T)gy"H.#'~q{v0N_K(M@DxÉ*)e;9^ Af^b2sW"_^Cv *_0>[B!8׋J:`Xs> Vj^xk򼲓#[SꯁJmLḼMNPrG>UbwSLQHˇ{QI` vSh-Τޟ&{lШN\0 -`#'pdgn;lFwR5\TϿCȳ'ި5q1Ksm4`s* -$\V^)_ÊʊMN-_k4*ua&ٽΒql1uCZ8 ڪ 5n0oŋbb*zFҧo̝ђ{E֍ϓ{3 M,)"D3% V-L'n:+G1I\Dnۉ]p ޾l\5ȷ,>hwkLl5"~:gAUTM|Jtf}y5tpŽ9u{N'_M]M= mr$|$~0-CGHC TWwC~l-*X"-;D@)o#\=<,[`* m 8ϗ`2~\a&[ 3od>_aS:*WN<@+fj2e9\QbtPvS-<@j*@b-'j5g_W[mY ! N+ 9ab< RT=c]K!z&#A#,c] =V\:j5?e`  7= n1'7t@eizJRhK&zXcP\n[DWp%Ec)|5&L]]BM]EtJBHz)(ƚ)H]~-Q;6i"&OWW+i1pe`5rFLA L(x{!Ȩ]c' SG4  TⒽd\:] ѹ];(! 2}VrhJ3v\)"ؙOK֒ƃ#&+DB|#yRWWH[F |nք-3vۿF-4k/p7PN{zm᫠w$FOAlP&qH!iߕ彩ym[*X=%K[ vv9i !1hd]FsM i+KE.rt BMJuHR/B]#n Ⱦ GGL5~ 3. ʄlԯ4,OqP@?{S2XA@O_)?qYŸ,p6s)߶eab̳ 9X ۳4#H%sX)azW~%0{/qO=y2I)\7Y6'R+[Gі4,aw *;AQ*k(A}!eHMVǛ; V%F+[K*]@'Xu;s(S@IL>EOcc&U?z\#ywٻ={ {)3E&OK_bdMmދ'efX9R&GL!Z{.!Dz4 Y?3{n6X 讚K1RTh$ҁhb.Ҏ`S> -ïD<ɝ|0\) 'F N8}i`.{ 32X/j 앙u^%Q7@D>]3ybr4yH=C~SO$1LZ, 3yف77IoӐ`fS 2? IQbL`(I&rFSPUL"N0Oџҙ[YNuVJZ)3& u@ ŝE[z\trs /Qu[ )M)xכIC tLZ Ь4˂ϾaTiI/JQ+L p0Bn;7%)$^?/4Lĺ:W="s }jܣT3w$1_4%әY Z Z8>1aW*V-&,~u*[WT]j譒]C[/(ݺ|OPJ'de"~c0 j6 (pϜ?֘lkX{1XkEL\c4d}>KD/igP Dh;p;Ѷx#9M~2M摏A^k;2+;mZ,FBH?_|2j>%>gJr%qT0%x&Xc腦E#9# u8[> endobj 1315 0 obj << /Length1 1630 /Length2 7318 /Length3 0 /Length 8149 /Filter /FlateDecode >> stream xڭUeXR须CfCATFBDEӃ~g}_3{{Žea,!J0(G_ih jB],lw0 3a *q POX`NH[k@׈_.K?H5zq99B;s@@V3-mUMe@ڮw X\ l58 ۻ08A\mg-`"fl WV?9<;2m:!wYaD 0;O0 ?B;%;9wȜ\l Zn vw4wܿ>{O4?kE!VxOrwmx|Eje:s+A0 OK `? D?qxߩ\4w %e` {}8BWoh; Ej}' ^̶p%[XXfnC\l;m.o-[ S<<׿axjmBw0?ya/AQੀϿF_@_p߿N/F7Gퟆ0N?]8Y{›$^ۥeATP~V0l v*kK [+{u!fX9F_;[[ dEёG,ʵg^Df(koRcTpcy}fA3&<2S'"_PjUol&nui;J͕"M@r9b]Icn'5D!Lzj0zEF?/@O+r w 1v[׋;G+QGd1ѲD0FcZ6S¨q,$ʼ?et^j(IwocG%t;Epjj_~^{J1&`c0Lxrl,\rOd}ݻ k>eZej@r| Z˵3}hZOi&Mv1d-MT%WF'c*:@LZ:L(YeRuiZ7:(IOjKxanW4kCzai20i5:B_~|FiD_`@? &S)H9C :hS '(Fxv6N~jq,SO&ԛ]+잎Q@ -U`U{WvIy=UTͧ~fH##mKP}&wA ~aPezOtE*ҳ%\EA:B )2Eں>o ljo4^/"1ϩV%̭ 20#ȿATәh r))R/zû+`T/RES+)yMڭcB|\bպAC@FD@&U㧔z2I`FEsyTZc_ ca c{,򠂬ƕ9Xǒc!3%|Oj"^IE]]5[ށsK޵嘋/O{&XhvvՄNd59\^kO?>J—H@U8gp VҝxשB{H8\YؙC,Fc]M`|_=9Oyga'? %N#Ars`Iv:߿۝K y2_!lpZn<A"^kR2WYCf}2e9JBGlZ6]2*h *KQn]D9 @(pi< Y.2%_C cŌAc׽>V(b͠p"le*>8ER6/۬N>'k "ŪPV@nj$(:gZVJdgxI`^D4Ќ:ڈM qc I =?vyƿxk y,Wsϊ ̃@g9Wrh9HBatRLEw(Y#:yCLX/ԃy'{]86r S+޷Tn&iK@1vQdM15wOWcyhI)G^zcR(OUDwk% k re(TbpUw}ݲ% ,HeIh2qB[(wN1w 2/]P⨉6ϳ=%W D`V)yDd Kf<Н,#=-ט$bbcWW01dr'#^ _ݲ̬6jR±LXچN] +bΆQoCLu{'hTE&$ZHWh_Tͻ^s;')]]DLr彃 A%&FiL@L 1Ͻw%rO~L۱,py {W `\O^4WˊԉI "* Ψնb+{6I7wS*_{Ɂ b~+$My +5lDy"R38Z4FBaAOyDqQd2.W1{qn .O3gO1N%\.vVk/0W g1xb:3gG e{`(x(] )ACk(e4BRPh厃` ]ze˯R/kRtZ::\TZPh/ D+?6'+z*TRDgQv+#GN7svl/ʏ+M6 S)x(T5k0 cd@I)q Gk=a*?޽#^T<'6i2\5)Q|WA=sc.wi焴(D:<)#gmAÛ2leySoCC`eb(hOSk#keBb>02Z˭&?>f 2P-zbXW $R3`:gY$`S\U,yL* w_6腨-L!q H dPTks1Ν1X6)F}}i:/M=٥Jc·]gE6h M-S,p"Њdב srwi9r@xQfbf}@7˜ߌZөƢF+jP*O]p8q$S똧L&7xpeۑQ,daY\PD ka˂J$˻ xdrڭAWQJ^'ٍVo)Ȝt"W1^먮rAd$I6RV|a扄"wmmamZ(Os^~3㼩~IKz"fqviU,0kk14#[)4Q ;YML +qy)Fz1hۨ=sgS7n+IS )yX25H IHظׅV\5ICPL7uc;T֗ S[2/tix!&Z 0i!UU <泝a:Dpp"o9Te/'~ʡPrT[/K]SJqBeE{z:1xh'<;0>?% (e[ٝt2%1&%Qo%5mׇx/ 0/);#L ` l=Yf7qI!81d_^A/Pԅ->ApE0mG[+7 O,dd^6wћ@R4yr|5J^n2a%%ǖE= jEhǗQuZc9,I:*JA9)i俴{.]}9ڄ\D޹ NtO|k}E HnjEP7Nz1d_kE"f?ˌ s\&y(5>SoxK,0?^DYQAl1)kӣ9f4}c)8@xQuh5% R!Ojݶ;*;l(N&E,h.Њ%>"ݻE߮9b7#GCs5|n!R@('= jWv^^ 4ɟ$PFbq)3Tj9pܟ- sqd9Zw{b:=9ҸBR-|_2,5A: ?~, 2*;Eg2hʑOIq 'ur6"-q6wFW*_*/p' ~b`dҼf/JBJr v{ e1A=jqB*[p"7t0/=dkʋEM s3짪x sm0$|ʻ]燡bZp]nBɑLZ._V;Q&9xLHꫫ`('R\ci'|Q4鱪ϠpD`\sZGg r~ mr= v2E?F<6NEppE#(DF&ƹ'Qg\iz2ӹ?DtDL0Çk\UgNUн%v++Q a=l؇|jߪd,ꏒ:U[k͹T%+ot&(ۇ51~2Jjf8 b.!!ET"G䡪MZ{ncn~K7DAV@O~d^[a!'CKΆDEs O_ǁT37*a 2٧3Rj 27,QnF6R؇v5߮O6Ocbo/m3,׋/'m..4l7w`A*"EOkOːUO̰2Q/C~A f"ϔ6٬jmrm M+ф!Vv|ɾշ( ƹIh*cxɖaE4Jiֿ R%LRΡV ֗ymltөMLzf@]~z7T6Ք[(DJ2{5ix'惔ʂS.><yr8 pٽ*ÅlkPeq?ֆHtK,/?lf.]]*ooĿ!rr4C_nʠdocԫr۞.S/i CC,[ngb4G4+dWns-Vpnӏb,$!ar07CγjoT=-T$B~-DBuk MΨqD^oKorOkMӽ Ⲑ\Y.crB6 "W='O+>G Ǝ'r*h[;n$~흟O[ƺHƄB5 I*FA?'Ya 3}Yi b@WY!S  & Y$8Q?HE^}"jb]7D֔Zuk8F6[~'_e~c@%phi\2=8J\L Y|8g}^KCWijsUl2^gyoيc?;Na[NkbB-}S6BZ?냅~93E<0z e5 ņ~M|VTn;#N(lRK?P _? endstream endobj 1316 0 obj << /Type /FontDescriptor /FontName /TAZKVB+NimbusMonL-ReguObli /Flags 4 /FontBBox [-61 -237 774 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle -12 /StemV 43 /XHeight 426 /CharSet (/a/b/c/d/e/f/h/hyphen/i/l/m/n/o/p/q/r/s/t/u/underscore/v/y) /FontFile 1315 0 R >> endobj 1317 0 obj << /Length1 1608 /Length2 10535 /Length3 0 /Length 11358 /Filter /FlateDecode >> stream xڭwePۖ6]4MMqw 4kp8̝?ުw~&9Ϫg|ٰe2fV.XjK˘ꗢ5<˱! ?Ϯe}mEڃs2Ho&o? hKT~ ww-=c_po* әT>p nAۧRC$4(c[`MxٜE AN菂B&<8!pPxіOC!s m@mW_"Le^_)> ^Fl-3ngQQ'@ͪ_c0b7{RU, )F0F[Gf~˶?iQl(^=ԂH!!G&9!8@ ku鮴ְz$gxK,z?$aH-8cOWiϨB? 8dgH$\:zH(4;gʶ,J?o$faYKZ;6%O*xmTZx$20#vL#ȭ@f_(3zDᬌFJޛULd{7j,ݼBOlC]keyiqUKpc{Ll[7?,/nz paMݶ 4@)^&5kO&mk1\'6tCN ۤj~ D!, {))^_Rܘ%xӘ;.QL@^\Oi@BXHmL^cnNXu. K%zrK|t*{@t'[LvT(L5e< !̻جӊ!3 >Qo?c5>žBlMxF\ZO~pQz%TPA()y@ʀߎL7+ ;,TVօ-Io'k}jX1''ɀդqȝ1\#%;fFRn^kSh By4K gyO;"}rY+CFfr5>JWU90 5Mt}"/ԭ"0u*Qw"V.rf&%h̹D=f.쉠D!$z*w&_x{Ȳ2gf%8ϝ4X}ݺ FtVY^8f4^ēw0Zҹofz G>-j<22 ja#7p|R* QŶo=6P]s]}҉T lv!gXxA t-d6"NrM?֩HyňjJzUVnofD) Yk}ZDDdX'`;7JMSj2& f$6hH!N_T$ߥU! K}x#iI_;xk#P`ʣ< LVߗK 5u46~eedd*Ww-։\H0U*X8wj K}sDvm1'`|9\HTѫ.[=W^rGLnS;cESh.!CSCޘ`t> .X Z< ZK?3$i%|Oq7ZHrxa3giiT݄x#f,}sX1s: 5Mj'=[S@-d}\F750tۇ?|9c[\;`&zV{:側ۗs uwG H{z2GAT)?BgfVVGQ,6 K\ki)^ \b=jP͵*q1>r@:^bto4JUӔ~8_] 7B,|%SrEV*VMҤUu)\)l>:^t8ŗɣPHak[ _8/AӇx p8#{!![웘$Jd#2Lkm59f4:tRF(gc${EVbGrԈF `_aMh2%p ͜{Tܘx spQsiKh;ȤS>%VDwBaU0hE6pjiYRa4 ))fC)gn+9$fⲏ5y9_)\⻗3!.ՄՎW0Vkr}~LeTNd[sE6ýguCCoMn kerqT_YH~C&*ZYǷ f/ݘ!x˧qGJ$ @LWBkv}P\3К(127?[i? 854<R'~BHրmK-.JRD!3F ҶU}B}pM4xI6 ^K$h̠bh<7$ECxD@'ܫ3쉜|9kG7WenD{C[w]Xe0X9jPD|uS ʯV˫}2C;4.ӂÈj[A [צO>T.4}IX:jj%&4 ԕBdgA>Mڠ% &7?UhNg3%=kjꝑƱ;)$]D9!"D)sxMs< LeBi:aD-/vw<( q`j6w!lYZn۹TrTsc i 7tX <Ώn5׋bl1χPUc 6#$ꄨ92ye=$R>YCt $7Q1>Loě o wFcr_{ᐛWɃ"ʐƀIe3\d/_fgܐSJpx]vL<" 7^^0Y/k){ݬ΂ "߬Edd 6cd`gVtz$n&UpcLjd~U1ULJ/0oprK%,dDCxݹH3؅=^瞦#bB-6%3 v-5?D3J;9r/M*%8Bu%O3rrRmQɇJftX9-.aiم{$Z'ܥ _7~r? A `:N micz߽)BLQJSjQTJ1mLk*qg{udPgV[賅;* | rYbv*^jre#ɡjq'9@l G\QV*˚tc̛aLdxcb=ciѦ\jqm{g }W`D[bavƯH1eE<"jyqЉÍK2E!oΒm;/z ekM$?嫹 #\?G;ɗ5|U-z1mmC[F>2üiOS/ &]Aw6SS|lN_6JoRCFLhd/DsX9"))1$>P:Zx-?#U]CeBp;5~,Qߣ x}F˪⴦YG:}-oÕ(ciWJa]جg8+rxvou80B@pE;IH辀NH_!fҼk`wmD LVE5`=?#Qٰ#腤qKIJ1o}qG um=K?Ii{3spyRgLFtcd bzRIMG_ ߓ#x5xfc~K/qLc/5ثen-IB/d؜Rv{"Ј3z9jwi:'grFXd_mqܮFNs6d}"M%?c/۱#1~>+$~-iJ5먋W\U*BsWm4/Ձ.T#\gQ.x+'P͉6_ނDnlAw^zӮɱ]c[過:xJ0޹}}zC-F2Jso[Q+#W~ECa A:;私!$V n,=&ɡ ﲾ2α/`e_ubo\LL˦0a SxsRE ʲ)Ih-XĘE񢮲xF \1r+ur^8d B]XL꺽.DzGߴI ppwؖ@Yg2WQk\/tN!?JD+ PlNyYޅB(5xȑ,˵D_OrRYdȗ4p^BV;3VY̜aAz]*\t^aoN%AJLj)q i"ìrdA O_xˬoޟcr,jW6&GC%HV/xkRr?oÕRNFї heWYl/mm$< wisؔ{y#QSFn' r#Sȼ'oQ1t\[_x7C-Ca%ep#ݨr J~an7'{؄\sN$ ~N;1IJXWc|&n GR9|hFƑ'S6hmj3'quk1D/ńzSi׋x?&6It>AM3m‚O;-.Hg5n6@/16x}=.2ogǯyК[^촱b '\ o}: '̝E'c[Zp~zsa5sϚK.iMYBYF2 ݎeN=eսi7?xAyO:ޮ2CY1 >W줖6 *T6ʡ,`ÒjEmf] :g' ë$,km[řNca#v/N&z]^ @H_5c#TR&y=6R6N7&mo^5`ڼFt0싋 FOBbQ YX4e4U(VƬ6{=/'  ('Bj7"p<Fh ka_UjwY͈CUXZqvSddD %,ZqWB:7ڻBqZޙ1}6=g Xuxys);fY$b('6%饨yhڪ={L% 7  PʓcD3v~݁vI)8:f\$VRBqJαQ9-'(Tڂ\~*<ȑ؄j&~DALI})ta׍R ׻kp-;ˏ}PeXՅ$"D5 1e${1>&&kݜCZ9S:$Is~?=fKU[ oR~IO*G0H:ޔR L{  O@r#PnK.l9e0Kus8 %jS!lrь\/QW$X1-̾/v  :&}␦wcNHz@VmD{6Cqp YM74VW&-(4lK`KWKġTuSQ(+>mIJ(O/ v0}GkŪvP2fv{l8{q 3 Z ??XuðL(4!إb%֛&ԩ0?6%PƷR,PzëTF'={xZ΄Hgt\]utus#'s[O6p7WX}h ҃5st@à̹J^0;^~'H!AI)H#cugl84""& O eM2 PnC7aAXo2A.>|!Pd8lA䭁&DE}ԑOfdOitwj G8 %9l (ELElŀ9+`r;L5*x HRB' 93ja^L]~D\01E#ԛFW%8&7 D\(3GAIQ̧SyfpҮ;o/V[ ڇY/k77e,%`I )WU^MJ~zFU>fuɩ|h [.?QZS `xl`ZKB#Jnax+"ȊPǒśZ""y[<! w&w@=9Z۰ ,,UU.g-W?óЩ5 Nː9c,Ӣq H 1N֊qqUӾ|/-&$1\[!եYxn3.xۼZ4Unr}CZXgqrQMXϾ|N!S7[d{ա\7J3ʍK?ohdK(hԭeb,z=nn٧(Ug຋/*W), PJz|{ y< 1c0};LgI[XDf}Cåo;[ 4Hv۠9FTeE,yHS7{LG@FB+0lұQCtcc`8e #q!:Y&> endobj 1319 0 obj << /Length1 1166 /Length2 7022 /Length3 0 /Length 7794 /Filter /FlateDecode >> stream xusu\6%%(4 Hw00C ! R-!]ҍt "-y~Zu;u-Z*u-VI+%Hued,.ZPeVM Z`j]!ig+p}m gCC@iW Y vyA gDpU 4A.03"~쿫a`#33 / r@tO 7G (i?bխ-d `uuubgw=al.lP+;SP+i \0L > O0w`՟#Yu`'8HQ ̿1+C r<tIr[@|ak l zazXpK`,A6Ow'd3` B`P ?gw)%+'?K)OyZß;"8O:5ɛ?m0W0`:Oyq4?k!?Ua'=\ʀ?X8Wg_QtPȿeȁ=@V`WVC:KrrӶ AQR Y6-'WZ8[?5y30p]MHU$;(w7#3ԥJd_Lʓs.)>d+Va.T6^P ?I!d틈:1G7I|Qʧi^C Z1߿/o3&?NӵȒԠ_mƶDb[Pɗ^*;IӧsN0 ` ̱JB,+ݩ߯xges ͶOmLBZ~Nםq \4&0B1?21MV루e֙'c'(/rXkoL@":4=1{Ƣ^z{d㮜O߲ ? -SG,tHRDRx6B,[Zׇ5] #7"%"FךE!tV#d+R-/!zVȋ ;WZ+uڅ6pd\zUD" .>HoσHE""ī_=wë6W:*LUVE֥N_mt sdY(d@D#-჈])վD]KM#o$4}~vŋ4OC@0Iڢ{*,-q-Ix &>K gCWq,4w&"W_W=jݽ'iBD"ٲRBTx[`%(_+XmH%-OO/&~2]2Ux8ۡ+!U+v2j*?72[UCT[G L뒼(J)h0=k/ל*:w ZPC.YIȁQ4ky: YdO$Jm'1BDq6{aqIo%Uӽ͵Yc–< #EUq |j*|a21ίQyA>+GjFEu>R귪~8`Mx{4m0͈“Q=-Fl.s~Dn}ǫxԜƤ6y|Xw5Xl&u`5F!P ,+(%9\db BTxLBem"phVHfD _yVEsvq\y΀ĥqx`s}- Fsnze)}<|gI򩠔oTum&OR!ml(ْW!+|3rx>I% ԃ$_Z(Xijn4cU$R9 v$7TgH2]f['FڳpUAc^-҅@Bm ?<=|fQʭ!qu3` (E9~ؘ|͆/Beh#Vtyb'QxN:Fa`Ҧ';s R|)cY#=)#*׶Nw@杸SB3 \վ)LaE~(.5M]N, X_.h3s9"ySV #N zuI+N2+2ޘ=FYl1y$SBtO W=I9pL 31g7Z'P:,uVi\ebɘ߉w9ҥLxCG)ϥT}5OVҔcq8BN{##g}^JNKdW3+l-3Cw"if{VG9S2nF !r,~PE{F1*?P@1s3EFE,@M|Nit 9h$ rڳ'_KG{~ *CҦEE0 ] /Fcf,;^[v AE`@͢\mzqaػ^áYM)3Tn}-j!r,B a>zebflDU#a#*QWvGmDX#.SLqB|oNBS?" =wb@42fi}t<| \tSXᱹۜg{m/=.MS'٩wT<*F2 ^єr4ScWV#ۑ}HUM ⡲gpJ8R-,@~2zZHFAy8 ):?rҔyX wD']]>͡{OoNw@;kUw`X\Z J=vCy] s:Vx~7qc@ԫ<}7߉o w^;F15pmq^FZ s&h!#sll /\MNSlz1Mgu&oDM 0SSDRk/f\>fdVEػrVwna#TdpFbfCp$ 5ߑRF%_z cȊP'vL}')jM+4F[xT]%AMFiH{ٺX:k=KoԟGT[ @ౙ!_  z:;{p 0&L*r3j*l+S8ާ+t~){ǑvX6+}t]dqHg *#@H G^ ƅHhzXЌ*:#I3+ }>! rLREHh>‰w;\c.I_mBlR;7X/z1D ߿Wv}9'웞}O’5cV4(y/59yg$cȋ N^A`>j]з);vlHJ߸R;WX`4򳙏G<~bFQ6V$&BMn{צn*x 08$+מԆgg-chY~ >}3ʶ6+.aakd͟y`JuL=<}( 5A߱ )V8vMYCaRr#6kӠg"'q0є#df8|m=E]8lcbPTt ſ"0J=Kfvp'VJkw%ao3t-t5GŽXq/JUBOmbfMGɺh?GԧjSB菱t7Q]ZίY"JLl;9uDT԰NIO(dBb*Km^6\mپGĐz} a:R8\ ]2-*@x8{Oj=#]λSg@+*uGAxnoG֤ۖojxot4Eq #~T0pU>qب0'6kJtv{; "DfIϓ֬j) endstream endobj 1320 0 obj << /Type /FontDescriptor /FontName /VOGVBH+NimbusSanL-Regu /Flags 4 /FontBBox [-174 -285 1001 953] /Ascent 712 /CapHeight 712 /Descent -213 /ItalicAngle 0 /StemV 85 /XHeight 523 /CharSet (/A/B/C/D/E/G/I/M/N/O/P/R/S/T/U/W/Y/a/b/c/colon/comma/e/eight/f/five/four/hyphen/i/l/m/n/nine/o/one/parenleft/parenright/r/seven/six/slash/t/three/two/u/v/y/zero) /FontFile 1319 0 R >> endobj 1321 0 obj << /Length1 1199 /Length2 3288 /Length3 0 /Length 4042 /Filter /FlateDecode >> stream xmSy99ϑۍqT3As"#[(JvcTK `ZXn99'х@,"L/ D!t43bOG"Ib) "0 S"(@;d"z?gL$/PtvpQRQQeAP(;'dgNl |1>X3 Nƞ F_7n$C8 c[=YNs]iby>CZvo@1( [q|d.!UuJkqQzݷMx6*ti"tENc>D nJݬ[k-Vn3^L)U\P|ݭ<. {ɻ]LQuSp_WwX͈ptʻ&X&UXEI՚+4z }yM$Xf1+3^nkGq8;ťRV!oa`#$8NL1ʔG,Pʹ#hbe]C&WUsגQ&UBUIKzo"6xġTzxp#W`("{QC]P@O?=ɬJOWːhZ0~TuUmM|[oD78y"m6kLCr$)jcW;~+(s,|׃6xJc[d,ӽh"ZlGޢX}k%[?r=J{z‘mpO0xޤKf1ea|–_UW?I0V?Z:-5ݚT&=ث=1Ad֩SoVz{>N6 ^^e.=gu 9L$.8DI|々ϥØbt$eYȕr r&eί#Hl3 w;3Vl2<0ej w[ea ]6%#su̳'L aѯiH33a[>*ţ9(toD*12ȼKWw+Gt?+ɬPhnӜpӒQeLnt1ʧzq.O⣍% *e`gYJ `PpKK \smj i.4r‚ѭm)XZfQfBOW-{]P5~(|: M1e͏&u&9:TL#2I8cٛWh߽UL qjMރiŮ(!s՟w9n뒊cKD-%)kM`0ׅjYLD#G#pelhMՠQr[Ͻs/ۗ<6M_ylyޥ؂tm7ƈxQ,%J+r 61n6gKju[iF/ &Rmf:Qrmkcn8*/yTݜ}&JtW% \08Gcrup>, W|j0챴~N3aSs}aѼe7㢦tR4k s-$TϺ%7 euƥx'VPxzt No%spu8|fs檜;`JhЭk&UЫ5(ih"3777YH) vg& w >ɼZx"~bH4D*A!m֜<eL{ȍ7!Kd`¢ ' :zSݵ)4Iό:)i.׭fz)( O~ۋ>s\y¨CkyzEE1\Ir6R+)mqWRf%𮹸9P[.ۤv|$Wt1Ӧc;֕E^UWUͩ+OM%(X h, _"5W&e\VF,yG9p6!Zk-36ëgZ:ףm)j39ħ?1Ш>k]'5[`'5f?׾i۫)y46$)"EWk~=u UW0R|/7\3 %zO&\ g}8lw<စ˃Ml YBe%tҼȩW޿!F%7B[~^;w ؟ћ}fܣK^;Y|g)hH2[H_hzpS[.͛Lgxbi)7X?LĻ endstream endobj 1322 0 obj << /Type /FontDescriptor /FontName /MBFUFH+NimbusSanL-ReguItal /Flags 4 /FontBBox [-178 -284 1108 953] /Ascent 712 /CapHeight 712 /Descent -213 /ItalicAngle -12 /StemV 88 /XHeight 523 /CharSet (/A/C/D/E/G/I/L/M/N/O/R/S/T/U) /FontFile 1321 0 R >> endobj 1323 0 obj << /Length1 1626 /Length2 9238 /Length3 0 /Length 10069 /Filter /FlateDecode >> stream xڭteT]-Iptl`ٸ[Bpwwww.A?rNwXctVͪ"'VR6%N L< F-G/4@c'V Ā3777<9@ltPhRK`7OG-h :_;'K d **iK+H$@[5@d mslkS#[,aG1h zsv@?p0uz5v6Mn ML hseUӟ܎75lfi6uS_0oZ'c# ' `r6v gGſf@GǷ0ot_u[vvy/ 'G9<3[NS [x?"mk03-7sO Q7f`[kwQ@cG z'Gm%mx;2ƶ;946 OkMhEfI;D& G L dj 07~_ru[35_-331Cf 2C*?QxF q)ue6Njvoy=<9loHW 卝@nݷ?FlglTm&ԦooU݀K`Sޠi)NGt;?Ԩ+w&mp=U3Ԏ4=vb[Sv$ϲI~Rp0 kFyʭCp0in*?A:Q$C1MjE@9:?븄͌#5pDB}NGfI!ά9U޼l7Las|F~mst=dCoDMl*qԃzlݗ:'С[IN&vJ(FpNCz"BY7!~\*v'H`u;SHT AK/- 8cə'ZEX=+V^F/_!RK?g6؎pS|qq8Zi!O)jl딾{Coe o[ 31\/ %҆Fz 7]+ \?`b3Zm;Ffmo!_tc+9%F6Jr/#-i _;JmRkn.WXUq)le^x3AF&5ܚ߻?Nb5e.R$~/HSpK&!xiWN|#nz l-UPa>u{=;8FӇ$K']0B@'̢߅T{!MhNU]K8DS<E=-]eMS,$> 9o{O^tgo"QV4'"檨Ja^XBw_Z?-cc݆oNaHקPO]7ˎҸ>JcdlUCyH,ѓ~z3ӠC+s๿] Yx5$.|YޅNx:2Yk(YIl9q7zӚE4,hMHC)Z=9AC()#@gniF(B‹ ~Galittu|U^l}i AiQ1t^Wm@a^,QNS¢2A Aٔ0UGOA A 7ŰXҭNbyT Z L~C@cKt dחk^YHU'*lA @jo,/@hu#V8cIF= K}c5C$Xك1S ΖW=+z>9iv 7PEdZXw}KrIîMW)ޣD&x`MڒLY/80}]vgҡb cCQzY;{CY9Z{Vs vZBBG_[.|3p׭VPAڸOod KН@iI/dxۙ Vcn}qqT\ٰ×S7q񸻯"RNE6Aww,v|f8r `F>/xhBMO\bkЎFOEۗk|}*V_cam8ݜ;b~Y^t;S~]VҜ[8Oe" B*7"iIS] c}s,b})rJ\" *.j]^[gLߛDq4mq,6L*l \a6}adž/tHklaM)8Do2}yn*^4i ;Y3Z`OI^]ʌUM쭜Ǹ˜͋dvY^SdĐ8gu?&`zf?-]/mPߚ3=E(T}"dkŝ4M'̹YW5:쮨܁= '8>SpUwʹ14u^%UdN&x%_yO{gqT:aT%h*{ )ov $Q; nN:e4D+C>lw}JVvtS}bvuWOJ}+fL#R-j;#D}|5GR|e˟wI!YO(5o<^tVqY&q_w2?j'ٚ{L\S 7 ِRYDѤ|oqoi_nn֑Y,,wOb p O#u[VܦZx!oeG2|ϲ_o >i2L7@ce6,1 xڢZ )*W>Axj96d~v- [VdhvFAE_-`r{H`Z}q%k숩CĥO*]eRof|lȥ`)LA̷2d+۬ 4:jCHo'KC8.cWtb`Cv*@\s׆NY[1 ] b톿u3ٴ6A/s{ Q 53KN"ԭZS|7*cnM&r+*MBD!M;Cg +0MQN[ E:STA y#4;~p(àu\;>wԑ(kE26 .<܃<@ӥUx1JJAc }ϯ&2sz>Bݟ{MPL|=Ţ],Q Ȳ <LQ kq d) .1$ 9.@u|\2fǦDaǍu_-65=mFa n'֐DoȢ)Pz 8'8peB@u]nTg3 &q5_3fnr~lU#."Nr#-R apVV` Qu2#U^5}@ܗ=m1!IHiDVe4R gM;xt\_w%(l t7 ]"6O^`nw߫)a.3>WyҪvCO]W2O޷/>yRƿeB7[ m%& '@b7/p^Zp;HF†cn~St&.*ʂNnX7TEVx$Z2䃦`,=AA nb} _Z\.^I6ZuYϳ6#Q(\ j\l րΗs(k&?cܱ.E΂-nPx1!0^(ɯ$Pb-=886&p0zH ~(Vu\%QԻܜT*cxpzzd{ONztP,mQtr_xStZXE 3Y>} Sj{p=mga"\? Cf0 ]/wúh'}oFҨ"v U+$8͜`PiI\VsK91[CJ/M@uk2!rq.M֗^Fw*;Ew3©HŖYˑLɨ2>n[K&K{G{[79(b@̎}jtX b"݋4_!T#6$h3Hp>-AS954sG V7t74:y\- \&Y5y"c+[Շ}O"3v<^"'ͯɩՓ":m~ F9yfk?_Ɨ^ NFca-:Ǣ7%;>^Ϋ̾jrB 8@cui=Zao,OFɁI{p#]%aGWΉ#P1~,F{3-+Aw-{-ML}n:~H S4Tj߲X;Pv8ygb8h2rR{NXM+ŗ,0-@@zÝ9q.l]^)^<Ž &\%Q`SÜ.qd22`IJT*̾u> U՘dB7E(GNf3[n(i k~q>P2=M5z5dW`82yOe>2wߧ-^m!ޗ[uҚtrѠ;*N 2u9t{J ]>l8Qw,KE|;PwC)|}e~OrǮ;F:it0EQj,mobn{ykU6'2w [iٲX*73j#i)5GNq݁/$݇KotfQv%a#eU^Q.R{il -R!/%!2⇈<{iY*fH{S^@&`TKrG$6LyƒɃ//lZ^e"Կ Diu{,~kHsJ21Iȁ^sLٽrݍ5n@KbNg~G0= : @5Vk'|¯o.&\PGX;Ljdl cmB֡88:7{Ҭ GqS]lJ,PV~Ezޟ~{P<*O$_[p~B}12٩,hr ȇ;o+1:a/K7 Ucr; Ճ!/Hbޚqyϭ\fڡ4-}s3 3)˃S}EQ;hF[2W(o@gHTx.J> ). y1`+܇hܲy*@6YC*`oflΛLX7HeپUxDQksQQ*/Mk=kA٥#r2GtZ˵Acz<|v*m<Ǘl~VBv!{Ve 0`^8M6Ft}o4S~ JSI_1Y!4M7|,~3":RXlm)_yB,՗۹c~Je%:}Oݼx]hp λ")&~aZY.agUOLQJ BdwnejfsV!4>GV$_},`~5\ hGL Kpu4: d9O+6!Gszj~7=k/4$(w5%Ѹ=ٙ64Ҩ 6$Y#чC2 |QL,e~<Q}/G"&R:ETb#F0TWxc ǵ>Ĩr<!bLա6'e&bs~6m9!2rOifIGgbw ¼'_B//VZZӚ)i feGɠki%Y@rA $^%e%iSv`>-2Sns_c""s1RrpZBhu*OQ2HZ&464-f67)`* ﳼȨafˆHwfUV;s&+̖߻U 'gX e;q`o]=8Kht_ {sZۏ+P0hExI_Ɛg ,<4;]-Oygt-Ň#oW2B9θyqT&Kx[wa/r/%;4!d np öD*o΄7I \HCkw_ae^(Q?_ƞg;0=ӱ[%S1nUQfsSYu`h m,pj\VIwKӴf[pk p-=:c;a}k[jXXX|0_#_qXk=] ֲ$5Ψ/x:-\k h_ʁgϑjVܖ>VXRnOH^+jRՇ Gkh?BZI c;GU@suQ8a6i ~]ux?- ufOoN{U [9Z`GJY5M5/ Fpϧb06)G\CM7y&Y%1Sj<^q:Va2B;BՋM8U$Dɡ0df,63ѓw3~Όkh12"Dv(q endstream endobj 1324 0 obj << /Type /FontDescriptor /FontName /FENHUZ+NimbusRomNo9L-Medi /Flags 4 /FontBBox [-168 -341 1000 960] /Ascent 690 /CapHeight 690 /Descent -209 /ItalicAngle 0 /StemV 140 /XHeight 461 /CharSet (/A/G/I/M/N/O/P/R/S/U/a/c/colon/d/e/f/five/i/l/n/one/parenleft/parenright/r/t/two/u/v/x/y/zero) /FontFile 1323 0 R >> endobj 1325 0 obj << /Length1 1642 /Length2 5441 /Length3 0 /Length 6281 /Filter /FlateDecode >> stream xڭtgXk.Ҥ { M:H@H JޥwM7D@PIr|:g\3=3=pE ({: ԇ{z\Q"zP\ F  QHU0zhU@II,rA0@~S#3!!-]>BpG$E\H h 1NP U @Z@~ }S Ecy#@]Ph !RnP86 u ݠhW:H 0( .kFa=\ x8n 6+HU:1N`p, D`X,Ñ@ ;={!>X274OpPG0zx`iܿo>{O4׿kc<(@BG~ϋJex \  0ؔ@ʢ9GG}VD kbw P{x v#|zA*Z_ UGD⎨_f: 1N@?vS$FP$. ĝ ()_LE%l? D`L|ܠL72'"-EDJ6PVV(+};g=0 ZK}=B0~h4V? :PrYZTz$_G6WңVd+]D6ݻjr\a@u?-.#*f[Jm;RZ;C#ے "v)4@-n;qhk yn y=ؽOػ""Gřy>lp"gHcnBg|:* j/3[H}i -5[;uR%= _Uo -7ta\DCK,+0yRu X>_fNMkLAem'>ȭ6~uD%@ii-jFpO&h jX:yΑj| ӖU{s5v1BEVA je`j:,?TlهGԱC9iB`13V^;sߗ3d)]oO:oovϛ8t].>V+\'/TzCV"l-tG]n[$J .QZ3 NMR \5^L7' \LFso&3fr>dx RE XRrRgYC]J?o,B~8?1IjEDiQ !Yĥ+:*RrV1iA5e ?tM'z @hnb H}^.D0ͅj򖏰}4z^`b5_.T'r;osFr6Fg[ގ ~1"0*̣%9gj=Ń$ڈ]C3Aɶ#TbFQ<'nw ]4 0{ҩG1cxP/LWZGHƒaRo5z/nT~5)FayDj@̀c_حc1gX "G}h,*$>EBCa|T@"O ̈́'4kgM6c6B* nWX$r>+:FJ>@mJ^f?$[)()L"w绿r]o\?Ș J~$^T63ڟG\[&H6wrdgO}0_ngYBF5@[9yyڐZ[F{0>Czjc옸Y=w8Ғ\w]78Xs@(PWv渻<3-gcU1W'aHqn:\}[A*xIMtzzypO~. IL)?N#El\U4Ӵ]Fc9δgW] )~=rJ1mRNì/o5hb| ȸQ1!/Vv|Qs-Ü͠55ҭxj/;:&/GZxXu.WKj_3C2J |R<;y85jhN!Z׭o'ࠑq:tB爌൱˗PBU~Wu g2ID_FEsr8Dއ~QwآRR"؟)nfǏR&%hd6|ViOrM]wRNkƺf5d=QRҨSx GYʝ /&-^=ÿ́Cnab4."`8 r0 TXxVN9iXJ>F6PE- Wc|9rÇ.!b4BBLIs؎ޟ^(e>䂭YHOYs^Z*|[Ʋ~1;] ]Xtol4nDSt.MEo[kq`{W-Qs}𽧐Hh;晗2sVrAO:۷1I; Ulo\Hy~@=&Ċ NO $!&[[B zG -O2]ķ?Nhɨ{yJ]6=#MԺH iR<%PoewʝVR1wl$ֳ؏E qtI`S}yKR RY%kCٍ#6AC!Th2g e<?·??;ɑf#Fgd[Z4,n5w\Te ^Tfl.+{;>[ZP~f*ߑѫ$#l[w beAX%_B-m3.ch\ gmň ޏĭCElb(g_>9KRK&S|:7=v9^VɌiΞ>5 گE3ͦ~x`޳+b^{ۥNc p]z \7#6b9cܮhOq[$09qrb՚ T⧠ө6R98aL"A-JS' Ž,rLBib>1?I(cڧ V6֬w `aNKg7|`b#E[~6`~G3?;?,WYsi8Ir5.ΎO>J9+uI('&w/n#>wwLػdFo8侓Z~RO{qÌ2ZX,a4=J[ˆ噼P`4Fgڨ iۿv}Dd"9zIq^rt,{W٪Pk5?r=maM &ZBN+Kl)94́bG\ ^DIYj?uNTIKMsmL xQr`L6.>w!HkmrI_&p5vFD-Փ_$j; 千o9Q;Ir?mq9Vu.(.䗕QyhY<㭈_-0DQ*$" @0SzӦ'xō˿@,AaN 4h|!~򾑝k)@JlPa2'=iѴ =ݶ9טP/0zإm?c/ٴvQLE)8,V $Fmjg9L^2›xvթ=`ڶHݲͬ$RP(=۴a>K_y3խ7&/KyZmbSBg-?cX%< &xnm%cWtZ1|R|{$u`uqYg6I<+gWE:BsesuO.޿)c濮):&][2z%5P4q+g.{',>:u]ϦXz؞ގw4b"G-*{f9j1b :9f"[qݲ4f ]u덷*_L.Qkgy,*bָ'rI3MXGsx=*,l~q=J+z\t~%]INcOyVV9U]j;dp@8O|tQ@t]Xb>4>XK]}kOռ ޖXZ0i銎,}fcoZeoY\HJm(|ysDխ?p6s┪KS[p6nWs~7=?' m3Q ~v%&b!k&R]LnhJaʌsfC NF[iI Pi-&.s6Y4pe<;ulUkӪYZnGbJ~7<۟r %;܎[9 t\Qy{L1d JBRbl)u$D4$| ibP4tyW.;6 hϿۓ endstream endobj 1326 0 obj << /Type /FontDescriptor /FontName /CGPEKI+NimbusRomNo9L-MediItal /Flags 4 /FontBBox [-200 -324 996 964] /Ascent 688 /CapHeight 688 /Descent -209 /ItalicAngle -15 /StemV 120 /XHeight 462 /CharSet (/R/e/n/r/s/t/u) /FontFile 1325 0 R >> endobj 1327 0 obj << /Length1 1630 /Length2 19506 /Length3 0 /Length 20343 /Filter /FlateDecode >> stream xڬSt_&bرmb֎mb۶mۨج8=oM<\s]mrbE@q{;zf&=,2WKN.4r5r4Q  Kwt4pP)kPhz:[(~mlv.!U@`fi((jIK$@; @ kisR6>LL-)͙/wghb atGEp:Z:;X:̝\`igbjOfJ__0E{gg'KߨΖ{&/_Z#K;g X@,e@p9;U'_,]6f ,cmniϬHٙ-7uu_ gf&adjog 02ۻ ?c(BzO>whqWy#ۿd @Ϣ1rZxo\廝_j-t*ZX̌l_r5;S/j+T-,M!*/]ʟQUDL\T`ew\T=?7?0ozf.= 7!n6E1Yn&U?~uo0bv&iO?jW'$k?{ hbobR7:-3mCYjqa@}zw{Ys#i_6}(]2.4dw9O+)뗾Cv:A_?S=9 5at#7_P$>?QOB a'x:=4|Bq:W/giԢ${Yq%"{Ccθb%4z$b';,.8QhRdNUZ{EbcQ':k;9jE"}EJHrx)K;4TR 9CIK=W\L1J>`2y_$FŗF5}!B~} {#U(Eԛr[.Xv3pUu(:w߇o8a(۶D)m}:=bAs'2ОMZW 20~l)Ku#t:Q{Uxٝ©Y}ɼYk6 7AIPHkؑzT GFs&3ZMFovYKA-Xھ0u*( rC7 P,] 97xbcqZTpP4i <7U'l){,F4m_)i房dclh -m`hgu'7`tBE VMdQW/5$h!JB`~uWO 5GX <,1{m X\*!3}/  @Nнk%zvwP$A-ٟ/ŀYIo7mfLf~v#5-Z/S|>stܟmZN\ [Q# lH7ևĨADdL6~I>kj8מ}*EfC-]"`ߙysܷQ6D><Z|=;-MRߺ'`t?+s\++ڟzGߟ(2*́݉HB9 "Dc'%;dӞO|q‘zbAgBmao=P; 13tő*|P"*KExg#P^Ä))e? N!T²àE8@zq&VZ6l݄*T$ܙq9*i[͚e}՞@ nKڃ-uyo%BO&ёm56rm/1WGuW3;w@S'Wàm]7As6^.h76 FTkG&1;ޣ3ޒ&P?%hV45;<5 #oY|&eP-S^h|1k3MV yM)S$B%wxEw@BͰ<^pU'e5 {9SWi880?Id݇B 5Z??J e-PsI(7"S_mlZ~13ED]=o}"W$wtf5ɚy-!d+mPdc`,O.oo-Ky8NG)}? |6z"c$[ 1TWuB?HSC+B/Fk,[Ҹ 4t!ۤioXfiRa2vJ3kAƭ5& !q:POYȲ#!hd3wȝj)ǀx.\mFΜE%*zA΋$`q1=L2׋r&文p.44;9`061aH*ᄏ58N|"@RhRMnqhCGd*ϛ~ߜfEm׿2gy.&%.Ylsaⴭo|R7ei/~$5*UxCD/|T/ѷ؀탇Qi _Ƹ)5)i%ΈQ zOԦ{,2.ePaZFLHT(Jxy]!r]*|)*+7wIlS༕LZBLbGrX}\"]Q@',"pX'}HL. 4'(M'ZeXKdrEbf![x jkJGVNQ I(w6˛gh暧ElxO _(Y|CN)"Ufpt㰉o ; pg|Gs|;Rq]b^*5(pPsa! P|tJk{#(Oe:38]XPD.7/y%wZdx.8.Lq2!a.dRz F_X=GN3[֔p,*"髍-fy<^A|1G榸][ W@28~7+tfmg/(Bs<_Zb\C&w {Zr]{Ij#MK@g3hD<_J%²Y}U';?^VD(?N,Ś*e+pÍ{&YeWMH.r?ꂱa?eI0n IūK.ɧ~7xrl.$߅eAs [=, j g cÑa.!vy0ZI?8BKo^ObpZŲ1hKxue(;9to0!̦@_ܮwQ5ՎZ@(BO5|]=ej8Q}kC3[ͪKxeȡC$ =rg+ڧpb )d0kE@yJOy'ufdFttE^dl6qU˜>(:#tI-_t޽Y+'ZC:2Cc.i-k 4|>h὿~]6Z̘4D(73Rmp8~N|Q,ϸ]+IV(ִz 9$(O z/jX剮>q)P7δd:XK7{9ՕUwZc.Aռ0d?$SZf9 KfmJ{@FOP'J.qܼ)!M4HAD&?MNR@Y\#"c='n#zjʮ)W.*>ò~rv&yffntՠ];ϭ+n\vOzq=kgNm?4#}`Iz~C$;M E;T?zq<"xk'wӔ+4h9I}׌G0Lh`sCi_.nR/iN(h-[.P ecfK7YPT_>߬, `vo[qxhc^OZΰ N6 .)`% F>qB d8i˫?mfםa=(YȜx=6)h^.p '@q@qS@W O 2<` CynE u'Z8͛7dbO*T+:C,}ˍW4<$dP㮾6$]D!RA%  \" &^j탒fͼ6߯L3KurO9HKۣS7%cNK3! G5N?2||-ش#tύ_`U|%5SDY)Ea:El@̶+TfC|Bg}tlq"I~)]V;5Lba.\50iv'Pp,uNL5$+ y'Dt~(BQCz[h C꾯.xB6lR'%irGs250z¡R SH\/ic[Z0c$Gn*#,c ;]9JZ.&,ӮYՍUP[b@QE$:hM Wb¾aQ[t~| '.bđM/5rGH}~@eJsfkn]ڬJfO7?Z+cr o"eα&{0|堽_']?Iz%Xkަ\T9BȂ D3FeDs<::T}TD9>z~7XoFj3THjgFhGgM)r ,W!m#Xnj7x,sü:މqRPlx=ħzMja|L~N Sߦ%=Ys{ЭDZg(8>Z >w?C(-(e~w@QE7F"P[ si}U 3(<]P1?V8Y3uNenƸ>9 [-2qQdxX}aFH'W@q2g764j" toBH﫡7& ʽu hTr]?My2Ţ͡v>jQӡ&-Dh-94$4=;C nj&Ϧ39)?* LmT$l([Gv'KA J (9)L'u힁y| =&15,lxT%}x>UVnORq 7D|'>6.ij3,nQ9ňar`ڞ0b윜Ք6OE8λ~[H;% V*8H:X[is}.W?7Y(ٖhDsu"Z2xNi7m왈:tZg,_" Qa kC# Bi-PИ6?Z"l+Z(AL{ S +a@BA(_7F 3+/@cC2%`hT_D}a% , X%~nPԯ?,WE2V!ܜkPuXfyTamƫbѾOQ%g/[9GȚ K?͟1yG-Ae2WpǖKNUyF*jUO!E|A{_ u%Qa1 'B4/](JLǚIJv7K!+/)6ywA-ٕ$oԜ̈́.'ib6JC7S4_1Z=m"Vh%#%vP@LV 43q~ME0Jk/,TYiÍC=ZVg{Sd̷ʣVO J)qsr'\TtE԰O&:TG: t/Q jK< cl4C[9@hJ% T:m("Ekg8 )kTV TW f[ظ3ʔka,,Q%S3yLGE(Ⴇbo-C͢4@ŧj6O~" 5P}6|V9MmMVfBO~7ژwӂG ba]z,Ļv$o=/^'1\^ڊz%($ *3HՉ X|KZ 1+ W0sLw%+%e*ND#Or}ef'6 Oh:ڥ9F"^OEFs˚Bd4Vadj̢Uy1:XI7cqNK`OCĔGl4\kY.d#- >֧pGilĉӒ<u+(LFpb/50'"g(]]#]ɠBv5da8)c_<tTpH8S*~ԐА l/D0E_p}F@2<̮=0 ^yI%o#ۓ]smjh"XnS#mfHq([T6諍Yh9!cg4X哟4l [OlwnlɾX:-Hpq}jN?n+M*D$ظys0`:'tiR/ vxz`{yHՅe9 R0$\Ssf<&ث.!y#Mxr#TH4$Y8`_i UykJm<;N']ɤ(% $^,Wk +K?xZ}z-o9"_Ҷ8vݓ"-b˸V ~؍ΒmEK9ވȗf=B؀awINC oBs1E *p'c#0A;޽L;(fS>@90[:5 돖0/RفC=Շ{erM OB\od4rQVNRP-36y+x~ Wd1|^ߣpβ:>먛e ΥFm|a`Sׄr?7hkI| SƔ;R^ ;ӄNS,NW&AתPXuP1횣R3_Af )n\ܳ(Wh35Ҳ+f's ''8>n|~ -0n1yۊݴdF=j !{Qڴ!EL,fANɝ#TvFF)#Q ^H>}!zQ5DZdʃS06Ol2\ImN8{[_ęygqMs<aMO?džq}#~B 2D ]y1 L̰_9o B/t@q;mA覔P&zBJp i`eٌ<5?>o~@h[\EݛC1J.g^Ųˏ\`L њIak7[rh!Izŵ9-bO)/['^s!`.2t DWEYw{.Ua,'bMq^-8aL>Ô(wG,!.PpE|CeeS;( ̣kg Ɋ?O0'!Jw&ӕ @a1;Up _¾OBu_Dtˈ@0d};E,(J '!'L5Sc-H6-dO`JU${$@J%&l_ v PV2?_8~NT %^RLNCz;LJДJtR e, x&_I@3tҾhZtvq٦xu`M O`Xc5/ i˽ \f_=.zTyQ$_ye/T_pp֭hO\@zsLG.cO@>w9xYQbDJG?n.ާ #ZYBl #zw57ZY$A,u0VU=R#e"Rơ:^)|FT"<%<H'z #], ~6l~_luMRsmVj 5W _oh!zuyDIS6hgls/:>:+cZL$ѕ.dymC3}+tAxՍK 2WP 5!VvZY숑55iQ{֏]LTLJG`ɴ/ B%35 rinhWR;jfqSrOdBL,U*'D1 XDcxfFnGj}8zEXjlC7 E:tQף=HD}9g*iln5|g&dſ!+%_xTRkH0;y oqϫMO=1ݥ'v~n-(IC%uʫ-)#k[sUkv5?ZxtZ^s֠H8#2%.qZt%>Q6Nǁk i:N\ſG)@7 ?T Qm]ٕd?-d[C=4E<ѯ^aگB6Xdsb(IjF)+8 w#1:b{íF)а':~$^;Gޓ2^?yƔ(f^kž"`׎[FZH?@OL&PA@`e7+ZY{$$Hhh(9"is9ve1Mx!q H+*P# raBx>BjzS~h/yzp,;\ow]CUH'5n3gRS &Y:7]<d8 %4{˘9Ws7ܶ)UE{"OPLK6QNi<3%p"Gg?7bX!BsL$n¯;i6 lEPƝ 䏪ԩ RP*kTZl,JmYcb+-]I Pޜ?!ǟallL7Z©7LW3DFaaͅEI *Cy4d;Gyjj2&X>PPgovwpG^圱Z1 Eu}V#e(?=#D y&Ej]>=<*/A*1>yջZ_qn@v&_ 2Xw%v&;^e]?.e? M]@%s?0`+I {#@x:H}%w+6bUUSw: kVr>C F+><OC8ͅTjw!`Ap5D`|)GMk" H[=>vH4;v4#qc*MP;ZCoW[M?RzbtO2grY+)%)χ'ˌ3'd -gZwomqt;w_'P?{ix6H!O<|WNݲnvPh<JsCCkr*DQ ީT'0 ?{Y,DIB︴ɇ҉swv:v3oh: aygfEN"齳tJS,AV7חU2aai\iSLJWNt#->#{u;(oƸdK"Sj5놉YVxM,!3H*Ͽ"PD o]\|h߁'bUĕ;vC b1,Jӈe$ZAY'ިK`CH&XX!.mSށS?`o0|Έ ~ڿ Թ?94D3 ~(鯟&(-/3U/\i7PG?ouZˆvQ|ϢũpΧobkaZMȴPX] HhO*kɖe,S\-Ƙ~Yn>`.a^Lc;pؔ1=:uOuHܡ@bcBO6E5#:lFŝ1=p)w}vDqe=i !R=B9ȁ[n)0T[:^[<ؘ<^Zu3 lCr ,!R\H7mFi+G7Gb7kƭ!Jz6Ӻ?5q+βm䋎ΝLN@>d2ߧs ˯dy<+2m#TG#ULڤم_^H/j- B+-5>^kǹ"6\"%.ocoͪȦ\cHUEUH.'N GB?tz.sـQ\y֋j3cWbE)q=e[7˞a(v|QWG *0*dV.X*`H +o~F!7DgH\W,2k8ϟxd\]<qy\J{F 2+䓐xCIχszU$kDJHyj]w5`U̻=^}'cV2Y ={se)oEy0>_wcX 4jnsǮȕQ< [=]WoWۼ[xDdyea\g&f\[`d"Ho DFsĖDE`lPP $8cDaEd đ߸;:;nxVbU7vd\a`( ?D"yՉ:3Bj`x@8Vh:ta}Q};?и6 `cXu@SKmdE1WȞڟ,hJuP[6 hZ7<.\A.)D阄z텽}%~&俱i{fsw(ʓԖ5sOD5ǂYT+탖 SoL{]z3ϳDpܯe~kQȩ=Dj0jşf40ЀX-#Qvӓ\-`['24A"aPy YD76?kZ )QOF*Th*n1̃'] Z>Coɚ"+N+Fc]6 ,E?OߒMSbˡm 5a Zm2Jv=A.EE:~Yav7:4  jYv7Dm'JY;՟]X~ I9.iOodŧ#aNUYe'-8ފ{%No;ue |;ԥyPpJ(2c^9Uv3uo}Vqaba'aD@QvW0pIBdt+}b)'\KŲF\<6Ceل n +'!X4zBz5TKPI扌ݓCN!E%3qjy-:9"| H[Bdch 3N([ |ƒh^{Ori.R8(^TH(T7mSD[^} : =}Yt^e:CܷI0t4aoWmê>K;9A+x)G]N.Y榑\ee 8Ҿ6L58{/ =1<ԑp&A'[9̱ -x <ɡZSD̚gCiHP:t^P(3nS6>R6̐2DGͨ.}AmQwx 0oXݠsY?Cm#Grj> x^N9ך*O,LtHƔĄjh/ *{odVe5X:|!qeNŌ;/AK~3~SHZsMC6Rָt"EyqFZ8"1@A3wkqf=5 0)w{pNo$ͮT/xVWa84-Fڸ&UK{K(هuSD0IT^> :Y,)j:`0ʝxcY>w>IȳY'\Fc8ea撎p ^xZիLCr[MMjB=VM\xu+ŧ_ (%G8!97o7-:2k ,⬅<~WVv6{F~aN>_[YI&[Ipe{N$*\I6 k%[Rzp iG+v%6h 37eX@٢7 sbR/u?ݩp .";juxWt?h7n=Aox{ivd^#i'Ob_ Ibt`S!}i-~+mi?%Nwƈ3'P>krbipaQ|N!aqk=SR8{B5j+c;{X~8fNgyd?]K6dVQm3BD5Lrc(hU qɄivҌX= xFl5H*n\Z^XJ!)иo7hhRx sR[P_Q呩IJ)Gвк5xK< څ(pds֪ zUς*fG5PqkqXVtP!d |b Gp ;y&i iS7a~u0 T JN,_%CB!Ϣ o񻀉k#iy~*\]1f=ѹ9>8!R]P-oܢxЃi " 篭>ٝ2v^MtK0F1uTOwEg`f0O7-}moPQm>*OD?n{7ֳ",fy!M*sW:0vܢZjLÏ2Q XM C045AJ3<'{tWh0Ґ/`LIf*#`>?@)lA"fXm8R:`CHq4-^ԧw.Ф҆Zm31u.o"r^Jb_HoyȀr@\02CĖSg > p7#x96;o۹_`dyTQ: &_k+ssс4plU,r\La7*p bm3m .|*Wc{j7P}Hzi>h'an£f/A/y!ƞ>yG^TI R86i+nlg-9{:3\)U,FH%$#Re"L~_538eĚ[1h?kK!]nR8ɟo;y4caޏQu Kgng+qdIC|Cu^"֨g>L,>GIvT.qK#D85_@ūrq{{ ;gE^. )7h4)M,ku8wQ>= C&w02x{ C\v!ҜѤ?~i]U-oU|W4`}o%-:񝵝e57;t,"X凳> ؇/"Hݝ~> (7ϸy[d<Dž9@@:XMjpA'㑨2ˉL /8kˉ_&T90H_ j.S othNa!L,ϴXQ& ̕™P0%|!Q68p>HbkE.2jx.M(v_Mjg:vKd+MCI4/p$$Or/V7vu$ak3^J'}z5UJh~pHY19IHuUAd:ӯ9R:8͡ I%*[xz" endstream endobj 1328 0 obj << /Type /FontDescriptor /FontName /TCEFDE+NimbusRomNo9L-Regu /Flags 4 /FontBBox [-168 -281 1000 924] /Ascent 678 /CapHeight 651 /Descent -216 /ItalicAngle 0 /StemV 85 /XHeight 450 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/ampersand/asterisk/b/backslash/braceleft/braceright/c/colon/comma/d/e/eight/emdash/equal/exclam/f/fi/five/fl/four/g/grave/greater/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/percent/period/q/quotedbl/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 1327 0 R >> endobj 1295 0 obj << /Type /Encoding /Differences [2/fi/fl 30/grave 33/exclam/quotedbl/numbersign 37/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z 92/backslash 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft 125/braceright/asciitilde 151/emdash] >> endobj 484 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LSUPIB+CMMI10 /FontDescriptor 1308 0 R /FirstChar 45 /LastChar 45 /Widths 1297 0 R >> endobj 483 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FRBTTO+CMSY10 /FontDescriptor 1310 0 R /FirstChar 32 /LastChar 32 /Widths 1298 0 R >> endobj 351 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TRRNEC+NimbusMonL-BoldObli /FontDescriptor 1312 0 R /FirstChar 49 /LastChar 122 /Widths 1300 0 R /Encoding 1295 0 R >> endobj 66 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RTTQOY+NimbusMonL-Regu /FontDescriptor 1314 0 R /FirstChar 34 /LastChar 126 /Widths 1301 0 R /Encoding 1295 0 R >> endobj 659 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TAZKVB+NimbusMonL-ReguObli /FontDescriptor 1316 0 R /FirstChar 45 /LastChar 121 /Widths 1296 0 R /Encoding 1295 0 R >> endobj 38 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LASKNL+NimbusSanL-Bold /FontDescriptor 1318 0 R /FirstChar 40 /LastChar 122 /Widths 1304 0 R /Encoding 1295 0 R >> endobj 35 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VOGVBH+NimbusSanL-Regu /FontDescriptor 1320 0 R /FirstChar 40 /LastChar 121 /Widths 1305 0 R /Encoding 1295 0 R >> endobj 44 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MBFUFH+NimbusSanL-ReguItal /FontDescriptor 1322 0 R /FirstChar 65 /LastChar 85 /Widths 1303 0 R /Encoding 1295 0 R >> endobj 57 0 obj << /Type /Font /Subtype /Type1 /BaseFont /FENHUZ+NimbusRomNo9L-Medi /FontDescriptor 1324 0 R /FirstChar 40 /LastChar 121 /Widths 1302 0 R /Encoding 1295 0 R >> endobj 475 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CGPEKI+NimbusRomNo9L-MediItal /FontDescriptor 1326 0 R /FirstChar 82 /LastChar 117 /Widths 1299 0 R /Encoding 1295 0 R >> endobj 34 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TCEFDE+NimbusRomNo9L-Regu /FontDescriptor 1328 0 R /FirstChar 2 /LastChar 151 /Widths 1306 0 R /Encoding 1295 0 R >> endobj 39 0 obj << /Type /Pages /Count 6 /Parent 1329 0 R /Kids [30 0 R 41 0 R 53 0 R 60 0 R 74 0 R 92 0 R] >> endobj 99 0 obj << /Type /Pages /Count 6 /Parent 1329 0 R /Kids [96 0 R 101 0 R 105 0 R 109 0 R 113 0 R 144 0 R] >> endobj 217 0 obj << /Type /Pages /Count 6 /Parent 1329 0 R /Kids [181 0 R 219 0 R 256 0 R 293 0 R 330 0 R 362 0 R] >> endobj 435 0 obj << /Type /Pages /Count 6 /Parent 1329 0 R /Kids [399 0 R 439 0 R 472 0 R 492 0 R 505 0 R 511 0 R] >> endobj 533 0 obj << /Type /Pages /Count 6 /Parent 1329 0 R /Kids [518 0 R 540 0 R 547 0 R 559 0 R 581 0 R 596 0 R] >> endobj 628 0 obj << /Type /Pages /Count 6 /Parent 1329 0 R /Kids [617 0 R 634 0 R 650 0 R 671 0 R 689 0 R 719 0 R] >> endobj 748 0 obj << /Type /Pages /Count 6 /Parent 1330 0 R /Kids [724 0 R 757 0 R 763 0 R 779 0 R 798 0 R 821 0 R] >> endobj 863 0 obj << /Type /Pages /Count 6 /Parent 1330 0 R /Kids [841 0 R 865 0 R 889 0 R 916 0 R 939 0 R 955 0 R] >> endobj 1006 0 obj << /Type /Pages /Count 6 /Parent 1330 0 R /Kids [985 0 R 1008 0 R 1045 0 R 1074 0 R 1182 0 R 1292 0 R] >> endobj 1329 0 obj << /Type /Pages /Count 36 /Parent 1331 0 R /Kids [39 0 R 99 0 R 217 0 R 435 0 R 533 0 R 628 0 R] >> endobj 1330 0 obj << /Type /Pages /Count 18 /Parent 1331 0 R /Kids [748 0 R 863 0 R 1006 0 R] >> endobj 1331 0 obj << /Type /Pages /Count 54 /Kids [1329 0 R 1330 0 R] >> endobj 1332 0 obj << /Type /Outlines /First 3 0 R /Last 27 0 R /Count 2 >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 1332 0 R /Prev 3 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 3 0 R /Prev 19 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 3 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 3 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 3 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 1332 0 R /Next 27 0 R /First 7 0 R /Last 23 0 R /Count -5 >> endobj 1333 0 obj << /Names [(Doc-Start) 36 0 R (GSS-C-ACCEPT:CAPS) 174 0 R (GSS-C-AF-APPLETALK:CAPS) 240 0 R (GSS-C-AF-BSC:CAPS) 243 0 R (GSS-C-AF-CCITT:CAPS) 222 0 R (GSS-C-AF-CHAOS:CAPS) 202 0 R] /Limits [(Doc-Start) (GSS-C-AF-CHAOS:CAPS)] >> endobj 1334 0 obj << /Names [(GSS-C-AF-DATAKIT:CAPS) 214 0 R (GSS-C-AF-DECnet) 228 0 R (GSS-C-AF-DLI:CAPS) 231 0 R (GSS-C-AF-DSS:CAPS) 246 0 R (GSS-C-AF-ECMA:CAPS) 211 0 R (GSS-C-AF-HYLINK:CAPS) 237 0 R] /Limits [(GSS-C-AF-DATAKIT:CAPS) (GSS-C-AF-HYLINK:CAPS)] >> endobj 1335 0 obj << /Names [(GSS-C-AF-IMPLINK:CAPS) 196 0 R (GSS-C-AF-INET:CAPS) 193 0 R (GSS-C-AF-LAT:CAPS) 234 0 R (GSS-C-AF-LOCAL:CAPS) 190 0 R (GSS-C-AF-NBS:CAPS) 208 0 R (GSS-C-AF-NS:CAPS) 205 0 R] /Limits [(GSS-C-AF-IMPLINK:CAPS) (GSS-C-AF-NS:CAPS)] >> endobj 1336 0 obj << /Names [(GSS-C-AF-NULLADDR:CAPS) 259 0 R (GSS-C-AF-OSI:CAPS) 249 0 R (GSS-C-AF-PUP:CAPS) 199 0 R (GSS-C-AF-SNA:CAPS) 225 0 R (GSS-C-AF-UNSPEC:CAPS) 187 0 R (GSS-C-AF-X25:CAPS) 252 0 R] /Limits [(GSS-C-AF-NULLADDR:CAPS) (GSS-C-AF-X25:CAPS)] >> endobj 1337 0 obj << /Names [(GSS-C-ANON-FLAG:CAPS) 159 0 R (GSS-C-BOTH:CAPS) 168 0 R (GSS-C-CALLING-ERROR-MASK:CAPS) 339 0 R (GSS-C-CALLING-ERROR-OFFSET:CAPS) 326 0 R (GSS-C-CONF-FLAG:CAPS) 153 0 R (GSS-C-DELEG-FLAG:CAPS) 137 0 R] /Limits [(GSS-C-ANON-FLAG:CAPS) (GSS-C-DELEG-FLAG:CAPS)] >> endobj 1338 0 obj << /Names [(GSS-C-EMPTY-BUFFER:CAPS) 283 0 R (GSS-C-GSS-CODE:CAPS) 177 0 R (GSS-C-INDEFINITE:CAPS) 299 0 R (GSS-C-INITIATE:CAPS) 171 0 R (GSS-C-INTEG-FLAG:CAPS) 156 0 R (GSS-C-MECH-CODE:CAPS) 184 0 R] /Limits [(GSS-C-EMPTY-BUFFER:CAPS) (GSS-C-MECH-CODE:CAPS)] >> endobj 1339 0 obj << /Names [(GSS-C-MUTUAL-FLAG:CAPS) 140 0 R (GSS-C-NO-BUFFER:CAPS) 265 0 R (GSS-C-NO-CHANNEL-BINDINGS:CAPS) 280 0 R (GSS-C-NO-CONTEXT:CAPS) 274 0 R (GSS-C-NO-CREDENTIAL:CAPS) 277 0 R (GSS-C-NO-NAME:CAPS) 262 0 R] /Limits [(GSS-C-MUTUAL-FLAG:CAPS) (GSS-C-NO-NAME:CAPS)] >> endobj 1340 0 obj << /Names [(GSS-C-NO-OID-SET:CAPS) 271 0 R (GSS-C-NO-OID:CAPS) 268 0 R (GSS-C-NT-ANONYMOUS-static) 977 0 R (GSS-C-NT-ANONYMOUS:CAPS) 317 0 R (GSS-C-NT-EXPORT-NAME-static) 980 0 R (GSS-C-NT-EXPORT-NAME:CAPS) 320 0 R] /Limits [(GSS-C-NO-OID-SET:CAPS) (GSS-C-NT-EXPORT-NAME:CAPS)] >> endobj 1341 0 obj << /Names [(GSS-C-NT-HOSTBASED-SERVICE-X-static) 971 0 R (GSS-C-NT-HOSTBASED-SERVICE-X:CAPS) 311 0 R (GSS-C-NT-HOSTBASED-SERVICE-static) 974 0 R (GSS-C-NT-HOSTBASED-SERVICE:CAPS) 314 0 R (GSS-C-NT-MACHINE-UID-NAME-static) 965 0 R (GSS-C-NT-MACHINE-UID-NAME:CAPS) 305 0 R] /Limits [(GSS-C-NT-HOSTBASED-SERVICE-X-static) (GSS-C-NT-MACHINE-UID-NAME:CAPS)] >> endobj 1342 0 obj << /Names [(GSS-C-NT-STRING-UID-NAME-static) 968 0 R (GSS-C-NT-STRING-UID-NAME:CAPS) 308 0 R (GSS-C-NT-USER-NAME-static) 962 0 R (GSS-C-NT-USER-NAME:CAPS) 302 0 R (GSS-C-NULL-OID-SET:CAPS) 289 0 R (GSS-C-NULL-OID:CAPS) 286 0 R] /Limits [(GSS-C-NT-STRING-UID-NAME-static) (GSS-C-NULL-OID:CAPS)] >> endobj 1343 0 obj << /Names [(GSS-C-PROT-READY-FLAG:CAPS) 162 0 R (GSS-C-QOP-DEFAULT:CAPS) 296 0 R (GSS-C-REPLAY-FLAG:CAPS) 147 0 R (GSS-C-ROUTINE-ERROR-MASK:CAPS) 342 0 R (GSS-C-ROUTINE-ERROR-OFFSET:CAPS) 333 0 R (GSS-C-SEQUENCE-FLAG:CAPS) 150 0 R] /Limits [(GSS-C-PROT-READY-FLAG:CAPS) (GSS-C-SEQUENCE-FLAG:CAPS)] >> endobj 1344 0 obj << /Names [(GSS-C-SUPPLEMENTARY-MASK:CAPS) 345 0 R (GSS-C-SUPPLEMENTARY-OFFSET:CAPS) 336 0 R (GSS-C-TRANS-FLAG:CAPS) 165 0 R (GSS-CALLING-ERROR:CAPS) 348 0 R (GSS-ERROR:CAPS) 358 0 R (GSS-KRB5-NT-HOSTBASED-SERVICE-NAME-static) 1083 0 R] /Limits [(GSS-C-SUPPLEMENTARY-MASK:CAPS) (GSS-KRB5-NT-HOSTBASED-SERVICE-NAME-static)] >> endobj 1345 0 obj << /Names [(GSS-KRB5-NT-HOSTBASED-SERVICE-NAME:CAPS) 1054 0 R (GSS-KRB5-NT-MACHINE-UID-NAME-static) 1089 0 R (GSS-KRB5-NT-MACHINE-UID-NAME:CAPS) 1060 0 R (GSS-KRB5-NT-PRINCIPAL-NAME-static) 1086 0 R (GSS-KRB5-NT-PRINCIPAL-NAME:CAPS) 1057 0 R (GSS-KRB5-NT-STRING-UID-NAME-static) 1092 0 R] /Limits [(GSS-KRB5-NT-HOSTBASED-SERVICE-NAME:CAPS) (GSS-KRB5-NT-STRING-UID-NAME-static)] >> endobj 1346 0 obj << /Names [(GSS-KRB5-NT-STRING-UID-NAME:CAPS) 1063 0 R (GSS-KRB5-NT-USER-NAME-static) 1080 0 R (GSS-KRB5-NT-USER-NAME:CAPS) 1051 0 R (GSS-KRB5-S-G-BAD-MSG-CTX:CAPS) 1011 0 R (GSS-KRB5-S-G-BAD-SERVICE-NAME:CAPS) 991 0 R (GSS-KRB5-S-G-BAD-STRING-UID:CAPS) 994 0 R] /Limits [(GSS-KRB5-NT-STRING-UID-NAME:CAPS) (GSS-KRB5-S-G-BAD-STRING-UID:CAPS)] >> endobj 1347 0 obj << /Names [(GSS-KRB5-S-G-BAD-USAGE:CAPS) 1017 0 R (GSS-KRB5-S-G-BUFFER-ALLOC:CAPS) 1003 0 R (GSS-KRB5-S-G-NOUSER:CAPS) 997 0 R (GSS-KRB5-S-G-UNKNOWN-QOP:CAPS) 1020 0 R (GSS-KRB5-S-G-VALIDATE-FAILED:CAPS) 1000 0 R (GSS-KRB5-S-G-WRONG-SIZE:CAPS) 1014 0 R] /Limits [(GSS-KRB5-S-G-BAD-USAGE:CAPS) (GSS-KRB5-S-G-WRONG-SIZE:CAPS)] >> endobj 1348 0 obj << /Names [(GSS-KRB5-S-KG-BAD-LENGTH:CAPS) 1041 0 R (GSS-KRB5-S-KG-BAD-SIGN-TYPE:CAPS) 1038 0 R (GSS-KRB5-S-KG-CCACHE-NOMATCH:CAPS) 1023 0 R (GSS-KRB5-S-KG-CONTEXT-ESTABLISHED:CAPS) 1035 0 R (GSS-KRB5-S-KG-CTX-INCOMPLETE:CAPS) 1048 0 R (GSS-KRB5-S-KG-KEYTAB-NOMATCH:CAPS) 1026 0 R] /Limits [(GSS-KRB5-S-KG-BAD-LENGTH:CAPS) (GSS-KRB5-S-KG-KEYTAB-NOMATCH:CAPS)] >> endobj 1349 0 obj << /Names [(GSS-KRB5-S-KG-NO-SUBKEY:CAPS) 1032 0 R (GSS-KRB5-S-KG-TGT-MISSING:CAPS) 1029 0 R (GSS-KRB5-static) 1077 0 R (GSS-KRB5:CAPS) 1070 0 R (GSS-ROUTINE-ERROR:CAPS) 352 0 R (GSS-S-BAD-BINDINGS:CAPS) 383 0 R] /Limits [(GSS-KRB5-S-KG-NO-SUBKEY:CAPS) (GSS-S-BAD-BINDINGS:CAPS)] >> endobj 1350 0 obj << /Names [(GSS-S-BAD-MECH:CAPS) 374 0 R (GSS-S-BAD-MIC:CAPS) 392 0 R (GSS-S-BAD-NAME:CAPS) 377 0 R (GSS-S-BAD-NAMETYPE:CAPS) 380 0 R (GSS-S-BAD-QOP:CAPS) 420 0 R (GSS-S-BAD-SIG:CAPS) 389 0 R] /Limits [(GSS-S-BAD-MECH:CAPS) (GSS-S-BAD-SIG:CAPS)] >> endobj 1351 0 obj << /Names [(GSS-S-BAD-STATUS:CAPS) 386 0 R (GSS-S-CALL-BAD-STRUCTURE:CAPS) 371 0 R (GSS-S-CALL-INACCESSIBLE-READ:CAPS) 365 0 R (GSS-S-CALL-INACCESSIBLE-WRITE:CAPS) 368 0 R (GSS-S-COMPLETE:CAPS) 323 0 R (GSS-S-CONTEXT-EXPIRED:CAPS) 414 0 R] /Limits [(GSS-S-BAD-STATUS:CAPS) (GSS-S-CONTEXT-EXPIRED:CAPS)] >> endobj 1352 0 obj << /Names [(GSS-S-CONTINUE-NEEDED:CAPS) 442 0 R (GSS-S-CREDENTIALS-EXPIRED:CAPS) 411 0 R (GSS-S-DEFECTIVE-CREDENTIAL:CAPS) 408 0 R (GSS-S-DEFECTIVE-TOKEN:CAPS) 405 0 R (GSS-S-DUPLICATE-ELEMENT:CAPS) 429 0 R (GSS-S-DUPLICATE-TOKEN:CAPS) 445 0 R] /Limits [(GSS-S-CONTINUE-NEEDED:CAPS) (GSS-S-DUPLICATE-TOKEN:CAPS)] >> endobj 1353 0 obj << /Names [(GSS-S-FAILURE:CAPS) 417 0 R (GSS-S-GAP-TOKEN:CAPS) 454 0 R (GSS-S-NAME-NOT-MN:CAPS) 432 0 R (GSS-S-NO-CONTEXT:CAPS) 402 0 R (GSS-S-NO-CRED:CAPS) 395 0 R (GSS-S-OLD-TOKEN:CAPS) 448 0 R] /Limits [(GSS-S-FAILURE:CAPS) (GSS-S-OLD-TOKEN:CAPS)] >> endobj 1354 0 obj << /Names [(GSS-S-UNAUTHORIZED:CAPS) 423 0 R (GSS-S-UNAVAILABLE:CAPS) 426 0 R (GSS-S-UNSEQ-TOKEN:CAPS) 451 0 R (GSS-SUPPLEMENTARY-INFO:CAPS) 355 0 R (GSS-VERSION-MAJOR:CAPS) 77 0 R (GSS-VERSION-MINOR:CAPS) 80 0 R] /Limits [(GSS-S-UNAUTHORIZED:CAPS) (GSS-VERSION-MINOR:CAPS)] >> endobj 1355 0 obj << /Names [(GSS-VERSION-NUMBER:CAPS) 86 0 R (GSS-VERSION-PATCH:CAPS) 83 0 R (GSS-VERSION:CAPS) 69 0 R (OM-uint32) 128 0 R (chapter*.1) 56 0 R (chapter.1) 2 0 R] /Limits [(GSS-VERSION-NUMBER:CAPS) (chapter.1)] >> endobj 1356 0 obj << /Names [(chapter.2) 26 0 R (gss-accept-sec-context) 468 0 R (gss-acquire-cred) 457 0 R (gss-add-cred) 735 0 R (gss-add-oid-set-member) 805 0 R (gss-api) 89 0 R] /Limits [(chapter.2) (gss-api)] >> endobj 1357 0 obj << /Names [(gss-api.description) 116 0 R (gss-api.details) 117 0 R (gss-api.synopsis) 90 0 R (gss-canonicalize-name) 685 0 R (gss-check-version) 72 0 R (gss-compare-name) 641 0 R] /Limits [(gss-api.description) (gss-compare-name)] >> endobj 1358 0 obj << /Names [(gss-const-OID) 922 0 R (gss-const-OID-set) 925 0 R (gss-const-buffer-t) 904 0 R (gss-const-cred-id-t) 910 0 R (gss-const-ctx-id-t) 907 0 R (gss-const-name-t) 919 0 R] /Limits [(gss-const-OID) (gss-const-name-t)] >> endobj 1359 0 obj << /Names [(gss-context-time) 566 0 R (gss-create-empty-oid-set) 801 0 R (gss-cred-id-t) 121 0 R (gss-cred-usage-t) 134 0 R (gss-ctx-id-t) 118 0 R (gss-decapsulate-token) 942 0 R] /Limits [(gss-context-time) (gss-decapsulate-token)] >> endobj 1360 0 obj << /Names [(gss-delete-sec-context) 514 0 R (gss-display-name) 653 0 R (gss-display-status) 620 0 R (gss-duplicate-name) 844 0 R (gss-encapsulate-token) 932 0 R (gss-export-name) 674 0 R] /Limits [(gss-delete-sec-context) (gss-export-name)] >> endobj 1361 0 obj << /Names [(gss-export-sec-context) 508 0 R (gss-ext) 947 0 R (gss-ext.description) 949 0 R (gss-ext.details) 950 0 R (gss-ext.synopsis) 948 0 R (gss-get-mic) 571 0 R] /Limits [(gss-export-sec-context) (gss-get-mic)] >> endobj 1362 0 obj << /Names [(gss-gss) 64 0 R (gss-gss.description) 67 0 R (gss-gss.details) 68 0 R (gss-gss.synopsis) 65 0 R (gss-import-name) 660 0 R (gss-import-sec-context) 786 0 R] /Limits [(gss-gss) (gss-import-sec-context)] >> endobj 1363 0 obj << /Names [(gss-indicate-mechs) 637 0 R (gss-init-sec-context) 467 0 R (gss-inquire-context) 703 0 R (gss-inquire-cred) 695 0 R (gss-inquire-cred-by-mech) 766 0 R (gss-inquire-mech-for-saslname) 899 0 R] /Limits [(gss-indicate-mechs) (gss-inquire-mech-for-saslname)] >> endobj 1364 0 obj << /Names [(gss-inquire-mechs-for-name) 829 0 R (gss-inquire-names-for-mech) 824 0 R (gss-inquire-saslname-for-mech) 892 0 R (gss-krb5) 983 0 R (gss-krb5-ext) 1066 0 R (gss-krb5-ext.description) 1068 0 R] /Limits [(gss-inquire-mechs-for-name) (gss-krb5-ext.description)] >> endobj 1365 0 obj << /Names [(gss-krb5-ext.details) 1069 0 R (gss-krb5-ext.synopsis) 1067 0 R (gss-krb5.description) 989 0 R (gss-krb5.details) 990 0 R (gss-krb5.synopsis) 988 0 R (gss-name-t) 124 0 R] /Limits [(gss-krb5-ext.details) (gss-name-t)] >> endobj 1366 0 obj << /Names [(gss-oid-equal) 928 0 R (gss-process-context-token) 550 0 R (gss-qop-t) 131 0 R (gss-release-buffer) 515 0 R (gss-release-cred) 476 0 R (gss-release-name) 543 0 R] /Limits [(gss-oid-equal) (gss-release-name)] >> endobj 1367 0 obj << /Names [(gss-release-oid-set) 489 0 R (gss-seal) 868 0 R (gss-sign) 849 0 R (gss-test-oid-set-member) 810 0 R (gss-uint32) 127 0 R (gss-unseal) 877 0 R] /Limits [(gss-release-oid-set) (gss-unseal)] >> endobj 1368 0 obj << /Names [(gss-unwrap) 607 0 R (gss-userok) 958 0 R (gss-verify) 856 0 R (gss-verify-mic) 584 0 R (gss-wrap) 591 0 R (gss-wrap-size-limit) 727 0 R] /Limits [(gss-unwrap) (gss-wrap-size-limit)] >> endobj 1369 0 obj << /Names [(index) 37 0 R (intro) 63 0 R (lstlisting.1.-1) 70 0 R (lstlisting.1.-10) 132 0 R (lstlisting.1.-100) 443 0 R (lstlisting.1.-101) 446 0 R] /Limits [(index) (lstlisting.1.-101)] >> endobj 1370 0 obj << /Names [(lstlisting.1.-102) 449 0 R (lstlisting.1.-103) 452 0 R (lstlisting.1.-104) 455 0 R (lstlisting.1.-105) 458 0 R (lstlisting.1.-106) 477 0 R (lstlisting.1.-107) 480 0 R] /Limits [(lstlisting.1.-102) (lstlisting.1.-107)] >> endobj 1371 0 obj << /Names [(lstlisting.1.-108) 521 0 R (lstlisting.1.-109) 551 0 R (lstlisting.1.-11) 135 0 R (lstlisting.1.-110) 562 0 R (lstlisting.1.-111) 567 0 R (lstlisting.1.-112) 572 0 R] /Limits [(lstlisting.1.-108) (lstlisting.1.-112)] >> endobj 1372 0 obj << /Names [(lstlisting.1.-113) 585 0 R (lstlisting.1.-114) 599 0 R (lstlisting.1.-115) 608 0 R (lstlisting.1.-116) 621 0 R (lstlisting.1.-117) 638 0 R (lstlisting.1.-118) 642 0 R] /Limits [(lstlisting.1.-113) (lstlisting.1.-118)] >> endobj 1373 0 obj << /Names [(lstlisting.1.-119) 654 0 R (lstlisting.1.-12) 138 0 R (lstlisting.1.-120) 661 0 R (lstlisting.1.-121) 675 0 R (lstlisting.1.-122) 679 0 R (lstlisting.1.-123) 682 0 R] /Limits [(lstlisting.1.-119) (lstlisting.1.-123)] >> endobj 1374 0 obj << /Names [(lstlisting.1.-124) 692 0 R (lstlisting.1.-125) 696 0 R (lstlisting.1.-126) 704 0 R (lstlisting.1.-127) 728 0 R (lstlisting.1.-128) 736 0 R (lstlisting.1.-129) 767 0 R] /Limits [(lstlisting.1.-124) (lstlisting.1.-129)] >> endobj 1375 0 obj << /Names [(lstlisting.1.-13) 141 0 R (lstlisting.1.-130) 782 0 R (lstlisting.1.-131) 787 0 R (lstlisting.1.-132) 802 0 R (lstlisting.1.-133) 806 0 R (lstlisting.1.-134) 811 0 R] /Limits [(lstlisting.1.-13) (lstlisting.1.-134)] >> endobj 1376 0 obj << /Names [(lstlisting.1.-135) 825 0 R (lstlisting.1.-136) 830 0 R (lstlisting.1.-137) 834 0 R (lstlisting.1.-138) 845 0 R (lstlisting.1.-139) 850 0 R (lstlisting.1.-14) 148 0 R] /Limits [(lstlisting.1.-135) (lstlisting.1.-14)] >> endobj 1377 0 obj << /Names [(lstlisting.1.-140) 857 0 R (lstlisting.1.-141) 869 0 R (lstlisting.1.-142) 878 0 R (lstlisting.1.-143) 893 0 R (lstlisting.1.-144) 900 0 R (lstlisting.1.-145) 905 0 R] /Limits [(lstlisting.1.-140) (lstlisting.1.-145)] >> endobj 1378 0 obj << /Names [(lstlisting.1.-146) 908 0 R (lstlisting.1.-147) 911 0 R (lstlisting.1.-148) 920 0 R (lstlisting.1.-149) 923 0 R (lstlisting.1.-15) 151 0 R (lstlisting.1.-150) 926 0 R] /Limits [(lstlisting.1.-146) (lstlisting.1.-150)] >> endobj 1379 0 obj << /Names [(lstlisting.1.-151) 929 0 R (lstlisting.1.-152) 933 0 R (lstlisting.1.-153) 943 0 R (lstlisting.1.-154) 951 0 R (lstlisting.1.-155) 959 0 R (lstlisting.1.-156) 963 0 R] /Limits [(lstlisting.1.-151) (lstlisting.1.-156)] >> endobj 1380 0 obj << /Names [(lstlisting.1.-157) 966 0 R (lstlisting.1.-158) 969 0 R (lstlisting.1.-159) 972 0 R (lstlisting.1.-16) 154 0 R (lstlisting.1.-160) 975 0 R (lstlisting.1.-161) 978 0 R] /Limits [(lstlisting.1.-157) (lstlisting.1.-161)] >> endobj 1381 0 obj << /Names [(lstlisting.1.-162) 981 0 R (lstlisting.1.-163) 992 0 R (lstlisting.1.-164) 995 0 R (lstlisting.1.-165) 998 0 R (lstlisting.1.-166) 1001 0 R (lstlisting.1.-167) 1004 0 R] /Limits [(lstlisting.1.-162) (lstlisting.1.-167)] >> endobj 1382 0 obj << /Names [(lstlisting.1.-168) 1012 0 R (lstlisting.1.-169) 1015 0 R (lstlisting.1.-17) 157 0 R (lstlisting.1.-170) 1018 0 R (lstlisting.1.-171) 1021 0 R (lstlisting.1.-172) 1024 0 R] /Limits [(lstlisting.1.-168) (lstlisting.1.-172)] >> endobj 1383 0 obj << /Names [(lstlisting.1.-173) 1027 0 R (lstlisting.1.-174) 1030 0 R (lstlisting.1.-175) 1033 0 R (lstlisting.1.-176) 1036 0 R (lstlisting.1.-177) 1039 0 R (lstlisting.1.-178) 1042 0 R] /Limits [(lstlisting.1.-173) (lstlisting.1.-178)] >> endobj 1384 0 obj << /Names [(lstlisting.1.-179) 1049 0 R (lstlisting.1.-18) 160 0 R (lstlisting.1.-180) 1052 0 R (lstlisting.1.-181) 1055 0 R (lstlisting.1.-182) 1058 0 R (lstlisting.1.-183) 1061 0 R] /Limits [(lstlisting.1.-179) (lstlisting.1.-183)] >> endobj 1385 0 obj << /Names [(lstlisting.1.-184) 1064 0 R (lstlisting.1.-185) 1071 0 R (lstlisting.1.-186) 1078 0 R (lstlisting.1.-187) 1081 0 R (lstlisting.1.-188) 1084 0 R (lstlisting.1.-189) 1087 0 R] /Limits [(lstlisting.1.-184) (lstlisting.1.-189)] >> endobj 1386 0 obj << /Names [(lstlisting.1.-19) 163 0 R (lstlisting.1.-190) 1090 0 R (lstlisting.1.-191) 1093 0 R (lstlisting.1.-2) 78 0 R (lstlisting.1.-20) 166 0 R (lstlisting.1.-21) 169 0 R] /Limits [(lstlisting.1.-19) (lstlisting.1.-21)] >> endobj 1387 0 obj << /Names [(lstlisting.1.-22) 172 0 R (lstlisting.1.-23) 175 0 R (lstlisting.1.-24) 178 0 R (lstlisting.1.-25) 185 0 R (lstlisting.1.-26) 188 0 R (lstlisting.1.-27) 191 0 R] /Limits [(lstlisting.1.-22) (lstlisting.1.-27)] >> endobj 1388 0 obj << /Names [(lstlisting.1.-28) 194 0 R (lstlisting.1.-29) 197 0 R (lstlisting.1.-3) 81 0 R (lstlisting.1.-30) 200 0 R (lstlisting.1.-31) 203 0 R (lstlisting.1.-32) 206 0 R] /Limits [(lstlisting.1.-28) (lstlisting.1.-32)] >> endobj 1389 0 obj << /Names [(lstlisting.1.-33) 209 0 R (lstlisting.1.-34) 212 0 R (lstlisting.1.-35) 215 0 R (lstlisting.1.-36) 223 0 R (lstlisting.1.-37) 226 0 R (lstlisting.1.-38) 229 0 R] /Limits [(lstlisting.1.-33) (lstlisting.1.-38)] >> endobj 1390 0 obj << /Names [(lstlisting.1.-39) 232 0 R (lstlisting.1.-4) 84 0 R (lstlisting.1.-40) 235 0 R (lstlisting.1.-41) 238 0 R (lstlisting.1.-42) 241 0 R (lstlisting.1.-43) 244 0 R] /Limits [(lstlisting.1.-39) (lstlisting.1.-43)] >> endobj 1391 0 obj << /Names [(lstlisting.1.-44) 247 0 R (lstlisting.1.-45) 250 0 R (lstlisting.1.-46) 253 0 R (lstlisting.1.-47) 260 0 R (lstlisting.1.-48) 263 0 R (lstlisting.1.-49) 266 0 R] /Limits [(lstlisting.1.-44) (lstlisting.1.-49)] >> endobj 1392 0 obj << /Names [(lstlisting.1.-5) 87 0 R (lstlisting.1.-50) 269 0 R (lstlisting.1.-51) 272 0 R (lstlisting.1.-52) 275 0 R (lstlisting.1.-53) 278 0 R (lstlisting.1.-54) 281 0 R] /Limits [(lstlisting.1.-5) (lstlisting.1.-54)] >> endobj 1393 0 obj << /Names [(lstlisting.1.-55) 284 0 R (lstlisting.1.-56) 287 0 R (lstlisting.1.-57) 290 0 R (lstlisting.1.-58) 297 0 R (lstlisting.1.-59) 300 0 R (lstlisting.1.-6) 119 0 R] /Limits [(lstlisting.1.-55) (lstlisting.1.-6)] >> endobj 1394 0 obj << /Names [(lstlisting.1.-60) 303 0 R (lstlisting.1.-61) 306 0 R (lstlisting.1.-62) 309 0 R (lstlisting.1.-63) 312 0 R (lstlisting.1.-64) 315 0 R (lstlisting.1.-65) 318 0 R] /Limits [(lstlisting.1.-60) (lstlisting.1.-65)] >> endobj 1395 0 obj << /Names [(lstlisting.1.-66) 321 0 R (lstlisting.1.-67) 324 0 R (lstlisting.1.-68) 327 0 R (lstlisting.1.-69) 334 0 R (lstlisting.1.-7) 122 0 R (lstlisting.1.-70) 337 0 R] /Limits [(lstlisting.1.-66) (lstlisting.1.-70)] >> endobj 1396 0 obj << /Names [(lstlisting.1.-71) 340 0 R (lstlisting.1.-72) 343 0 R (lstlisting.1.-73) 346 0 R (lstlisting.1.-74) 349 0 R (lstlisting.1.-75) 353 0 R (lstlisting.1.-76) 356 0 R] /Limits [(lstlisting.1.-71) (lstlisting.1.-76)] >> endobj 1397 0 obj << /Names [(lstlisting.1.-77) 359 0 R (lstlisting.1.-78) 366 0 R (lstlisting.1.-79) 369 0 R (lstlisting.1.-8) 125 0 R (lstlisting.1.-80) 372 0 R (lstlisting.1.-81) 375 0 R] /Limits [(lstlisting.1.-77) (lstlisting.1.-81)] >> endobj 1398 0 obj << /Names [(lstlisting.1.-82) 378 0 R (lstlisting.1.-83) 381 0 R (lstlisting.1.-84) 384 0 R (lstlisting.1.-85) 387 0 R (lstlisting.1.-86) 390 0 R (lstlisting.1.-87) 393 0 R] /Limits [(lstlisting.1.-82) (lstlisting.1.-87)] >> endobj 1399 0 obj << /Names [(lstlisting.1.-88) 396 0 R (lstlisting.1.-89) 403 0 R (lstlisting.1.-9) 129 0 R (lstlisting.1.-90) 406 0 R (lstlisting.1.-91) 409 0 R (lstlisting.1.-92) 412 0 R] /Limits [(lstlisting.1.-88) (lstlisting.1.-92)] >> endobj 1400 0 obj << /Names [(lstlisting.1.-93) 415 0 R (lstlisting.1.-94) 418 0 R (lstlisting.1.-95) 421 0 R (lstlisting.1.-96) 424 0 R (lstlisting.1.-97) 427 0 R (lstlisting.1.-98) 430 0 R] /Limits [(lstlisting.1.-93) (lstlisting.1.-98)] >> endobj 1401 0 obj << /Names [(lstlisting.1.-99) 433 0 R (lstnumber.-1.1) 71 0 R (lstnumber.-10.1) 133 0 R (lstnumber.-100.1) 444 0 R (lstnumber.-101.1) 447 0 R (lstnumber.-102.1) 450 0 R] /Limits [(lstlisting.1.-99) (lstnumber.-102.1)] >> endobj 1402 0 obj << /Names [(lstnumber.-103.1) 453 0 R (lstnumber.-104.1) 456 0 R (lstnumber.-105.1) 459 0 R (lstnumber.-105.2) 460 0 R (lstnumber.-105.3) 461 0 R (lstnumber.-105.4) 462 0 R] /Limits [(lstnumber.-103.1) (lstnumber.-105.4)] >> endobj 1403 0 obj << /Names [(lstnumber.-105.5) 463 0 R (lstnumber.-105.6) 464 0 R (lstnumber.-105.7) 465 0 R (lstnumber.-105.8) 466 0 R (lstnumber.-106.1) 478 0 R (lstnumber.-106.2) 479 0 R] /Limits [(lstnumber.-105.5) (lstnumber.-106.2)] >> endobj 1404 0 obj << /Names [(lstnumber.-107.1) 481 0 R (lstnumber.-107.10) 498 0 R (lstnumber.-107.11) 499 0 R (lstnumber.-107.12) 500 0 R (lstnumber.-107.13) 501 0 R (lstnumber.-107.2) 482 0 R] /Limits [(lstnumber.-107.1) (lstnumber.-107.2)] >> endobj 1405 0 obj << /Names [(lstnumber.-107.3) 485 0 R (lstnumber.-107.4) 486 0 R (lstnumber.-107.5) 487 0 R (lstnumber.-107.6) 488 0 R (lstnumber.-107.7) 495 0 R (lstnumber.-107.8) 496 0 R] /Limits [(lstnumber.-107.3) (lstnumber.-107.8)] >> endobj 1406 0 obj << /Names [(lstnumber.-107.9) 497 0 R (lstnumber.-108.1) 522 0 R (lstnumber.-108.10) 531 0 R (lstnumber.-108.11) 532 0 R (lstnumber.-108.2) 523 0 R (lstnumber.-108.3) 524 0 R] /Limits [(lstnumber.-107.9) (lstnumber.-108.3)] >> endobj 1407 0 obj << /Names [(lstnumber.-108.4) 525 0 R (lstnumber.-108.5) 526 0 R (lstnumber.-108.6) 527 0 R (lstnumber.-108.7) 528 0 R (lstnumber.-108.8) 529 0 R (lstnumber.-108.9) 530 0 R] /Limits [(lstnumber.-108.4) (lstnumber.-108.9)] >> endobj 1408 0 obj << /Names [(lstnumber.-109.1) 552 0 R (lstnumber.-109.2) 553 0 R (lstnumber.-109.3) 554 0 R (lstnumber.-11.1) 136 0 R (lstnumber.-110.1) 563 0 R (lstnumber.-110.2) 564 0 R] /Limits [(lstnumber.-109.1) (lstnumber.-110.2)] >> endobj 1409 0 obj << /Names [(lstnumber.-110.3) 565 0 R (lstnumber.-111.1) 568 0 R (lstnumber.-111.2) 569 0 R (lstnumber.-111.3) 570 0 R (lstnumber.-112.1) 573 0 R (lstnumber.-112.2) 574 0 R] /Limits [(lstnumber.-110.3) (lstnumber.-112.2)] >> endobj 1410 0 obj << /Names [(lstnumber.-112.3) 575 0 R (lstnumber.-112.4) 576 0 R (lstnumber.-112.5) 577 0 R (lstnumber.-113.1) 586 0 R (lstnumber.-113.2) 587 0 R (lstnumber.-113.3) 588 0 R] /Limits [(lstnumber.-112.3) (lstnumber.-113.3)] >> endobj 1411 0 obj << /Names [(lstnumber.-113.4) 589 0 R (lstnumber.-113.5) 590 0 R (lstnumber.-114.1) 600 0 R (lstnumber.-114.2) 601 0 R (lstnumber.-114.3) 602 0 R (lstnumber.-114.4) 603 0 R] /Limits [(lstnumber.-113.4) (lstnumber.-114.4)] >> endobj 1412 0 obj << /Names [(lstnumber.-114.5) 604 0 R (lstnumber.-114.6) 605 0 R (lstnumber.-114.7) 606 0 R (lstnumber.-115.1) 609 0 R (lstnumber.-115.2) 610 0 R (lstnumber.-115.3) 611 0 R] /Limits [(lstnumber.-114.5) (lstnumber.-115.3)] >> endobj 1413 0 obj << /Names [(lstnumber.-115.4) 612 0 R (lstnumber.-115.5) 613 0 R (lstnumber.-115.6) 614 0 R (lstnumber.-116.1) 622 0 R (lstnumber.-116.2) 623 0 R (lstnumber.-116.3) 624 0 R] /Limits [(lstnumber.-115.4) (lstnumber.-116.3)] >> endobj 1414 0 obj << /Names [(lstnumber.-116.4) 625 0 R (lstnumber.-116.5) 626 0 R (lstnumber.-116.6) 627 0 R (lstnumber.-117.1) 639 0 R (lstnumber.-117.2) 640 0 R (lstnumber.-118.1) 643 0 R] /Limits [(lstnumber.-116.4) (lstnumber.-118.1)] >> endobj 1415 0 obj << /Names [(lstnumber.-118.2) 644 0 R (lstnumber.-118.3) 645 0 R (lstnumber.-118.4) 646 0 R (lstnumber.-119.1) 655 0 R (lstnumber.-119.2) 656 0 R (lstnumber.-119.3) 657 0 R] /Limits [(lstnumber.-118.2) (lstnumber.-119.3)] >> endobj 1416 0 obj << /Names [(lstnumber.-119.4) 658 0 R (lstnumber.-12.1) 139 0 R (lstnumber.-120.1) 662 0 R (lstnumber.-120.2) 663 0 R (lstnumber.-120.3) 664 0 R (lstnumber.-120.4) 665 0 R] /Limits [(lstnumber.-119.4) (lstnumber.-120.4)] >> endobj 1417 0 obj << /Names [(lstnumber.-121.1) 676 0 R (lstnumber.-121.2) 677 0 R (lstnumber.-121.3) 678 0 R (lstnumber.-122.1) 680 0 R (lstnumber.-122.2) 681 0 R (lstnumber.-123.1) 683 0 R] /Limits [(lstnumber.-121.1) (lstnumber.-123.1)] >> endobj 1418 0 obj << /Names [(lstnumber.-123.2) 684 0 R (lstnumber.-124.1) 693 0 R (lstnumber.-124.2) 694 0 R (lstnumber.-125.1) 697 0 R (lstnumber.-125.2) 698 0 R (lstnumber.-125.3) 699 0 R] /Limits [(lstnumber.-123.2) (lstnumber.-125.3)] >> endobj 1419 0 obj << /Names [(lstnumber.-125.4) 700 0 R (lstnumber.-125.5) 701 0 R (lstnumber.-125.6) 702 0 R (lstnumber.-126.1) 705 0 R (lstnumber.-126.2) 706 0 R (lstnumber.-126.3) 707 0 R] /Limits [(lstnumber.-125.4) (lstnumber.-126.3)] >> endobj 1420 0 obj << /Names [(lstnumber.-126.4) 708 0 R (lstnumber.-126.5) 709 0 R (lstnumber.-126.6) 710 0 R (lstnumber.-126.7) 711 0 R (lstnumber.-126.8) 712 0 R (lstnumber.-126.9) 713 0 R] /Limits [(lstnumber.-126.4) (lstnumber.-126.9)] >> endobj 1421 0 obj << /Names [(lstnumber.-127.1) 729 0 R (lstnumber.-127.2) 730 0 R (lstnumber.-127.3) 731 0 R (lstnumber.-127.4) 732 0 R (lstnumber.-127.5) 733 0 R (lstnumber.-127.6) 734 0 R] /Limits [(lstnumber.-127.1) (lstnumber.-127.6)] >> endobj 1422 0 obj << /Names [(lstnumber.-128.1) 737 0 R (lstnumber.-128.10) 746 0 R (lstnumber.-128.11) 747 0 R (lstnumber.-128.2) 738 0 R (lstnumber.-128.3) 739 0 R (lstnumber.-128.4) 740 0 R] /Limits [(lstnumber.-128.1) (lstnumber.-128.4)] >> endobj 1423 0 obj << /Names [(lstnumber.-128.5) 741 0 R (lstnumber.-128.6) 742 0 R (lstnumber.-128.7) 743 0 R (lstnumber.-128.8) 744 0 R (lstnumber.-128.9) 745 0 R (lstnumber.-129.1) 768 0 R] /Limits [(lstnumber.-128.5) (lstnumber.-129.1)] >> endobj 1424 0 obj << /Names [(lstnumber.-129.2) 769 0 R (lstnumber.-129.3) 770 0 R (lstnumber.-129.4) 771 0 R (lstnumber.-129.5) 772 0 R (lstnumber.-129.6) 773 0 R (lstnumber.-129.7) 774 0 R] /Limits [(lstnumber.-129.2) (lstnumber.-129.7)] >> endobj 1425 0 obj << /Names [(lstnumber.-13.1) 142 0 R (lstnumber.-130.1) 783 0 R (lstnumber.-130.2) 784 0 R (lstnumber.-130.3) 785 0 R (lstnumber.-131.1) 788 0 R (lstnumber.-131.2) 789 0 R] /Limits [(lstnumber.-13.1) (lstnumber.-131.2)] >> endobj 1426 0 obj << /Names [(lstnumber.-131.3) 790 0 R (lstnumber.-132.1) 803 0 R (lstnumber.-132.2) 804 0 R (lstnumber.-133.1) 807 0 R (lstnumber.-133.2) 808 0 R (lstnumber.-133.3) 809 0 R] /Limits [(lstnumber.-131.3) (lstnumber.-133.3)] >> endobj 1427 0 obj << /Names [(lstnumber.-134.1) 812 0 R (lstnumber.-134.2) 813 0 R (lstnumber.-134.3) 814 0 R (lstnumber.-134.4) 815 0 R (lstnumber.-135.1) 826 0 R (lstnumber.-135.2) 827 0 R] /Limits [(lstnumber.-134.1) (lstnumber.-135.2)] >> endobj 1428 0 obj << /Names [(lstnumber.-135.3) 828 0 R (lstnumber.-136.1) 831 0 R (lstnumber.-136.2) 832 0 R (lstnumber.-136.3) 833 0 R (lstnumber.-137.1) 835 0 R (lstnumber.-137.2) 836 0 R] /Limits [(lstnumber.-135.3) (lstnumber.-137.2)] >> endobj 1429 0 obj << /Names [(lstnumber.-137.3) 837 0 R (lstnumber.-137.4) 838 0 R (lstnumber.-138.1) 846 0 R (lstnumber.-138.2) 847 0 R (lstnumber.-138.3) 848 0 R (lstnumber.-139.1) 851 0 R] /Limits [(lstnumber.-137.3) (lstnumber.-139.1)] >> endobj 1430 0 obj << /Names [(lstnumber.-139.2) 852 0 R (lstnumber.-139.3) 853 0 R (lstnumber.-139.4) 854 0 R (lstnumber.-139.5) 855 0 R (lstnumber.-14.1) 149 0 R (lstnumber.-140.1) 858 0 R] /Limits [(lstnumber.-139.2) (lstnumber.-140.1)] >> endobj 1431 0 obj << /Names [(lstnumber.-140.2) 859 0 R (lstnumber.-140.3) 860 0 R (lstnumber.-140.4) 861 0 R (lstnumber.-140.5) 862 0 R (lstnumber.-141.1) 870 0 R (lstnumber.-141.2) 871 0 R] /Limits [(lstnumber.-140.2) (lstnumber.-141.2)] >> endobj 1432 0 obj << /Names [(lstnumber.-141.3) 872 0 R (lstnumber.-141.4) 873 0 R (lstnumber.-141.5) 874 0 R (lstnumber.-141.6) 875 0 R (lstnumber.-141.7) 876 0 R (lstnumber.-142.1) 879 0 R] /Limits [(lstnumber.-141.3) (lstnumber.-142.1)] >> endobj 1433 0 obj << /Names [(lstnumber.-142.2) 880 0 R (lstnumber.-142.3) 881 0 R (lstnumber.-142.4) 882 0 R (lstnumber.-142.5) 883 0 R (lstnumber.-142.6) 884 0 R (lstnumber.-143.1) 894 0 R] /Limits [(lstnumber.-142.2) (lstnumber.-143.1)] >> endobj 1434 0 obj << /Names [(lstnumber.-143.2) 895 0 R (lstnumber.-143.3) 896 0 R (lstnumber.-143.4) 897 0 R (lstnumber.-143.5) 898 0 R (lstnumber.-144.1) 901 0 R (lstnumber.-144.2) 902 0 R] /Limits [(lstnumber.-143.2) (lstnumber.-144.2)] >> endobj 1435 0 obj << /Names [(lstnumber.-144.3) 903 0 R (lstnumber.-145.1) 906 0 R (lstnumber.-146.1) 909 0 R (lstnumber.-147.1) 912 0 R (lstnumber.-148.1) 921 0 R (lstnumber.-149.1) 924 0 R] /Limits [(lstnumber.-144.3) (lstnumber.-149.1)] >> endobj 1436 0 obj << /Names [(lstnumber.-15.1) 152 0 R (lstnumber.-150.1) 927 0 R (lstnumber.-151.1) 930 0 R (lstnumber.-151.2) 931 0 R (lstnumber.-152.1) 934 0 R (lstnumber.-152.2) 935 0 R] /Limits [(lstnumber.-15.1) (lstnumber.-152.2)] >> endobj 1437 0 obj << /Names [(lstnumber.-152.3) 936 0 R (lstnumber.-153.1) 944 0 R (lstnumber.-153.2) 945 0 R (lstnumber.-153.3) 946 0 R (lstnumber.-154.1) 952 0 R (lstnumber.-155.1) 960 0 R] /Limits [(lstnumber.-152.3) (lstnumber.-155.1)] >> endobj 1438 0 obj << /Names [(lstnumber.-155.2) 961 0 R (lstnumber.-156.1) 964 0 R (lstnumber.-157.1) 967 0 R (lstnumber.-158.1) 970 0 R (lstnumber.-159.1) 973 0 R (lstnumber.-16.1) 155 0 R] /Limits [(lstnumber.-155.2) (lstnumber.-16.1)] >> endobj 1439 0 obj << /Names [(lstnumber.-160.1) 976 0 R (lstnumber.-161.1) 979 0 R (lstnumber.-162.1) 982 0 R (lstnumber.-163.1) 993 0 R (lstnumber.-164.1) 996 0 R (lstnumber.-165.1) 999 0 R] /Limits [(lstnumber.-160.1) (lstnumber.-165.1)] >> endobj 1440 0 obj << /Names [(lstnumber.-166.1) 1002 0 R (lstnumber.-167.1) 1005 0 R (lstnumber.-168.1) 1013 0 R (lstnumber.-169.1) 1016 0 R (lstnumber.-17.1) 158 0 R (lstnumber.-170.1) 1019 0 R] /Limits [(lstnumber.-166.1) (lstnumber.-170.1)] >> endobj 1441 0 obj << /Names [(lstnumber.-171.1) 1022 0 R (lstnumber.-172.1) 1025 0 R (lstnumber.-173.1) 1028 0 R (lstnumber.-174.1) 1031 0 R (lstnumber.-175.1) 1034 0 R (lstnumber.-176.1) 1037 0 R] /Limits [(lstnumber.-171.1) (lstnumber.-176.1)] >> endobj 1442 0 obj << /Names [(lstnumber.-177.1) 1040 0 R (lstnumber.-178.1) 1043 0 R (lstnumber.-179.1) 1050 0 R (lstnumber.-18.1) 161 0 R (lstnumber.-180.1) 1053 0 R (lstnumber.-181.1) 1056 0 R] /Limits [(lstnumber.-177.1) (lstnumber.-181.1)] >> endobj 1443 0 obj << /Names [(lstnumber.-182.1) 1059 0 R (lstnumber.-183.1) 1062 0 R (lstnumber.-184.1) 1065 0 R (lstnumber.-185.1) 1072 0 R (lstnumber.-186.1) 1079 0 R (lstnumber.-187.1) 1082 0 R] /Limits [(lstnumber.-182.1) (lstnumber.-187.1)] >> endobj 1444 0 obj << /Names [(lstnumber.-188.1) 1085 0 R (lstnumber.-189.1) 1088 0 R (lstnumber.-19.1) 164 0 R (lstnumber.-190.1) 1091 0 R (lstnumber.-191.1) 1094 0 R (lstnumber.-2.1) 79 0 R] /Limits [(lstnumber.-188.1) (lstnumber.-2.1)] >> endobj 1445 0 obj << /Names [(lstnumber.-20.1) 167 0 R (lstnumber.-21.1) 170 0 R (lstnumber.-22.1) 173 0 R (lstnumber.-23.1) 176 0 R (lstnumber.-24.1) 179 0 R (lstnumber.-25.1) 186 0 R] /Limits [(lstnumber.-20.1) (lstnumber.-25.1)] >> endobj 1446 0 obj << /Names [(lstnumber.-26.1) 189 0 R (lstnumber.-27.1) 192 0 R (lstnumber.-28.1) 195 0 R (lstnumber.-29.1) 198 0 R (lstnumber.-3.1) 82 0 R (lstnumber.-30.1) 201 0 R] /Limits [(lstnumber.-26.1) (lstnumber.-30.1)] >> endobj 1447 0 obj << /Names [(lstnumber.-31.1) 204 0 R (lstnumber.-32.1) 207 0 R (lstnumber.-33.1) 210 0 R (lstnumber.-34.1) 213 0 R (lstnumber.-35.1) 216 0 R (lstnumber.-36.1) 224 0 R] /Limits [(lstnumber.-31.1) (lstnumber.-36.1)] >> endobj 1448 0 obj << /Names [(lstnumber.-37.1) 227 0 R (lstnumber.-38.1) 230 0 R (lstnumber.-39.1) 233 0 R (lstnumber.-4.1) 85 0 R (lstnumber.-40.1) 236 0 R (lstnumber.-41.1) 239 0 R] /Limits [(lstnumber.-37.1) (lstnumber.-41.1)] >> endobj 1449 0 obj << /Names [(lstnumber.-42.1) 242 0 R (lstnumber.-43.1) 245 0 R (lstnumber.-44.1) 248 0 R (lstnumber.-45.1) 251 0 R (lstnumber.-46.1) 254 0 R (lstnumber.-47.1) 261 0 R] /Limits [(lstnumber.-42.1) (lstnumber.-47.1)] >> endobj 1450 0 obj << /Names [(lstnumber.-48.1) 264 0 R (lstnumber.-49.1) 267 0 R (lstnumber.-5.1) 88 0 R (lstnumber.-50.1) 270 0 R (lstnumber.-51.1) 273 0 R (lstnumber.-52.1) 276 0 R] /Limits [(lstnumber.-48.1) (lstnumber.-52.1)] >> endobj 1451 0 obj << /Names [(lstnumber.-53.1) 279 0 R (lstnumber.-54.1) 282 0 R (lstnumber.-55.1) 285 0 R (lstnumber.-56.1) 288 0 R (lstnumber.-57.1) 291 0 R (lstnumber.-58.1) 298 0 R] /Limits [(lstnumber.-53.1) (lstnumber.-58.1)] >> endobj 1452 0 obj << /Names [(lstnumber.-59.1) 301 0 R (lstnumber.-6.1) 120 0 R (lstnumber.-60.1) 304 0 R (lstnumber.-61.1) 307 0 R (lstnumber.-62.1) 310 0 R (lstnumber.-63.1) 313 0 R] /Limits [(lstnumber.-59.1) (lstnumber.-63.1)] >> endobj 1453 0 obj << /Names [(lstnumber.-64.1) 316 0 R (lstnumber.-65.1) 319 0 R (lstnumber.-66.1) 322 0 R (lstnumber.-67.1) 325 0 R (lstnumber.-68.1) 328 0 R (lstnumber.-69.1) 335 0 R] /Limits [(lstnumber.-64.1) (lstnumber.-69.1)] >> endobj 1454 0 obj << /Names [(lstnumber.-7.1) 123 0 R (lstnumber.-70.1) 338 0 R (lstnumber.-71.1) 341 0 R (lstnumber.-72.1) 344 0 R (lstnumber.-73.1) 347 0 R (lstnumber.-74.1) 350 0 R] /Limits [(lstnumber.-7.1) (lstnumber.-74.1)] >> endobj 1455 0 obj << /Names [(lstnumber.-75.1) 354 0 R (lstnumber.-76.1) 357 0 R (lstnumber.-77.1) 360 0 R (lstnumber.-78.1) 367 0 R (lstnumber.-79.1) 370 0 R (lstnumber.-8.1) 126 0 R] /Limits [(lstnumber.-75.1) (lstnumber.-8.1)] >> endobj 1456 0 obj << /Names [(lstnumber.-80.1) 373 0 R (lstnumber.-81.1) 376 0 R (lstnumber.-82.1) 379 0 R (lstnumber.-83.1) 382 0 R (lstnumber.-84.1) 385 0 R (lstnumber.-85.1) 388 0 R] /Limits [(lstnumber.-80.1) (lstnumber.-85.1)] >> endobj 1457 0 obj << /Names [(lstnumber.-86.1) 391 0 R (lstnumber.-87.1) 394 0 R (lstnumber.-88.1) 397 0 R (lstnumber.-89.1) 404 0 R (lstnumber.-9.1) 130 0 R (lstnumber.-90.1) 407 0 R] /Limits [(lstnumber.-86.1) (lstnumber.-90.1)] >> endobj 1458 0 obj << /Names [(lstnumber.-91.1) 410 0 R (lstnumber.-92.1) 413 0 R (lstnumber.-93.1) 416 0 R (lstnumber.-94.1) 419 0 R (lstnumber.-95.1) 422 0 R (lstnumber.-96.1) 425 0 R] /Limits [(lstnumber.-91.1) (lstnumber.-96.1)] >> endobj 1459 0 obj << /Names [(lstnumber.-97.1) 428 0 R (lstnumber.-98.1) 431 0 R (lstnumber.-99.1) 434 0 R (page.1) 62 0 R (page.10) 183 0 R (page.11) 221 0 R] /Limits [(lstnumber.-97.1) (page.11)] >> endobj 1460 0 obj << /Names [(page.12) 258 0 R (page.13) 295 0 R (page.14) 332 0 R (page.15) 364 0 R (page.16) 401 0 R (page.17) 441 0 R] /Limits [(page.12) (page.17)] >> endobj 1461 0 obj << /Names [(page.18) 474 0 R (page.19) 494 0 R (page.2) 76 0 R (page.20) 507 0 R (page.21) 513 0 R (page.22) 520 0 R] /Limits [(page.18) (page.22)] >> endobj 1462 0 obj << /Names [(page.23) 542 0 R (page.24) 549 0 R (page.25) 561 0 R (page.26) 583 0 R (page.27) 598 0 R (page.28) 619 0 R] /Limits [(page.23) (page.28)] >> endobj 1463 0 obj << /Names [(page.29) 636 0 R (page.3) 94 0 R (page.30) 652 0 R (page.31) 673 0 R (page.32) 691 0 R (page.33) 721 0 R] /Limits [(page.29) (page.33)] >> endobj 1464 0 obj << /Names [(page.34) 726 0 R (page.35) 759 0 R (page.36) 765 0 R (page.37) 781 0 R (page.38) 800 0 R (page.39) 823 0 R] /Limits [(page.34) (page.39)] >> endobj 1465 0 obj << /Names [(page.4) 98 0 R (page.40) 843 0 R (page.41) 867 0 R (page.42) 891 0 R (page.43) 918 0 R (page.44) 941 0 R] /Limits [(page.4) (page.44)] >> endobj 1466 0 obj << /Names [(page.45) 957 0 R (page.46) 987 0 R (page.47) 1010 0 R (page.48) 1047 0 R (page.49) 1076 0 R (page.5) 103 0 R] /Limits [(page.45) (page.5)] >> endobj 1467 0 obj << /Names [(page.50) 1184 0 R (page.51) 1294 0 R (page.6) 107 0 R (page.7) 111 0 R (page.8) 115 0 R (page.9) 146 0 R] /Limits [(page.50) (page.9)] >> endobj 1468 0 obj << /Names [(page.i) 33 0 R (page.ii) 43 0 R (page.iii) 55 0 R (section.1.1) 6 0 R (section.1.2) 10 0 R (section.1.3) 14 0 R] /Limits [(page.i) (section.1.3)] >> endobj 1469 0 obj << /Names [(section.1.4) 18 0 R (section.1.5) 22 0 R] /Limits [(section.1.4) (section.1.5)] >> endobj 1470 0 obj << /Kids [1333 0 R 1334 0 R 1335 0 R 1336 0 R 1337 0 R 1338 0 R] /Limits [(Doc-Start) (GSS-C-MECH-CODE:CAPS)] >> endobj 1471 0 obj << /Kids [1339 0 R 1340 0 R 1341 0 R 1342 0 R 1343 0 R 1344 0 R] /Limits [(GSS-C-MUTUAL-FLAG:CAPS) (GSS-KRB5-NT-HOSTBASED-SERVICE-NAME-static)] >> endobj 1472 0 obj << /Kids [1345 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R] /Limits [(GSS-KRB5-NT-HOSTBASED-SERVICE-NAME:CAPS) (GSS-S-BAD-SIG:CAPS)] >> endobj 1473 0 obj << /Kids [1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R] /Limits [(GSS-S-BAD-STATUS:CAPS) (gss-api)] >> endobj 1474 0 obj << /Kids [1357 0 R 1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R] /Limits [(gss-api.description) (gss-import-sec-context)] >> endobj 1475 0 obj << /Kids [1363 0 R 1364 0 R 1365 0 R 1366 0 R 1367 0 R 1368 0 R] /Limits [(gss-indicate-mechs) (gss-wrap-size-limit)] >> endobj 1476 0 obj << /Kids [1369 0 R 1370 0 R 1371 0 R 1372 0 R 1373 0 R 1374 0 R] /Limits [(index) (lstlisting.1.-129)] >> endobj 1477 0 obj << /Kids [1375 0 R 1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R] /Limits [(lstlisting.1.-13) (lstlisting.1.-161)] >> endobj 1478 0 obj << /Kids [1381 0 R 1382 0 R 1383 0 R 1384 0 R 1385 0 R 1386 0 R] /Limits [(lstlisting.1.-162) (lstlisting.1.-21)] >> endobj 1479 0 obj << /Kids [1387 0 R 1388 0 R 1389 0 R 1390 0 R 1391 0 R 1392 0 R] /Limits [(lstlisting.1.-22) (lstlisting.1.-54)] >> endobj 1480 0 obj << /Kids [1393 0 R 1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R] /Limits [(lstlisting.1.-55) (lstlisting.1.-87)] >> endobj 1481 0 obj << /Kids [1399 0 R 1400 0 R 1401 0 R 1402 0 R 1403 0 R 1404 0 R] /Limits [(lstlisting.1.-88) (lstnumber.-107.2)] >> endobj 1482 0 obj << /Kids [1405 0 R 1406 0 R 1407 0 R 1408 0 R 1409 0 R 1410 0 R] /Limits [(lstnumber.-107.3) (lstnumber.-113.3)] >> endobj 1483 0 obj << /Kids [1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R 1416 0 R] /Limits [(lstnumber.-113.4) (lstnumber.-120.4)] >> endobj 1484 0 obj << /Kids [1417 0 R 1418 0 R 1419 0 R 1420 0 R 1421 0 R 1422 0 R] /Limits [(lstnumber.-121.1) (lstnumber.-128.4)] >> endobj 1485 0 obj << /Kids [1423 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R] /Limits [(lstnumber.-128.5) (lstnumber.-137.2)] >> endobj 1486 0 obj << /Kids [1429 0 R 1430 0 R 1431 0 R 1432 0 R 1433 0 R 1434 0 R] /Limits [(lstnumber.-137.3) (lstnumber.-144.2)] >> endobj 1487 0 obj << /Kids [1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R] /Limits [(lstnumber.-144.3) (lstnumber.-170.1)] >> endobj 1488 0 obj << /Kids [1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R] /Limits [(lstnumber.-171.1) (lstnumber.-30.1)] >> endobj 1489 0 obj << /Kids [1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R] /Limits [(lstnumber.-31.1) (lstnumber.-63.1)] >> endobj 1490 0 obj << /Kids [1453 0 R 1454 0 R 1455 0 R 1456 0 R 1457 0 R 1458 0 R] /Limits [(lstnumber.-64.1) (lstnumber.-96.1)] >> endobj 1491 0 obj << /Kids [1459 0 R 1460 0 R 1461 0 R 1462 0 R 1463 0 R 1464 0 R] /Limits [(lstnumber.-97.1) (page.39)] >> endobj 1492 0 obj << /Kids [1465 0 R 1466 0 R 1467 0 R 1468 0 R 1469 0 R] /Limits [(page.4) (section.1.5)] >> endobj 1493 0 obj << /Kids [1470 0 R 1471 0 R 1472 0 R 1473 0 R 1474 0 R 1475 0 R] /Limits [(Doc-Start) (gss-wrap-size-limit)] >> endobj 1494 0 obj << /Kids [1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R 1481 0 R] /Limits [(index) (lstnumber.-107.2)] >> endobj 1495 0 obj << /Kids [1482 0 R 1483 0 R 1484 0 R 1485 0 R 1486 0 R 1487 0 R] /Limits [(lstnumber.-107.3) (lstnumber.-170.1)] >> endobj 1496 0 obj << /Kids [1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R] /Limits [(lstnumber.-171.1) (section.1.5)] >> endobj 1497 0 obj << /Kids [1493 0 R 1494 0 R 1495 0 R 1496 0 R] /Limits [(Doc-Start) (section.1.5)] >> endobj 1498 0 obj << /Dests 1497 0 R >> endobj 1499 0 obj << /Type /Catalog /Pages 1331 0 R /Outlines 1332 0 R /Names 1498 0 R /PageMode/UseOutlines/PageLabels<>3<>]>> /OpenAction 29 0 R >> endobj 1500 0 obj << /Author()/Title(GNU Generic Security Service \(GSS\) API Reference Manual)/Subject()/Creator(DBLaTeX-0.3-2)/Producer(pdfTeX-1.40.10)/Keywords() /CreationDate (D:20111125005722+01'00') /ModDate (D:20111125005722+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian) kpathsea version 5.0.0) >> endobj xref 0 1501 0000000000 65535 f 0000000015 00000 n 0000006495 00000 n 0000336830 00000 n 0000000060 00000 n 0000000135 00000 n 0000006612 00000 n 0000336760 00000 n 0000000182 00000 n 0000000203 00000 n 0000009402 00000 n 0000336676 00000 n 0000000250 00000 n 0000000272 00000 n 0000165846 00000 n 0000336590 00000 n 0000000320 00000 n 0000000342 00000 n 0000169988 00000 n 0000336504 00000 n 0000000390 00000 n 0000000413 00000 n 0000178652 00000 n 0000336431 00000 n 0000000461 00000 n 0000000488 00000 n 0000196491 00000 n 0000336356 00000 n 0000000534 00000 n 0000000558 00000 n 0000000981 00000 n 0000001274 00000 n 0000000609 00000 n 0000001096 00000 n 0000334759 00000 n 0000334053 00000 n 0000001156 00000 n 0000001215 00000 n 0000333880 00000 n 0000334934 00000 n 0000002669 00000 n 0000002494 00000 n 0000001368 00000 n 0000002609 00000 n 0000334226 00000 n 0000003502 00000 n 0000003652 00000 n 0000003804 00000 n 0000003957 00000 n 0000004109 00000 n 0000004261 00000 n 0000004412 00000 n 0000004680 00000 n 0000003326 00000 n 0000002775 00000 n 0000004562 00000 n 0000004622 00000 n 0000334402 00000 n 0000006276 00000 n 0000007082 00000 n 0000006142 00000 n 0000004786 00000 n 0000006435 00000 n 0000006553 00000 n 0000006670 00000 n 0000006728 00000 n 0000333529 00000 n 0000006787 00000 n 0000006846 00000 n 0000006905 00000 n 0000006964 00000 n 0000007023 00000 n 0000166150 00000 n 0000009578 00000 n 0000008520 00000 n 0000007188 00000 n 0000008635 00000 n 0000008695 00000 n 0000008754 00000 n 0000008813 00000 n 0000008872 00000 n 0000008931 00000 n 0000008990 00000 n 0000009049 00000 n 0000009108 00000 n 0000009167 00000 n 0000009226 00000 n 0000009285 00000 n 0000009343 00000 n 0000009460 00000 n 0000009519 00000 n 0000010650 00000 n 0000010475 00000 n 0000009684 00000 n 0000010590 00000 n 0000011981 00000 n 0000011806 00000 n 0000010744 00000 n 0000011921 00000 n 0000335045 00000 n 0000013264 00000 n 0000013084 00000 n 0000012075 00000 n 0000013202 00000 n 0000014673 00000 n 0000014493 00000 n 0000013359 00000 n 0000014611 00000 n 0000015965 00000 n 0000015785 00000 n 0000014768 00000 n 0000015903 00000 n 0000019031 00000 n 0000017206 00000 n 0000016060 00000 n 0000017324 00000 n 0000017386 00000 n 0000017447 00000 n 0000017508 00000 n 0000017569 00000 n 0000017630 00000 n 0000017691 00000 n 0000017752 00000 n 0000017813 00000 n 0000017874 00000 n 0000017935 00000 n 0000017996 00000 n 0000018057 00000 n 0000018117 00000 n 0000018178 00000 n 0000018239 00000 n 0000018300 00000 n 0000018361 00000 n 0000018422 00000 n 0000018483 00000 n 0000018544 00000 n 0000018605 00000 n 0000018666 00000 n 0000018727 00000 n 0000018788 00000 n 0000018849 00000 n 0000018910 00000 n 0000018970 00000 n 0000022439 00000 n 0000020251 00000 n 0000019138 00000 n 0000020369 00000 n 0000020431 00000 n 0000020492 00000 n 0000020553 00000 n 0000020614 00000 n 0000020675 00000 n 0000020736 00000 n 0000020797 00000 n 0000020858 00000 n 0000020917 00000 n 0000020978 00000 n 0000021038 00000 n 0000021099 00000 n 0000021160 00000 n 0000021221 00000 n 0000021282 00000 n 0000021343 00000 n 0000021404 00000 n 0000021465 00000 n 0000021526 00000 n 0000021587 00000 n 0000021648 00000 n 0000021708 00000 n 0000021769 00000 n 0000021830 00000 n 0000021891 00000 n 0000021952 00000 n 0000022013 00000 n 0000022074 00000 n 0000022135 00000 n 0000022196 00000 n 0000022257 00000 n 0000022318 00000 n 0000022378 00000 n 0000025807 00000 n 0000023618 00000 n 0000022546 00000 n 0000023737 00000 n 0000023799 00000 n 0000023860 00000 n 0000023921 00000 n 0000023982 00000 n 0000024043 00000 n 0000024104 00000 n 0000024165 00000 n 0000024226 00000 n 0000024285 00000 n 0000024346 00000 n 0000024406 00000 n 0000024467 00000 n 0000024528 00000 n 0000024589 00000 n 0000024650 00000 n 0000024711 00000 n 0000024772 00000 n 0000024833 00000 n 0000024894 00000 n 0000024955 00000 n 0000025016 00000 n 0000025076 00000 n 0000025137 00000 n 0000025198 00000 n 0000025259 00000 n 0000025320 00000 n 0000025381 00000 n 0000025442 00000 n 0000025503 00000 n 0000025564 00000 n 0000025625 00000 n 0000025686 00000 n 0000025746 00000 n 0000335161 00000 n 0000029159 00000 n 0000026970 00000 n 0000025914 00000 n 0000027089 00000 n 0000027151 00000 n 0000027212 00000 n 0000027273 00000 n 0000027334 00000 n 0000027395 00000 n 0000027456 00000 n 0000027517 00000 n 0000027578 00000 n 0000027637 00000 n 0000027698 00000 n 0000027758 00000 n 0000027819 00000 n 0000027880 00000 n 0000027941 00000 n 0000028002 00000 n 0000028063 00000 n 0000028124 00000 n 0000028185 00000 n 0000028246 00000 n 0000028307 00000 n 0000028368 00000 n 0000028428 00000 n 0000028489 00000 n 0000028550 00000 n 0000028611 00000 n 0000028672 00000 n 0000028733 00000 n 0000028794 00000 n 0000028855 00000 n 0000028916 00000 n 0000028977 00000 n 0000029038 00000 n 0000029098 00000 n 0000032619 00000 n 0000030430 00000 n 0000029266 00000 n 0000030549 00000 n 0000030611 00000 n 0000030672 00000 n 0000030733 00000 n 0000030794 00000 n 0000030855 00000 n 0000030916 00000 n 0000030977 00000 n 0000031038 00000 n 0000031097 00000 n 0000031158 00000 n 0000031218 00000 n 0000031279 00000 n 0000031340 00000 n 0000031401 00000 n 0000031462 00000 n 0000031523 00000 n 0000031584 00000 n 0000031645 00000 n 0000031706 00000 n 0000031767 00000 n 0000031828 00000 n 0000031888 00000 n 0000031949 00000 n 0000032010 00000 n 0000032071 00000 n 0000032132 00000 n 0000032193 00000 n 0000032254 00000 n 0000032315 00000 n 0000032376 00000 n 0000032437 00000 n 0000032498 00000 n 0000032558 00000 n 0000036068 00000 n 0000033879 00000 n 0000032726 00000 n 0000033998 00000 n 0000034060 00000 n 0000034121 00000 n 0000034182 00000 n 0000034243 00000 n 0000034304 00000 n 0000034365 00000 n 0000034426 00000 n 0000034487 00000 n 0000034546 00000 n 0000034607 00000 n 0000034667 00000 n 0000034728 00000 n 0000034789 00000 n 0000034850 00000 n 0000034911 00000 n 0000034972 00000 n 0000035033 00000 n 0000035094 00000 n 0000035155 00000 n 0000035216 00000 n 0000035277 00000 n 0000035337 00000 n 0000035398 00000 n 0000035459 00000 n 0000035520 00000 n 0000035581 00000 n 0000035642 00000 n 0000035703 00000 n 0000035764 00000 n 0000035825 00000 n 0000035886 00000 n 0000035947 00000 n 0000036007 00000 n 0000039036 00000 n 0000037209 00000 n 0000036175 00000 n 0000037328 00000 n 0000037390 00000 n 0000037451 00000 n 0000037512 00000 n 0000037573 00000 n 0000037634 00000 n 0000037695 00000 n 0000037756 00000 n 0000037817 00000 n 0000037878 00000 n 0000037939 00000 n 0000038000 00000 n 0000038061 00000 n 0000038122 00000 n 0000038183 00000 n 0000038244 00000 n 0000038305 00000 n 0000038366 00000 n 0000038427 00000 n 0000333351 00000 n 0000038488 00000 n 0000038549 00000 n 0000038610 00000 n 0000038671 00000 n 0000038732 00000 n 0000038792 00000 n 0000038853 00000 n 0000038914 00000 n 0000038975 00000 n 0000042524 00000 n 0000040335 00000 n 0000039168 00000 n 0000040454 00000 n 0000040516 00000 n 0000040577 00000 n 0000040638 00000 n 0000040699 00000 n 0000040760 00000 n 0000040821 00000 n 0000040882 00000 n 0000040943 00000 n 0000041002 00000 n 0000041063 00000 n 0000041123 00000 n 0000041184 00000 n 0000041245 00000 n 0000041306 00000 n 0000041367 00000 n 0000041428 00000 n 0000041489 00000 n 0000041550 00000 n 0000041611 00000 n 0000041672 00000 n 0000041733 00000 n 0000041793 00000 n 0000041854 00000 n 0000041915 00000 n 0000041976 00000 n 0000042037 00000 n 0000042098 00000 n 0000042159 00000 n 0000042220 00000 n 0000042281 00000 n 0000042342 00000 n 0000042403 00000 n 0000042463 00000 n 0000046025 00000 n 0000043836 00000 n 0000042631 00000 n 0000043955 00000 n 0000044017 00000 n 0000044078 00000 n 0000044139 00000 n 0000044200 00000 n 0000044261 00000 n 0000044322 00000 n 0000044383 00000 n 0000044444 00000 n 0000044503 00000 n 0000044564 00000 n 0000044624 00000 n 0000044685 00000 n 0000044746 00000 n 0000044807 00000 n 0000044868 00000 n 0000044929 00000 n 0000044990 00000 n 0000045051 00000 n 0000045112 00000 n 0000045173 00000 n 0000045234 00000 n 0000045294 00000 n 0000045355 00000 n 0000045416 00000 n 0000045477 00000 n 0000045538 00000 n 0000045599 00000 n 0000045660 00000 n 0000045721 00000 n 0000045782 00000 n 0000045843 00000 n 0000045904 00000 n 0000045964 00000 n 0000335279 00000 n 0000048856 00000 n 0000049019 00000 n 0000050770 00000 n 0000048709 00000 n 0000046132 00000 n 0000049184 00000 n 0000049246 00000 n 0000049307 00000 n 0000049368 00000 n 0000049429 00000 n 0000049490 00000 n 0000049551 00000 n 0000049612 00000 n 0000049673 00000 n 0000049734 00000 n 0000049795 00000 n 0000049856 00000 n 0000049917 00000 n 0000049978 00000 n 0000050039 00000 n 0000050100 00000 n 0000050161 00000 n 0000050222 00000 n 0000050283 00000 n 0000050344 00000 n 0000050404 00000 n 0000050465 00000 n 0000050526 00000 n 0000050587 00000 n 0000050648 00000 n 0000050709 00000 n 0000054665 00000 n 0000070996 00000 n 0000054039 00000 n 0000054198 00000 n 0000055152 00000 n 0000053892 00000 n 0000050877 00000 n 0000054359 00000 n 0000334578 00000 n 0000054421 00000 n 0000054482 00000 n 0000054543 00000 n 0000054604 00000 n 0000054726 00000 n 0000054787 00000 n 0000054848 00000 n 0000333206 00000 n 0000333061 00000 n 0000054909 00000 n 0000054970 00000 n 0000055031 00000 n 0000055092 00000 n 0000114404 00000 n 0000062538 00000 n 0000059491 00000 n 0000058884 00000 n 0000055326 00000 n 0000059003 00000 n 0000059065 00000 n 0000059126 00000 n 0000059187 00000 n 0000059248 00000 n 0000059309 00000 n 0000059369 00000 n 0000059430 00000 n 0000062701 00000 n 0000066629 00000 n 0000062928 00000 n 0000062391 00000 n 0000059614 00000 n 0000062866 00000 n 0000138406 00000 n 0000066794 00000 n 0000067017 00000 n 0000066482 00000 n 0000063036 00000 n 0000066955 00000 n 0000084384 00000 n 0000110593 00000 n 0000070771 00000 n 0000071788 00000 n 0000070632 00000 n 0000067139 00000 n 0000070934 00000 n 0000071057 00000 n 0000071118 00000 n 0000071179 00000 n 0000071240 00000 n 0000071301 00000 n 0000071362 00000 n 0000071423 00000 n 0000071484 00000 n 0000071545 00000 n 0000071606 00000 n 0000071667 00000 n 0000071727 00000 n 0000335397 00000 n 0000075389 00000 n 0000075554 00000 n 0000075719 00000 n 0000075883 00000 n 0000080003 00000 n 0000076104 00000 n 0000075226 00000 n 0000071923 00000 n 0000076042 00000 n 0000110350 00000 n 0000080164 00000 n 0000080327 00000 n 0000080852 00000 n 0000079848 00000 n 0000076212 00000 n 0000080485 00000 n 0000080547 00000 n 0000080608 00000 n 0000080669 00000 n 0000080730 00000 n 0000080791 00000 n 0000083994 00000 n 0000084157 00000 n 0000088560 00000 n 0000085419 00000 n 0000083847 00000 n 0000080998 00000 n 0000084322 00000 n 0000084445 00000 n 0000084506 00000 n 0000084567 00000 n 0000084628 00000 n 0000084688 00000 n 0000084749 00000 n 0000084810 00000 n 0000084871 00000 n 0000084932 00000 n 0000084993 00000 n 0000085054 00000 n 0000085115 00000 n 0000085176 00000 n 0000085237 00000 n 0000085298 00000 n 0000085359 00000 n 0000088711 00000 n 0000088872 00000 n 0000089512 00000 n 0000088405 00000 n 0000085565 00000 n 0000089023 00000 n 0000089085 00000 n 0000089146 00000 n 0000089207 00000 n 0000089268 00000 n 0000089329 00000 n 0000089390 00000 n 0000089451 00000 n 0000093171 00000 n 0000092646 00000 n 0000092797 00000 n 0000092958 00000 n 0000094207 00000 n 0000092491 00000 n 0000089658 00000 n 0000093109 00000 n 0000093232 00000 n 0000093293 00000 n 0000093354 00000 n 0000093415 00000 n 0000093476 00000 n 0000093537 00000 n 0000093598 00000 n 0000093659 00000 n 0000093720 00000 n 0000093781 00000 n 0000093842 00000 n 0000093903 00000 n 0000093964 00000 n 0000094025 00000 n 0000094086 00000 n 0000094147 00000 n 0000097570 00000 n 0000098280 00000 n 0000097431 00000 n 0000094381 00000 n 0000097731 00000 n 0000097793 00000 n 0000097854 00000 n 0000097915 00000 n 0000097976 00000 n 0000098037 00000 n 0000098098 00000 n 0000098158 00000 n 0000098219 00000 n 0000335515 00000 n 0000101109 00000 n 0000101270 00000 n 0000101431 00000 n 0000101590 00000 n 0000102423 00000 n 0000100946 00000 n 0000098426 00000 n 0000101751 00000 n 0000101813 00000 n 0000101874 00000 n 0000101935 00000 n 0000101996 00000 n 0000102057 00000 n 0000102118 00000 n 0000102179 00000 n 0000102240 00000 n 0000102301 00000 n 0000102362 00000 n 0000105653 00000 n 0000105813 00000 n 0000106764 00000 n 0000105506 00000 n 0000102569 00000 n 0000105971 00000 n 0000106033 00000 n 0000106094 00000 n 0000106155 00000 n 0000106216 00000 n 0000106277 00000 n 0000106337 00000 n 0000333702 00000 n 0000106398 00000 n 0000106459 00000 n 0000106520 00000 n 0000106581 00000 n 0000106642 00000 n 0000106703 00000 n 0000109498 00000 n 0000109661 00000 n 0000109823 00000 n 0000113860 00000 n 0000110837 00000 n 0000109343 00000 n 0000106952 00000 n 0000109984 00000 n 0000110046 00000 n 0000110107 00000 n 0000110168 00000 n 0000110229 00000 n 0000110290 00000 n 0000110410 00000 n 0000110471 00000 n 0000110532 00000 n 0000110654 00000 n 0000110715 00000 n 0000110776 00000 n 0000147770 00000 n 0000114022 00000 n 0000114180 00000 n 0000115800 00000 n 0000113705 00000 n 0000110997 00000 n 0000114342 00000 n 0000114465 00000 n 0000114525 00000 n 0000114586 00000 n 0000114646 00000 n 0000114707 00000 n 0000114768 00000 n 0000114829 00000 n 0000114890 00000 n 0000114951 00000 n 0000115012 00000 n 0000115073 00000 n 0000115134 00000 n 0000115195 00000 n 0000115256 00000 n 0000115317 00000 n 0000115378 00000 n 0000115439 00000 n 0000115500 00000 n 0000115561 00000 n 0000115622 00000 n 0000115683 00000 n 0000115744 00000 n 0000119293 00000 n 0000119458 00000 n 0000119617 00000 n 0000119775 00000 n 0000119999 00000 n 0000119130 00000 n 0000115946 00000 n 0000119937 00000 n 0000123252 00000 n 0000124752 00000 n 0000123113 00000 n 0000120107 00000 n 0000123414 00000 n 0000123476 00000 n 0000123537 00000 n 0000123598 00000 n 0000123659 00000 n 0000123720 00000 n 0000123781 00000 n 0000123842 00000 n 0000123903 00000 n 0000123964 00000 n 0000124025 00000 n 0000124086 00000 n 0000124147 00000 n 0000124208 00000 n 0000124269 00000 n 0000124330 00000 n 0000124391 00000 n 0000124452 00000 n 0000124513 00000 n 0000124574 00000 n 0000124635 00000 n 0000124696 00000 n 0000335633 00000 n 0000128586 00000 n 0000128749 00000 n 0000128914 00000 n 0000129073 00000 n 0000129228 00000 n 0000129386 00000 n 0000133172 00000 n 0000129603 00000 n 0000128407 00000 n 0000124926 00000 n 0000129541 00000 n 0000133331 00000 n 0000133493 00000 n 0000134261 00000 n 0000133017 00000 n 0000129711 00000 n 0000133651 00000 n 0000133713 00000 n 0000133774 00000 n 0000133835 00000 n 0000133896 00000 n 0000133957 00000 n 0000134018 00000 n 0000134078 00000 n 0000134139 00000 n 0000134200 00000 n 0000137854 00000 n 0000138018 00000 n 0000138179 00000 n 0000139015 00000 n 0000137699 00000 n 0000134407 00000 n 0000138344 00000 n 0000138467 00000 n 0000138528 00000 n 0000138589 00000 n 0000138650 00000 n 0000138710 00000 n 0000138771 00000 n 0000138832 00000 n 0000138893 00000 n 0000138954 00000 n 0000141754 00000 n 0000141919 00000 n 0000142079 00000 n 0000142245 00000 n 0000142406 00000 n 0000142565 00000 n 0000143701 00000 n 0000141575 00000 n 0000139189 00000 n 0000142724 00000 n 0000142786 00000 n 0000142847 00000 n 0000142908 00000 n 0000142969 00000 n 0000143030 00000 n 0000143091 00000 n 0000143152 00000 n 0000143213 00000 n 0000143274 00000 n 0000143335 00000 n 0000143396 00000 n 0000143457 00000 n 0000143518 00000 n 0000143579 00000 n 0000143640 00000 n 0000146613 00000 n 0000146775 00000 n 0000146937 00000 n 0000150494 00000 n 0000148135 00000 n 0000146458 00000 n 0000143847 00000 n 0000147098 00000 n 0000147160 00000 n 0000147221 00000 n 0000147282 00000 n 0000147343 00000 n 0000147404 00000 n 0000147465 00000 n 0000147526 00000 n 0000147587 00000 n 0000147648 00000 n 0000147709 00000 n 0000147831 00000 n 0000147892 00000 n 0000147953 00000 n 0000148014 00000 n 0000148075 00000 n 0000150653 00000 n 0000152029 00000 n 0000150347 00000 n 0000148295 00000 n 0000150812 00000 n 0000150874 00000 n 0000150935 00000 n 0000150996 00000 n 0000151057 00000 n 0000151118 00000 n 0000151179 00000 n 0000151240 00000 n 0000151301 00000 n 0000151362 00000 n 0000151423 00000 n 0000151484 00000 n 0000151545 00000 n 0000151605 00000 n 0000151666 00000 n 0000151726 00000 n 0000151787 00000 n 0000151846 00000 n 0000151907 00000 n 0000151968 00000 n 0000335751 00000 n 0000154697 00000 n 0000153480 00000 n 0000152189 00000 n 0000153599 00000 n 0000153661 00000 n 0000153722 00000 n 0000153783 00000 n 0000153844 00000 n 0000153905 00000 n 0000153966 00000 n 0000154027 00000 n 0000154088 00000 n 0000154149 00000 n 0000154210 00000 n 0000154271 00000 n 0000154332 00000 n 0000154393 00000 n 0000154454 00000 n 0000154514 00000 n 0000154575 00000 n 0000154636 00000 n 0000157214 00000 n 0000157375 00000 n 0000157535 00000 n 0000159035 00000 n 0000157059 00000 n 0000154871 00000 n 0000157696 00000 n 0000157758 00000 n 0000157819 00000 n 0000157880 00000 n 0000157941 00000 n 0000158002 00000 n 0000158063 00000 n 0000158124 00000 n 0000158185 00000 n 0000158246 00000 n 0000158307 00000 n 0000158368 00000 n 0000158429 00000 n 0000158489 00000 n 0000158550 00000 n 0000158610 00000 n 0000158671 00000 n 0000158731 00000 n 0000158792 00000 n 0000158853 00000 n 0000158914 00000 n 0000158974 00000 n 0000161349 00000 n 0000165156 00000 n 0000162669 00000 n 0000161210 00000 n 0000159195 00000 n 0000161510 00000 n 0000161572 00000 n 0000161633 00000 n 0000161694 00000 n 0000161755 00000 n 0000161816 00000 n 0000161877 00000 n 0000161938 00000 n 0000161999 00000 n 0000162060 00000 n 0000162121 00000 n 0000162182 00000 n 0000162243 00000 n 0000162304 00000 n 0000162365 00000 n 0000162426 00000 n 0000162487 00000 n 0000162547 00000 n 0000162608 00000 n 0000165320 00000 n 0000166332 00000 n 0000165009 00000 n 0000162815 00000 n 0000165480 00000 n 0000165542 00000 n 0000165603 00000 n 0000165664 00000 n 0000165725 00000 n 0000165786 00000 n 0000165906 00000 n 0000165967 00000 n 0000166028 00000 n 0000166089 00000 n 0000166210 00000 n 0000166271 00000 n 0000168247 00000 n 0000170107 00000 n 0000168108 00000 n 0000166492 00000 n 0000168404 00000 n 0000168466 00000 n 0000168527 00000 n 0000168588 00000 n 0000168649 00000 n 0000168710 00000 n 0000168771 00000 n 0000168832 00000 n 0000168893 00000 n 0000168954 00000 n 0000169015 00000 n 0000169076 00000 n 0000169137 00000 n 0000169198 00000 n 0000169259 00000 n 0000169320 00000 n 0000169381 00000 n 0000169440 00000 n 0000169501 00000 n 0000169562 00000 n 0000169623 00000 n 0000169684 00000 n 0000169745 00000 n 0000169806 00000 n 0000169866 00000 n 0000169927 00000 n 0000170047 00000 n 0000172645 00000 n 0000171360 00000 n 0000170267 00000 n 0000171480 00000 n 0000171542 00000 n 0000171603 00000 n 0000171664 00000 n 0000171725 00000 n 0000171786 00000 n 0000171847 00000 n 0000171908 00000 n 0000171969 00000 n 0000172030 00000 n 0000172091 00000 n 0000172152 00000 n 0000172213 00000 n 0000172273 00000 n 0000172335 00000 n 0000172397 00000 n 0000172459 00000 n 0000172521 00000 n 0000172583 00000 n 0000335869 00000 n 0000176156 00000 n 0000173895 00000 n 0000172752 00000 n 0000174018 00000 n 0000174082 00000 n 0000174145 00000 n 0000174208 00000 n 0000174271 00000 n 0000174334 00000 n 0000174397 00000 n 0000174460 00000 n 0000174523 00000 n 0000174584 00000 n 0000174647 00000 n 0000174709 00000 n 0000174772 00000 n 0000174835 00000 n 0000174898 00000 n 0000174961 00000 n 0000175024 00000 n 0000175087 00000 n 0000175150 00000 n 0000175213 00000 n 0000175276 00000 n 0000175339 00000 n 0000175401 00000 n 0000175464 00000 n 0000175527 00000 n 0000175590 00000 n 0000175653 00000 n 0000175716 00000 n 0000175779 00000 n 0000175842 00000 n 0000175905 00000 n 0000175968 00000 n 0000176031 00000 n 0000176093 00000 n 0000179151 00000 n 0000177331 00000 n 0000176264 00000 n 0000177454 00000 n 0000177518 00000 n 0000177581 00000 n 0000177644 00000 n 0000177707 00000 n 0000177770 00000 n 0000177833 00000 n 0000177896 00000 n 0000177959 00000 n 0000178022 00000 n 0000178085 00000 n 0000178148 00000 n 0000178211 00000 n 0000178274 00000 n 0000178337 00000 n 0000178400 00000 n 0000178463 00000 n 0000178526 00000 n 0000178589 00000 n 0000178713 00000 n 0000178776 00000 n 0000178839 00000 n 0000178902 00000 n 0000178965 00000 n 0000179027 00000 n 0000179088 00000 n 0000181396 00000 n 0000180075 00000 n 0000179259 00000 n 0000180198 00000 n 0000180262 00000 n 0000180325 00000 n 0000180388 00000 n 0000180451 00000 n 0000180514 00000 n 0000180577 00000 n 0000180640 00000 n 0000180703 00000 n 0000180766 00000 n 0000180829 00000 n 0000180892 00000 n 0000180955 00000 n 0000181018 00000 n 0000181081 00000 n 0000181144 00000 n 0000181207 00000 n 0000181270 00000 n 0000181333 00000 n 0000183657 00000 n 0000183808 00000 n 0000183959 00000 n 0000184110 00000 n 0000184260 00000 n 0000184410 00000 n 0000184560 00000 n 0000184709 00000 n 0000184859 00000 n 0000185010 00000 n 0000185160 00000 n 0000185310 00000 n 0000185460 00000 n 0000185611 00000 n 0000185761 00000 n 0000185912 00000 n 0000186062 00000 n 0000186213 00000 n 0000186363 00000 n 0000186513 00000 n 0000186664 00000 n 0000186814 00000 n 0000186964 00000 n 0000187113 00000 n 0000187264 00000 n 0000187415 00000 n 0000187566 00000 n 0000187717 00000 n 0000187867 00000 n 0000188017 00000 n 0000188168 00000 n 0000188317 00000 n 0000188467 00000 n 0000188615 00000 n 0000188765 00000 n 0000188915 00000 n 0000189066 00000 n 0000189216 00000 n 0000189365 00000 n 0000189515 00000 n 0000189665 00000 n 0000189814 00000 n 0000189963 00000 n 0000190113 00000 n 0000190264 00000 n 0000190415 00000 n 0000190565 00000 n 0000190716 00000 n 0000190867 00000 n 0000191017 00000 n 0000191167 00000 n 0000191318 00000 n 0000191468 00000 n 0000191618 00000 n 0000191768 00000 n 0000191918 00000 n 0000192069 00000 n 0000192219 00000 n 0000192370 00000 n 0000192520 00000 n 0000192671 00000 n 0000192821 00000 n 0000192970 00000 n 0000193121 00000 n 0000193270 00000 n 0000193421 00000 n 0000193570 00000 n 0000193721 00000 n 0000193872 00000 n 0000194021 00000 n 0000194172 00000 n 0000194322 00000 n 0000194472 00000 n 0000194623 00000 n 0000194774 00000 n 0000194925 00000 n 0000195075 00000 n 0000195226 00000 n 0000195376 00000 n 0000195527 00000 n 0000195678 00000 n 0000195828 00000 n 0000195979 00000 n 0000196130 00000 n 0000196279 00000 n 0000199282 00000 n 0000196551 00000 n 0000182757 00000 n 0000181504 00000 n 0000196427 00000 n 0000199432 00000 n 0000199582 00000 n 0000199732 00000 n 0000199883 00000 n 0000200034 00000 n 0000200185 00000 n 0000200336 00000 n 0000200485 00000 n 0000200636 00000 n 0000200786 00000 n 0000200937 00000 n 0000201087 00000 n 0000201238 00000 n 0000201389 00000 n 0000201539 00000 n 0000201690 00000 n 0000201840 00000 n 0000201991 00000 n 0000202141 00000 n 0000202292 00000 n 0000202443 00000 n 0000202594 00000 n 0000202745 00000 n 0000202895 00000 n 0000203045 00000 n 0000203195 00000 n 0000203345 00000 n 0000203496 00000 n 0000203645 00000 n 0000203796 00000 n 0000203945 00000 n 0000204096 00000 n 0000204246 00000 n 0000204397 00000 n 0000204547 00000 n 0000204698 00000 n 0000204848 00000 n 0000204998 00000 n 0000205149 00000 n 0000205299 00000 n 0000205450 00000 n 0000205600 00000 n 0000205751 00000 n 0000205902 00000 n 0000206053 00000 n 0000206203 00000 n 0000206354 00000 n 0000206505 00000 n 0000206656 00000 n 0000206807 00000 n 0000206958 00000 n 0000207109 00000 n 0000207259 00000 n 0000207410 00000 n 0000207559 00000 n 0000207706 00000 n 0000207857 00000 n 0000208008 00000 n 0000208158 00000 n 0000208309 00000 n 0000208460 00000 n 0000208611 00000 n 0000208762 00000 n 0000208912 00000 n 0000209063 00000 n 0000209212 00000 n 0000209363 00000 n 0000209513 00000 n 0000209664 00000 n 0000209815 00000 n 0000209966 00000 n 0000210117 00000 n 0000210268 00000 n 0000210419 00000 n 0000210569 00000 n 0000210720 00000 n 0000210871 00000 n 0000211022 00000 n 0000211172 00000 n 0000211323 00000 n 0000211474 00000 n 0000211624 00000 n 0000211775 00000 n 0000211925 00000 n 0000212076 00000 n 0000212226 00000 n 0000212377 00000 n 0000212527 00000 n 0000212677 00000 n 0000212828 00000 n 0000212979 00000 n 0000213130 00000 n 0000213280 00000 n 0000213430 00000 n 0000213580 00000 n 0000213731 00000 n 0000213881 00000 n 0000214032 00000 n 0000214181 00000 n 0000214331 00000 n 0000214481 00000 n 0000214631 00000 n 0000214781 00000 n 0000214931 00000 n 0000215082 00000 n 0000215233 00000 n 0000215444 00000 n 0000198184 00000 n 0000196659 00000 n 0000215380 00000 n 0000332597 00000 n 0000215540 00000 n 0000215868 00000 n 0000215894 00000 n 0000215919 00000 n 0000216083 00000 n 0000216399 00000 n 0000216791 00000 n 0000217140 00000 n 0000217244 00000 n 0000217596 00000 n 0000217945 00000 n 0000218522 00000 n 0000225540 00000 n 0000225777 00000 n 0000232836 00000 n 0000233068 00000 n 0000242371 00000 n 0000242673 00000 n 0000260698 00000 n 0000261204 00000 n 0000269474 00000 n 0000269766 00000 n 0000281246 00000 n 0000281649 00000 n 0000289564 00000 n 0000289954 00000 n 0000294117 00000 n 0000294381 00000 n 0000304571 00000 n 0000304898 00000 n 0000311300 00000 n 0000311553 00000 n 0000332018 00000 n 0000335993 00000 n 0000336111 00000 n 0000336208 00000 n 0000336281 00000 n 0000336939 00000 n 0000337185 00000 n 0000337449 00000 n 0000337709 00000 n 0000337973 00000 n 0000338265 00000 n 0000338546 00000 n 0000338836 00000 n 0000339135 00000 n 0000339509 00000 n 0000339824 00000 n 0000340143 00000 n 0000340487 00000 n 0000340886 00000 n 0000341250 00000 n 0000341596 00000 n 0000341977 00000 n 0000342278 00000 n 0000342545 00000 n 0000342869 00000 n 0000343203 00000 n 0000343475 00000 n 0000343771 00000 n 0000344001 00000 n 0000344218 00000 n 0000344470 00000 n 0000344715 00000 n 0000344969 00000 n 0000345231 00000 n 0000345469 00000 n 0000345703 00000 n 0000345991 00000 n 0000346283 00000 n 0000346534 00000 n 0000346775 00000 n 0000346997 00000 n 0000347212 00000 n 0000347421 00000 n 0000347672 00000 n 0000347922 00000 n 0000348173 00000 n 0000348423 00000 n 0000348674 00000 n 0000348923 00000 n 0000349172 00000 n 0000349423 00000 n 0000349673 00000 n 0000349924 00000 n 0000350174 00000 n 0000350427 00000 n 0000350682 00000 n 0000350939 00000 n 0000351194 00000 n 0000351451 00000 n 0000351696 00000 n 0000351939 00000 n 0000352180 00000 n 0000352423 00000 n 0000352664 00000 n 0000352907 00000 n 0000353147 00000 n 0000353388 00000 n 0000353631 00000 n 0000353873 00000 n 0000354116 00000 n 0000354358 00000 n 0000354601 00000 n 0000354843 00000 n 0000355086 00000 n 0000355325 00000 n 0000355568 00000 n 0000355811 00000 n 0000356058 00000 n 0000356301 00000 n 0000356546 00000 n 0000356789 00000 n 0000357031 00000 n 0000357274 00000 n 0000357517 00000 n 0000357760 00000 n 0000358003 00000 n 0000358246 00000 n 0000358489 00000 n 0000358732 00000 n 0000358974 00000 n 0000359217 00000 n 0000359460 00000 n 0000359703 00000 n 0000359946 00000 n 0000360189 00000 n 0000360434 00000 n 0000360677 00000 n 0000360920 00000 n 0000361161 00000 n 0000361404 00000 n 0000361647 00000 n 0000361890 00000 n 0000362133 00000 n 0000362375 00000 n 0000362618 00000 n 0000362861 00000 n 0000363104 00000 n 0000363347 00000 n 0000363590 00000 n 0000363831 00000 n 0000364074 00000 n 0000364315 00000 n 0000364558 00000 n 0000364805 00000 n 0000365054 00000 n 0000365301 00000 n 0000365550 00000 n 0000365791 00000 n 0000366026 00000 n 0000366259 00000 n 0000366494 00000 n 0000366727 00000 n 0000366962 00000 n 0000367195 00000 n 0000367430 00000 n 0000367664 00000 n 0000367899 00000 n 0000368132 00000 n 0000368365 00000 n 0000368600 00000 n 0000368834 00000 n 0000369069 00000 n 0000369270 00000 n 0000369441 00000 n 0000369610 00000 n 0000369781 00000 n 0000369950 00000 n 0000370121 00000 n 0000370289 00000 n 0000370461 00000 n 0000370629 00000 n 0000370808 00000 n 0000370921 00000 n 0000371052 00000 n 0000371217 00000 n 0000371376 00000 n 0000371506 00000 n 0000371649 00000 n 0000371788 00000 n 0000371912 00000 n 0000372047 00000 n 0000372182 00000 n 0000372316 00000 n 0000372450 00000 n 0000372584 00000 n 0000372718 00000 n 0000372852 00000 n 0000372986 00000 n 0000373120 00000 n 0000373254 00000 n 0000373388 00000 n 0000373521 00000 n 0000373653 00000 n 0000373785 00000 n 0000373909 00000 n 0000374019 00000 n 0000374149 00000 n 0000374272 00000 n 0000374406 00000 n 0000374526 00000 n 0000374630 00000 n 0000374670 00000 n 0000374841 00000 n trailer << /Size 1501 /Root 1499 0 R /Info 1500 0 R /ID [<04A1DDDCAB093D5A37ED4D7A58A35DB0> <04A1DDDCAB093D5A37ED4D7A58A35DB0>] >> startxref 375211 %%EOF gss-1.0.2/doc/reference/Makefile.in0000644000000000000000000010250611663554705013765 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -*- mode: makefile -*- #################################### # Everything below here is generic # #################################### VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/version.xml.in $(top_srcdir)/gtk-doc.make subdir = doc/reference ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = version.xml CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # We require automake 1.6 at least. AUTOMAKE_OPTIONS = 1.6 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE = $(PACKAGE) # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml # Directories containing the source code. # gtk-doc will search all .c and .h files beneath these paths # for inline comments documenting functions and macros. # e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk DOC_SOURCE_DIR = $(top_srcdir)/lib # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS = # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS = # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml MKDB_OPTIONS = --xml-mode --output-format=xml # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS = # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS = # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS = # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB = $(top_srcdir)/lib/*.h CFILE_GLOB = $(top_srcdir)/lib/*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES = # Header files or dirs to ignore when scanning. Use base file/dir names # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code IGNORE_HFILES = internal.h k5internal.h protos.h checksum.h meta.h \ gettext.h string.h string.in.h unistd.h unistd.in.h c++defs.h \ stddef.in.h # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES = # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files = # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files = # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS = GTKDOC_LIBS = @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt # This includes the standard gtk-doc make rules, copied by gtkdocize. # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) DOC_STAMPS = setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ tmpl.stamp sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP = @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP = @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt #DISTCLEANFILES += # Comment this out if you want 'make check' to test you doc status # and run some sanity checks @ENABLE_GTK_DOC_TRUE@TESTS_ENVIRONMENT = cd $(srcdir) && \ @ENABLE_GTK_DOC_TRUE@ DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \ @ENABLE_GTK_DOC_TRUE@ SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/reference/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/reference/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local dist-hook distclean \ distclean-generic distclean-libtool distclean-local distdir \ dvi dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-local @ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) @ENABLE_GTK_DOC_FALSE@all-local: docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp #### setup #### setup-build.stamp: -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ echo ' DOC Preparing build'; \ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ test -f $(abs_srcdir)/$$file && \ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ done; \ fi; \ test -d $(abs_srcdir)/tmpl && \ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \ chmod -R u+w $(abs_builddir)/tmpl; } \ fi @touch setup-build.stamp #### scan #### scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) @echo ' DOC Scanning header files' @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ echo " DOC Introspecting gobjects"; \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi @touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### templates #### tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt @echo ' DOC Rebuilding template files' @gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ if test -w $(abs_srcdir) ; then \ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \ fi \ fi @touch tmpl-build.stamp tmpl.stamp: tmpl-build.stamp @true $(srcdir)/tmpl/*.sgml: @true #### xml #### sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files) @echo ' DOC Building XML' @-chmod -R u+w $(srcdir) @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) @touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true #### html #### html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building HTML' @rm -rf html @mkdir html @mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$(?)" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ if test -f $(abs_srcdir)/$$file ; then \ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ fi; \ if test -f $(abs_builddir)/$$file ; then \ cp $(abs_builddir)/$$file $(abs_builddir)/html; \ fi; \ done; @echo ' DOC Fixing cross-references' @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) @touch html-build.stamp #### pdf #### pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building PDF' @rm -f $(DOC_MODULE).pdf @mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) @touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ rm -rf tmpl; \ fi maintainer-clean-local: clean @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # @ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: @ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc: @ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist" @ENABLE_GTK_DOC_FALSE@ @false dist-hook: dist-check-gtkdoc dist-hook-local @mkdir $(distdir)/tmpl @mkdir $(distdir)/html @-cp ./tmpl/*.sgml $(distdir)/tmpl @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs #TESTS = $(GTKDOC_CHECK) -include $(top_srcdir)/git.mk # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/doc/reference/html/0000755000000000000000000000000011663555057012741 500000000000000gss-1.0.2/doc/reference/html/gss-gss.html0000644000000000000000000001164411663555057015143 00000000000000 gss

gss

gss

Synopsis

#define             GSS_VERSION
#define             GSS_VERSION_MAJOR
#define             GSS_VERSION_MINOR
#define             GSS_VERSION_PATCH
#define             GSS_VERSION_NUMBER

Description

Details

GSS_VERSION

# define GSS_VERSION "1.0.2"

Pre-processor symbol with a string that describe the header file version number. Used together with gss_check_version() to verify header file and run-time library consistency.


GSS_VERSION_MAJOR

# define GSS_VERSION_MAJOR 1

Pre-processor symbol with a decimal value that describe the major level of the header file version number. For example, when the header version is 1.2.3 this symbol will be 1.


GSS_VERSION_MINOR

# define GSS_VERSION_MINOR 0

Pre-processor symbol with a decimal value that describe the minor level of the header file version number. For example, when the header version is 1.2.3 this symbol will be 2.


GSS_VERSION_PATCH

# define GSS_VERSION_PATCH 2

Pre-processor symbol with a decimal value that describe the patch level of the header file version number. For example, when the header version is 1.2.3 this symbol will be 3.


GSS_VERSION_NUMBER

# define GSS_VERSION_NUMBER 0x010002

Pre-processor symbol with a hexadecimal value describing the header file version number. For example, when the header version is 1.2.3 this symbol will have the value 0x010203.

gss-1.0.2/doc/reference/html/up.png0000644000000000000000000000062611663555057014017 00000000000000PNG  IHDRw=bKGD pHYs  ~tIME2.E#IDATx=J@Fo] !+2[Z<@/9|t$D9nnBjBRIsI:H8UPN1fcsN95M㧖ɵ 束1~pEe$I 7nrDf!;`'ykI䲤sI_]y^^I>O>?YBIENDB`gss-1.0.2/doc/reference/html/index.sgml0000644000000000000000000004240511663555057014661 00000000000000 gss-1.0.2/doc/reference/html/right.png0000644000000000000000000000073011663555057014504 00000000000000PNG  IHDRw=bKGD pHYs  ~tIME2 I%=eIDATx!o@.'**M0$$?1~vIeEuLl&4䝠Bݛ|>$ݶoc+%<7W :2IENDB`gss-1.0.2/doc/reference/html/gss-ext.html0000644000000000000000000002122211663555057015140 00000000000000 ext

ext

ext

Synopsis

const char *        gss_check_version                   (const char *req_version);
int                 gss_userok                          (const gss_name_t name,
                                                         const char *username);
extern              gss_OID_desc GSS_C_NT_USER_NAME_static;
extern              gss_OID_desc GSS_C_NT_MACHINE_UID_NAME_static;
extern              gss_OID_desc GSS_C_NT_STRING_UID_NAME_static;
extern              gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_X_static;
extern              gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_static;
extern              gss_OID_desc GSS_C_NT_ANONYMOUS_static;
extern              gss_OID_desc GSS_C_NT_EXPORT_NAME_static;

Description

Details

gss_check_version ()

const char *        gss_check_version                   (const char *req_version);

Check that the version of the library is at minimum the one given as a string in req_version.

WARNING: This function is a GNU GSS specific extension, and is not part of the official GSS API.

req_version :

version string to compare with, or NULL

Returns :

The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned.

gss_userok ()

int                 gss_userok                          (const gss_name_t name,
                                                         const char *username);

Compare the username against the output from gss_export_name() invoked on name, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal

WARNING: This function is a GNU GSS specific extension, and is not part of the official GSS API.

name :

(gss_name_t, read) Name to be compared.

username :

Zero terminated string with username.

Returns :

Returns 0 if the names match, non-0 otherwise.

GSS_C_NT_USER_NAME_static

extern gss_OID_desc GSS_C_NT_USER_NAME_static;


GSS_C_NT_MACHINE_UID_NAME_static

extern gss_OID_desc GSS_C_NT_MACHINE_UID_NAME_static;


GSS_C_NT_STRING_UID_NAME_static

extern gss_OID_desc GSS_C_NT_STRING_UID_NAME_static;


GSS_C_NT_HOSTBASED_SERVICE_X_static

extern gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_X_static;


GSS_C_NT_HOSTBASED_SERVICE_static

extern gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_static;


GSS_C_NT_ANONYMOUS_static

extern gss_OID_desc GSS_C_NT_ANONYMOUS_static;


GSS_C_NT_EXPORT_NAME_static

extern gss_OID_desc GSS_C_NT_EXPORT_NAME_static;

gss-1.0.2/doc/reference/html/gss.devhelp0000644000000000000000000004203511663555057015032 00000000000000 gss-1.0.2/doc/reference/html/left.png0000644000000000000000000000071311663555057014322 00000000000000PNG  IHDRw=bKGD pHYs  ~tIME1&[(XIDATx!OPE*ID%~ꊯ"p'ŏ`sܖrKf hmiIz}ܯI.p\`x l?l[,Hk<#c%\AUx[S7n6rzEs1j@NL$ݤi0 5/}\EKIo͓$a0jdFbkIAh>WlC'?tk;|/t*INZ^`y4Nr]׮ J<ڐt`X1@p䀸dZ')hK $V?%]+LsgUK"w53OIENDB`gss-1.0.2/doc/reference/html/style.css0000644000000000000000000001205611663555057014537 00000000000000.synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; border: solid 1px #d3d7cf; padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ background: #e6f3ff; border: solid 1px #729fcf; padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } @media screen { sup a.footnote { position: relative; top: 0em ! important; } /* this is needed so that the local anchors are displayed below the naviagtion */ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] { position: relative; padding-top:4.5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 3.2em; padding-bottom: 20em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; z-index: 10; } .navigation a, .navigation a:visited { /* tango:scarlet red 3 */ color: #a40000; } .navigation a:hover { /* tango:scarlet red 1 */ color: #ef2929; } td.shortcuts { /* tango:scarlet red 1 */ color: #ef2929; font-size: 80%; white-space: nowrap; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } .navigation .title { font-size: 200%; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } hr { /* tango:aluminium 3 */ color: #babdb6; background: #babdb6; border: none 0px; height: 1px; clear: both; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .warning { /* tango:orange 0/1 */ background: #ffeed9; border-color: #ffb04f; } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; border-color: #abf562; } .note, .warning { padding: 0.5em; border-width: 1px; border-style: solid; } .note h3, .warning h3 { margin-top: 0.0em } .note p, .warning p { margin-bottom: 0.0em } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-size: 80%; font-weight: normal; } /* code listings */ .listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */ .listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */ .listing_code .programlisting .function { color: #000000; font-weight: bold; } .listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */ .listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */ .listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */ .listing_code .programlisting .normal { color: #000000; } .listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */ .listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */ .listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */ .listing_code .programlisting .type { color: #000000; } .listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */ .listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */ .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; } .listing_lines pre, .listing_code pre { margin: 0px; } gss-1.0.2/doc/reference/html/gss-krb5.html0000644000000000000000000002542211663555057015211 00000000000000 krb5

krb5

krb5

Description

Details

GSS_KRB5_S_G_BAD_SERVICE_NAME

#define GSS_KRB5_S_G_BAD_SERVICE_NAME 1


GSS_KRB5_S_G_BAD_STRING_UID

#define GSS_KRB5_S_G_BAD_STRING_UID 2


GSS_KRB5_S_G_NOUSER

#define GSS_KRB5_S_G_NOUSER 3


GSS_KRB5_S_G_VALIDATE_FAILED

#define GSS_KRB5_S_G_VALIDATE_FAILED 4


GSS_KRB5_S_G_BUFFER_ALLOC

#define GSS_KRB5_S_G_BUFFER_ALLOC 5


GSS_KRB5_S_G_BAD_MSG_CTX

#define GSS_KRB5_S_G_BAD_MSG_CTX 6


GSS_KRB5_S_G_WRONG_SIZE

#define GSS_KRB5_S_G_WRONG_SIZE 7


GSS_KRB5_S_G_BAD_USAGE

#define GSS_KRB5_S_G_BAD_USAGE 8


GSS_KRB5_S_G_UNKNOWN_QOP

#define GSS_KRB5_S_G_UNKNOWN_QOP 9


GSS_KRB5_S_KG_CCACHE_NOMATCH

#define GSS_KRB5_S_KG_CCACHE_NOMATCH 10


GSS_KRB5_S_KG_KEYTAB_NOMATCH

#define GSS_KRB5_S_KG_KEYTAB_NOMATCH 11


GSS_KRB5_S_KG_TGT_MISSING

#define GSS_KRB5_S_KG_TGT_MISSING 12


GSS_KRB5_S_KG_NO_SUBKEY

#define GSS_KRB5_S_KG_NO_SUBKEY 13


GSS_KRB5_S_KG_CONTEXT_ESTABLISHED

#define GSS_KRB5_S_KG_CONTEXT_ESTABLISHED 14


GSS_KRB5_S_KG_BAD_SIGN_TYPE

#define GSS_KRB5_S_KG_BAD_SIGN_TYPE 15


GSS_KRB5_S_KG_BAD_LENGTH

#define GSS_KRB5_S_KG_BAD_LENGTH 16


GSS_KRB5_S_KG_CTX_INCOMPLETE

#define GSS_KRB5_S_KG_CTX_INCOMPLETE 17


GSS_KRB5_NT_USER_NAME

extern gss_OID GSS_KRB5_NT_USER_NAME;


GSS_KRB5_NT_HOSTBASED_SERVICE_NAME

extern gss_OID GSS_KRB5_NT_HOSTBASED_SERVICE_NAME;


GSS_KRB5_NT_PRINCIPAL_NAME

extern gss_OID GSS_KRB5_NT_PRINCIPAL_NAME;


GSS_KRB5_NT_MACHINE_UID_NAME

extern gss_OID GSS_KRB5_NT_MACHINE_UID_NAME;


GSS_KRB5_NT_STRING_UID_NAME

extern gss_OID GSS_KRB5_NT_STRING_UID_NAME;

gss-1.0.2/doc/reference/html/gss.devhelp20000644000000000000000000004704511663555057015122 00000000000000 gss-1.0.2/doc/reference/html/intro.html0000644000000000000000000000571011663555057014705 00000000000000 GNU Generic Security Service (GSS) API Reference Manual

GNU Generic Security Service (GSS) API Reference Manual

GSS is an implementation of the Generic Security Service Application Program Interface (GSS-API). GSS-API is used by network servers to provide security services, e.g., to authenticate SMTP/IMAP clients against SMTP/IMAP servers. GSS consists of a library and a manual.

GSS is developed for the GNU/Linux system, but runs on over 20 platforms including most major Unix platforms and Windows, and many kind of devices including iPAQ handhelds and S/390 mainframes.

GSS is a GNU project, and is licensed under the GNU General Public License version 3 or later.

gss-1.0.2/doc/reference/html/api-index-full.html0000644000000000000000000012244511663555057016375 00000000000000 API Index

API Index

A

gss_accept_sec_context, function in api
gss_acquire_cred, function in api
gss_add_cred, function in api
gss_add_oid_set_member, function in api

C

GSS_CALLING_ERROR, macro in api
gss_canonicalize_name, function in api
gss_check_version, function in ext
gss_compare_name, function in api
gss_const_buffer_t, typedef in api
gss_const_cred_id_t, typedef in api
gss_const_ctx_id_t, typedef in api
gss_const_name_t, typedef in api
gss_const_OID, typedef in api
gss_const_OID_set, typedef in api
gss_context_time, function in api
gss_create_empty_oid_set, function in api
gss_cred_id_t, typedef in api
gss_cred_usage_t, typedef in api
gss_ctx_id_t, typedef in api
GSS_C_ACCEPT, macro in api
GSS_C_AF_APPLETALK, macro in api
GSS_C_AF_BSC, macro in api
GSS_C_AF_CCITT, macro in api
GSS_C_AF_CHAOS, macro in api
GSS_C_AF_DATAKIT, macro in api
GSS_C_AF_DECnet, macro in api
GSS_C_AF_DLI, macro in api
GSS_C_AF_DSS, macro in api
GSS_C_AF_ECMA, macro in api
GSS_C_AF_HYLINK, macro in api
GSS_C_AF_IMPLINK, macro in api
GSS_C_AF_INET, macro in api
GSS_C_AF_LAT, macro in api
GSS_C_AF_LOCAL, macro in api
GSS_C_AF_NBS, macro in api
GSS_C_AF_NS, macro in api
GSS_C_AF_NULLADDR, macro in api
GSS_C_AF_OSI, macro in api
GSS_C_AF_PUP, macro in api
GSS_C_AF_SNA, macro in api
GSS_C_AF_UNSPEC, macro in api
GSS_C_AF_X25, macro in api
GSS_C_ANON_FLAG, macro in api
GSS_C_BOTH, macro in api
GSS_C_CALLING_ERROR_MASK, macro in api
GSS_C_CALLING_ERROR_OFFSET, macro in api
GSS_C_CONF_FLAG, macro in api
GSS_C_DELEG_FLAG, macro in api
GSS_C_EMPTY_BUFFER, macro in api
GSS_C_GSS_CODE, macro in api
GSS_C_INDEFINITE, macro in api
GSS_C_INITIATE, macro in api
GSS_C_INTEG_FLAG, macro in api
GSS_C_MECH_CODE, macro in api
GSS_C_MUTUAL_FLAG, macro in api
GSS_C_NO_BUFFER, macro in api
GSS_C_NO_CHANNEL_BINDINGS, macro in api
GSS_C_NO_CONTEXT, macro in api
GSS_C_NO_CREDENTIAL, macro in api
GSS_C_NO_NAME, macro in api
GSS_C_NO_OID, macro in api
GSS_C_NO_OID_SET, macro in api
GSS_C_NT_ANONYMOUS, variable in api
GSS_C_NT_ANONYMOUS_static, variable in ext
GSS_C_NT_EXPORT_NAME, variable in api
GSS_C_NT_EXPORT_NAME_static, variable in ext
GSS_C_NT_HOSTBASED_SERVICE, variable in api
GSS_C_NT_HOSTBASED_SERVICE_static, variable in ext
GSS_C_NT_HOSTBASED_SERVICE_X, variable in api
GSS_C_NT_HOSTBASED_SERVICE_X_static, variable in ext
GSS_C_NT_MACHINE_UID_NAME, variable in api
GSS_C_NT_MACHINE_UID_NAME_static, variable in ext
GSS_C_NT_STRING_UID_NAME, variable in api
GSS_C_NT_STRING_UID_NAME_static, variable in ext
GSS_C_NT_USER_NAME, variable in api
GSS_C_NT_USER_NAME_static, variable in ext
GSS_C_NULL_OID, macro in api
GSS_C_NULL_OID_SET, macro in api
GSS_C_PROT_READY_FLAG, macro in api
GSS_C_QOP_DEFAULT, macro in api
GSS_C_REPLAY_FLAG, macro in api
GSS_C_ROUTINE_ERROR_MASK, macro in api
GSS_C_ROUTINE_ERROR_OFFSET, macro in api
GSS_C_SEQUENCE_FLAG, macro in api
GSS_C_SUPPLEMENTARY_MASK, macro in api
GSS_C_SUPPLEMENTARY_OFFSET, macro in api
GSS_C_TRANS_FLAG, macro in api

D

gss_decapsulate_token, function in api
gss_delete_sec_context, function in api
gss_display_name, function in api
gss_display_status, function in api
gss_duplicate_name, function in api

E

gss_encapsulate_token, function in api
GSS_ERROR, macro in api
gss_export_name, function in api
gss_export_sec_context, function in api

G

gss_get_mic, function in api

I

gss_import_name, function in api
gss_import_sec_context, function in api
gss_indicate_mechs, function in api
gss_init_sec_context, function in api
gss_inquire_context, function in api
gss_inquire_cred, function in api
gss_inquire_cred_by_mech, function in api
gss_inquire_mechs_for_name, function in api
gss_inquire_mech_for_saslname, function in api
gss_inquire_names_for_mech, function in api
gss_inquire_saslname_for_mech, function in api

K

GSS_KRB5, variable in krb5-ext
GSS_KRB5_NT_HOSTBASED_SERVICE_NAME, variable in krb5
GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static, variable in krb5-ext
GSS_KRB5_NT_MACHINE_UID_NAME, variable in krb5
GSS_KRB5_NT_MACHINE_UID_NAME_static, variable in krb5-ext
GSS_KRB5_NT_PRINCIPAL_NAME, variable in krb5
GSS_KRB5_NT_PRINCIPAL_NAME_static, variable in krb5-ext
GSS_KRB5_NT_STRING_UID_NAME, variable in krb5
GSS_KRB5_NT_STRING_UID_NAME_static, variable in krb5-ext
GSS_KRB5_NT_USER_NAME, variable in krb5
GSS_KRB5_NT_USER_NAME_static, variable in krb5-ext
GSS_KRB5_static, variable in krb5-ext
GSS_KRB5_S_G_BAD_MSG_CTX, macro in krb5
GSS_KRB5_S_G_BAD_SERVICE_NAME, macro in krb5
GSS_KRB5_S_G_BAD_STRING_UID, macro in krb5
GSS_KRB5_S_G_BAD_USAGE, macro in krb5
GSS_KRB5_S_G_BUFFER_ALLOC, macro in krb5
GSS_KRB5_S_G_NOUSER, macro in krb5
GSS_KRB5_S_G_UNKNOWN_QOP, macro in krb5
GSS_KRB5_S_G_VALIDATE_FAILED, macro in krb5
GSS_KRB5_S_G_WRONG_SIZE, macro in krb5
GSS_KRB5_S_KG_BAD_LENGTH, macro in krb5
GSS_KRB5_S_KG_BAD_SIGN_TYPE, macro in krb5
GSS_KRB5_S_KG_CCACHE_NOMATCH, macro in krb5
GSS_KRB5_S_KG_CONTEXT_ESTABLISHED, macro in krb5
GSS_KRB5_S_KG_CTX_INCOMPLETE, macro in krb5
GSS_KRB5_S_KG_KEYTAB_NOMATCH, macro in krb5
GSS_KRB5_S_KG_NO_SUBKEY, macro in krb5
GSS_KRB5_S_KG_TGT_MISSING, macro in krb5

N

gss_name_t, typedef in api

O

gss_oid_equal, function in api
OM_uint32, typedef in api

P

gss_process_context_token, function in api

Q

gss_qop_t, typedef in api

R

gss_release_buffer, function in api
gss_release_cred, function in api
gss_release_name, function in api
gss_release_oid_set, function in api
GSS_ROUTINE_ERROR, macro in api

S

gss_seal, function in api
gss_sign, function in api
GSS_SUPPLEMENTARY_INFO, macro in api
GSS_S_BAD_BINDINGS, macro in api
GSS_S_BAD_MECH, macro in api
GSS_S_BAD_MIC, macro in api
GSS_S_BAD_NAME, macro in api
GSS_S_BAD_NAMETYPE, macro in api
GSS_S_BAD_QOP, macro in api
GSS_S_BAD_SIG, macro in api
GSS_S_BAD_STATUS, macro in api
GSS_S_CALL_BAD_STRUCTURE, macro in api
GSS_S_CALL_INACCESSIBLE_READ, macro in api
GSS_S_CALL_INACCESSIBLE_WRITE, macro in api
GSS_S_COMPLETE, macro in api
GSS_S_CONTEXT_EXPIRED, macro in api
GSS_S_CONTINUE_NEEDED, macro in api
GSS_S_CREDENTIALS_EXPIRED, macro in api
GSS_S_DEFECTIVE_CREDENTIAL, macro in api
GSS_S_DEFECTIVE_TOKEN, macro in api
GSS_S_DUPLICATE_ELEMENT, macro in api
GSS_S_DUPLICATE_TOKEN, macro in api
GSS_S_FAILURE, macro in api
GSS_S_GAP_TOKEN, macro in api
GSS_S_NAME_NOT_MN, macro in api
GSS_S_NO_CONTEXT, macro in api
GSS_S_NO_CRED, macro in api
GSS_S_OLD_TOKEN, macro in api
GSS_S_UNAUTHORIZED, macro in api
GSS_S_UNAVAILABLE, macro in api
GSS_S_UNSEQ_TOKEN, macro in api

T

gss_test_oid_set_member, function in api

U

gss_uint32, typedef in api
gss_unseal, function in api
gss_unwrap, function in api
gss_userok, function in ext

V

gss_verify, function in api
gss_verify_mic, function in api
GSS_VERSION, macro in gss
GSS_VERSION_MAJOR, macro in gss
GSS_VERSION_MINOR, macro in gss
GSS_VERSION_NUMBER, macro in gss
GSS_VERSION_PATCH, macro in gss

W

gss_wrap, function in api
gss_wrap_size_limit, function in api
gss-1.0.2/doc/reference/html/gss-krb5-ext.html0000644000000000000000000001241111663555057016001 00000000000000 krb5-ext

krb5-ext

krb5-ext

Synopsis

extern              gss_OID GSS_KRB5;
extern              gss_OID_desc GSS_KRB5_static;
extern              gss_OID_desc GSS_KRB5_NT_USER_NAME_static;
extern              gss_OID_desc GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static;
extern              gss_OID_desc GSS_KRB5_NT_PRINCIPAL_NAME_static;
extern              gss_OID_desc GSS_KRB5_NT_MACHINE_UID_NAME_static;
extern              gss_OID_desc GSS_KRB5_NT_STRING_UID_NAME_static;

Description

Details

GSS_KRB5

extern gss_OID GSS_KRB5;


GSS_KRB5_static

extern gss_OID_desc GSS_KRB5_static;


GSS_KRB5_NT_USER_NAME_static

extern gss_OID_desc GSS_KRB5_NT_USER_NAME_static;


GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static

extern gss_OID_desc GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static;


GSS_KRB5_NT_PRINCIPAL_NAME_static

extern gss_OID_desc GSS_KRB5_NT_PRINCIPAL_NAME_static;


GSS_KRB5_NT_MACHINE_UID_NAME_static

extern gss_OID_desc GSS_KRB5_NT_MACHINE_UID_NAME_static;


GSS_KRB5_NT_STRING_UID_NAME_static

extern gss_OID_desc GSS_KRB5_NT_STRING_UID_NAME_static;

gss-1.0.2/doc/reference/html/index.html0000644000000000000000000000424311663555057014661 00000000000000 GNU Generic Security Service (GSS) API Reference Manual

for GNU GSS 1.0.2 . The latest version of this documentation can be found on-line at https://www.gnu.org/software/gss/reference/.


gss-1.0.2/doc/reference/html/gss-api.html0000644000000000000000000077113211663555057015125 00000000000000 api

api

api

Synopsis

typedef             gss_ctx_id_t;
typedef             gss_cred_id_t;
typedef             gss_name_t;
typedef             gss_uint32;
typedef             OM_uint32;
typedef             gss_qop_t;
typedef             gss_cred_usage_t;
#define             GSS_C_DELEG_FLAG
#define             GSS_C_MUTUAL_FLAG
#define             GSS_C_REPLAY_FLAG
#define             GSS_C_SEQUENCE_FLAG
#define             GSS_C_CONF_FLAG
#define             GSS_C_INTEG_FLAG
#define             GSS_C_ANON_FLAG
#define             GSS_C_PROT_READY_FLAG
#define             GSS_C_TRANS_FLAG
#define             GSS_C_BOTH
#define             GSS_C_INITIATE
#define             GSS_C_ACCEPT
#define             GSS_C_GSS_CODE
#define             GSS_C_MECH_CODE
#define             GSS_C_AF_UNSPEC
#define             GSS_C_AF_LOCAL
#define             GSS_C_AF_INET
#define             GSS_C_AF_IMPLINK
#define             GSS_C_AF_PUP
#define             GSS_C_AF_CHAOS
#define             GSS_C_AF_NS
#define             GSS_C_AF_NBS
#define             GSS_C_AF_ECMA
#define             GSS_C_AF_DATAKIT
#define             GSS_C_AF_CCITT
#define             GSS_C_AF_SNA
#define             GSS_C_AF_DECnet
#define             GSS_C_AF_DLI
#define             GSS_C_AF_LAT
#define             GSS_C_AF_HYLINK
#define             GSS_C_AF_APPLETALK
#define             GSS_C_AF_BSC
#define             GSS_C_AF_DSS
#define             GSS_C_AF_OSI
#define             GSS_C_AF_X25
#define             GSS_C_AF_NULLADDR
#define             GSS_C_NO_NAME
#define             GSS_C_NO_BUFFER
#define             GSS_C_NO_OID
#define             GSS_C_NO_OID_SET
#define             GSS_C_NO_CONTEXT
#define             GSS_C_NO_CREDENTIAL
#define             GSS_C_NO_CHANNEL_BINDINGS
#define             GSS_C_EMPTY_BUFFER
#define             GSS_C_NULL_OID
#define             GSS_C_NULL_OID_SET
#define             GSS_C_QOP_DEFAULT
#define             GSS_C_INDEFINITE
extern              gss_OID GSS_C_NT_USER_NAME;
extern              gss_OID GSS_C_NT_MACHINE_UID_NAME;
extern              gss_OID GSS_C_NT_STRING_UID_NAME;
extern              gss_OID GSS_C_NT_HOSTBASED_SERVICE_X;
extern              gss_OID GSS_C_NT_HOSTBASED_SERVICE;
extern              gss_OID GSS_C_NT_ANONYMOUS;
extern              gss_OID GSS_C_NT_EXPORT_NAME;
#define             GSS_S_COMPLETE
#define             GSS_C_CALLING_ERROR_OFFSET
#define             GSS_C_ROUTINE_ERROR_OFFSET
#define             GSS_C_SUPPLEMENTARY_OFFSET
#define             GSS_C_CALLING_ERROR_MASK
#define             GSS_C_ROUTINE_ERROR_MASK
#define             GSS_C_SUPPLEMENTARY_MASK
#define             GSS_CALLING_ERROR                   (x)
#define             GSS_ROUTINE_ERROR                   (x)
#define             GSS_SUPPLEMENTARY_INFO              (x)
#define             GSS_ERROR                           (x)
#define             GSS_S_CALL_INACCESSIBLE_READ
#define             GSS_S_CALL_INACCESSIBLE_WRITE
#define             GSS_S_CALL_BAD_STRUCTURE
#define             GSS_S_BAD_MECH
#define             GSS_S_BAD_NAME
#define             GSS_S_BAD_NAMETYPE
#define             GSS_S_BAD_BINDINGS
#define             GSS_S_BAD_STATUS
#define             GSS_S_BAD_SIG
#define             GSS_S_BAD_MIC
#define             GSS_S_NO_CRED
#define             GSS_S_NO_CONTEXT
#define             GSS_S_DEFECTIVE_TOKEN
#define             GSS_S_DEFECTIVE_CREDENTIAL
#define             GSS_S_CREDENTIALS_EXPIRED
#define             GSS_S_CONTEXT_EXPIRED
#define             GSS_S_FAILURE
#define             GSS_S_BAD_QOP
#define             GSS_S_UNAUTHORIZED
#define             GSS_S_UNAVAILABLE
#define             GSS_S_DUPLICATE_ELEMENT
#define             GSS_S_NAME_NOT_MN
#define             GSS_S_CONTINUE_NEEDED
#define             GSS_S_DUPLICATE_TOKEN
#define             GSS_S_OLD_TOKEN
#define             GSS_S_UNSEQ_TOKEN
#define             GSS_S_GAP_TOKEN
OM_uint32           gss_acquire_cred                    (OM_uint32 *minor_status,
                                                         const gss_name_t desired_name,
                                                         OM_uint32 time_req,
                                                         const gss_OID_set desired_mechs,
                                                         gss_cred_usage_t cred_usage,
                                                         gss_cred_id_t *output_cred_handle,
                                                         gss_OID_set *actual_mechs,
                                                         OM_uint32 *time_rec);
OM_uint32           gss_release_cred                    (OM_uint32 *minor_status,
                                                         gss_cred_id_t *cred_handle);
OM_uint32           gss_init_sec_context                (OM_uint32 *minor_status,
                                                         const gss_cred_id_t initiator_cred_handle,
                                                         gss_ctx_id_t *context_handle,
                                                         const gss_name_t target_name,
                                                         const gss_OID mech_type,
                                                         OM_uint32 req_flags,
                                                         OM_uint32 time_req,
                                                         const gss_channel_bindings_t input_chan_bindings,
                                                         const gss_buffer_t input_token,
                                                         gss_OID *actual_mech_type,
                                                         gss_buffer_t output_token,
                                                         OM_uint32 *ret_flags,
                                                         OM_uint32 *time_rec);
OM_uint32           gss_accept_sec_context              (OM_uint32 *minor_status,
                                                         gss_ctx_id_t *context_handle,
                                                         const gss_cred_id_t acceptor_cred_handle,
                                                         const gss_buffer_t input_token_buffer,
                                                         const gss_channel_bindings_t input_chan_bindings,
                                                         gss_name_t *src_name,
                                                         gss_OID *mech_type,
                                                         gss_buffer_t output_token,
                                                         OM_uint32 *ret_flags,
                                                         OM_uint32 *time_rec,
                                                         gss_cred_id_t *delegated_cred_handle);
OM_uint32           gss_process_context_token           (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         const gss_buffer_t token_buffer);
OM_uint32           gss_delete_sec_context              (OM_uint32 *minor_status,
                                                         gss_ctx_id_t *context_handle,
                                                         gss_buffer_t output_token);
OM_uint32           gss_context_time                    (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         OM_uint32 *time_rec);
OM_uint32           gss_get_mic                         (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         gss_qop_t qop_req,
                                                         const gss_buffer_t message_buffer,
                                                         gss_buffer_t message_token);
OM_uint32           gss_verify_mic                      (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         const gss_buffer_t message_buffer,
                                                         const gss_buffer_t token_buffer,
                                                         gss_qop_t *qop_state);
OM_uint32           gss_wrap                            (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         int conf_req_flag,
                                                         gss_qop_t qop_req,
                                                         const gss_buffer_t input_message_buffer,
                                                         int *conf_state,
                                                         gss_buffer_t output_message_buffer);
OM_uint32           gss_unwrap                          (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         const gss_buffer_t input_message_buffer,
                                                         gss_buffer_t output_message_buffer,
                                                         int *conf_state,
                                                         gss_qop_t *qop_state);
OM_uint32           gss_display_status                  (OM_uint32 *minor_status,
                                                         OM_uint32 status_value,
                                                         int status_type,
                                                         const gss_OID mech_type,
                                                         OM_uint32 *message_context,
                                                         gss_buffer_t status_string);
OM_uint32           gss_indicate_mechs                  (OM_uint32 *minor_status,
                                                         gss_OID_set *mech_set);
OM_uint32           gss_compare_name                    (OM_uint32 *minor_status,
                                                         const gss_name_t name1,
                                                         const gss_name_t name2,
                                                         int *name_equal);
OM_uint32           gss_display_name                    (OM_uint32 *minor_status,
                                                         const gss_name_t input_name,
                                                         gss_buffer_t output_name_buffer,
                                                         gss_OID *output_name_type);
OM_uint32           gss_import_name                     (OM_uint32 *minor_status,
                                                         const gss_buffer_t input_name_buffer,
                                                         const gss_OID input_name_type,
                                                         gss_name_t *output_name);
OM_uint32           gss_export_name                     (OM_uint32 *minor_status,
                                                         const gss_name_t input_name,
                                                         gss_buffer_t exported_name);
OM_uint32           gss_release_name                    (OM_uint32 *minor_status,
                                                         gss_name_t *name);
OM_uint32           gss_release_buffer                  (OM_uint32 *minor_status,
                                                         gss_buffer_t buffer);
OM_uint32           gss_release_oid_set                 (OM_uint32 *minor_status,
                                                         gss_OID_set *set);
OM_uint32           gss_inquire_cred                    (OM_uint32 *minor_status,
                                                         const gss_cred_id_t cred_handle,
                                                         gss_name_t *name,
                                                         OM_uint32 *lifetime,
                                                         gss_cred_usage_t *cred_usage,
                                                         gss_OID_set *mechanisms);
OM_uint32           gss_inquire_context                 (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         gss_name_t *src_name,
                                                         gss_name_t *targ_name,
                                                         OM_uint32 *lifetime_rec,
                                                         gss_OID *mech_type,
                                                         OM_uint32 *ctx_flags,
                                                         int *locally_initiated,
                                                         int *open);
OM_uint32           gss_wrap_size_limit                 (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         int conf_req_flag,
                                                         gss_qop_t qop_req,
                                                         OM_uint32 req_output_size,
                                                         OM_uint32 *max_input_size);
OM_uint32           gss_add_cred                        (OM_uint32 *minor_status,
                                                         const gss_cred_id_t input_cred_handle,
                                                         const gss_name_t desired_name,
                                                         const gss_OID desired_mech,
                                                         gss_cred_usage_t cred_usage,
                                                         OM_uint32 initiator_time_req,
                                                         OM_uint32 acceptor_time_req,
                                                         gss_cred_id_t *output_cred_handle,
                                                         gss_OID_set *actual_mechs,
                                                         OM_uint32 *initiator_time_rec,
                                                         OM_uint32 *acceptor_time_rec);
OM_uint32           gss_inquire_cred_by_mech            (OM_uint32 *minor_status,
                                                         const gss_cred_id_t cred_handle,
                                                         const gss_OID mech_type,
                                                         gss_name_t *name,
                                                         OM_uint32 *initiator_lifetime,
                                                         OM_uint32 *acceptor_lifetime,
                                                         gss_cred_usage_t *cred_usage);
OM_uint32           gss_export_sec_context              (OM_uint32 *minor_status,
                                                         gss_ctx_id_t *context_handle,
                                                         gss_buffer_t interprocess_token);
OM_uint32           gss_import_sec_context              (OM_uint32 *minor_status,
                                                         const gss_buffer_t interprocess_token,
                                                         gss_ctx_id_t *context_handle);
OM_uint32           gss_create_empty_oid_set            (OM_uint32 *minor_status,
                                                         gss_OID_set *oid_set);
OM_uint32           gss_add_oid_set_member              (OM_uint32 *minor_status,
                                                         const gss_OID member_oid,
                                                         gss_OID_set *oid_set);
OM_uint32           gss_test_oid_set_member             (OM_uint32 *minor_status,
                                                         const gss_OID member,
                                                         const gss_OID_set set,
                                                         int *present);
OM_uint32           gss_inquire_names_for_mech          (OM_uint32 *minor_status,
                                                         const gss_OID mechanism,
                                                         gss_OID_set *name_types);
OM_uint32           gss_inquire_mechs_for_name          (OM_uint32 *minor_status,
                                                         const gss_name_t input_name,
                                                         gss_OID_set *mech_types);
OM_uint32           gss_canonicalize_name               (OM_uint32 *minor_status,
                                                         const gss_name_t input_name,
                                                         const gss_OID mech_type,
                                                         gss_name_t *output_name);
OM_uint32           gss_duplicate_name                  (OM_uint32 *minor_status,
                                                         const gss_name_t src_name,
                                                         gss_name_t *dest_name);
OM_uint32           gss_sign                            (OM_uint32 *minor_status,
                                                         gss_ctx_id_t context_handle,
                                                         int qop_req,
                                                         gss_buffer_t message_buffer,
                                                         gss_buffer_t message_token);
OM_uint32           gss_verify                          (OM_uint32 *minor_status,
                                                         gss_ctx_id_t context_handle,
                                                         gss_buffer_t message_buffer,
                                                         gss_buffer_t token_buffer,
                                                         int *qop_state);
OM_uint32           gss_seal                            (OM_uint32 *minor_status,
                                                         gss_ctx_id_t context_handle,
                                                         int conf_req_flag,
                                                         int qop_req,
                                                         gss_buffer_t input_message_buffer,
                                                         int *conf_state,
                                                         gss_buffer_t output_message_buffer);
OM_uint32           gss_unseal                          (OM_uint32 *minor_status,
                                                         gss_ctx_id_t context_handle,
                                                         gss_buffer_t input_message_buffer,
                                                         gss_buffer_t output_message_buffer,
                                                         int *conf_state,
                                                         int *qop_state);
OM_uint32           gss_inquire_saslname_for_mech       (OM_uint32 *minor_status,
                                                         const gss_OID desired_mech,
                                                         gss_buffer_t sasl_mech_name,
                                                         gss_buffer_t mech_name,
                                                         gss_buffer_t mech_description);
OM_uint32           gss_inquire_mech_for_saslname       (OM_uint32 *minor_status,
                                                         const gss_buffer_t sasl_mech_name,
                                                         gss_OID *mech_type);
typedef             gss_const_buffer_t;
typedef             gss_const_ctx_id_t;
typedef             gss_const_cred_id_t;
typedef             gss_const_name_t;
typedef             gss_const_OID;
typedef             gss_const_OID_set;
int                 gss_oid_equal                       (gss_const_OID first_oid,
                                                         gss_const_OID second_oid);
OM_uint32           gss_encapsulate_token               (gss_const_buffer_t input_token,
                                                         gss_const_OID token_oid,
                                                         gss_buffer_t output_token);
OM_uint32           gss_decapsulate_token               (gss_const_buffer_t input_token,
                                                         gss_const_OID token_oid,
                                                         gss_buffer_t output_token);

Description

Details

gss_ctx_id_t

typedef struct gss_ctx_id_struct *gss_ctx_id_t;


gss_cred_id_t

typedef struct gss_cred_id_struct *gss_cred_id_t;


gss_name_t

typedef struct gss_name_struct *gss_name_t;


gss_uint32


OM_uint32

typedef gss_uint32 OM_uint32;


gss_qop_t

typedef OM_uint32 gss_qop_t;


gss_cred_usage_t

typedef int gss_cred_usage_t;


GSS_C_DELEG_FLAG

#define GSS_C_DELEG_FLAG      1


GSS_C_MUTUAL_FLAG

#define GSS_C_MUTUAL_FLAG     2


GSS_C_REPLAY_FLAG

#define GSS_C_REPLAY_FLAG     4


GSS_C_SEQUENCE_FLAG

#define GSS_C_SEQUENCE_FLAG   8


GSS_C_CONF_FLAG

#define GSS_C_CONF_FLAG       16


GSS_C_INTEG_FLAG

#define GSS_C_INTEG_FLAG      32


GSS_C_ANON_FLAG

#define GSS_C_ANON_FLAG       64


GSS_C_PROT_READY_FLAG

#define GSS_C_PROT_READY_FLAG 128


GSS_C_TRANS_FLAG

#define GSS_C_TRANS_FLAG      256


GSS_C_BOTH

#define GSS_C_BOTH     0


GSS_C_INITIATE

#define GSS_C_INITIATE 1


GSS_C_ACCEPT

#define GSS_C_ACCEPT   2


GSS_C_GSS_CODE

#define GSS_C_GSS_CODE  1


GSS_C_MECH_CODE

#define GSS_C_MECH_CODE 2


GSS_C_AF_UNSPEC

#define GSS_C_AF_UNSPEC     0


GSS_C_AF_LOCAL

#define GSS_C_AF_LOCAL      1


GSS_C_AF_INET

#define GSS_C_AF_INET       2


GSS_C_AF_IMPLINK

#define GSS_C_AF_IMPLINK    3


GSS_C_AF_PUP

#define GSS_C_AF_PUP        4


GSS_C_AF_CHAOS

#define GSS_C_AF_CHAOS      5


GSS_C_AF_NS

#define GSS_C_AF_NS         6


GSS_C_AF_NBS

#define GSS_C_AF_NBS        7


GSS_C_AF_ECMA

#define GSS_C_AF_ECMA       8


GSS_C_AF_DATAKIT

#define GSS_C_AF_DATAKIT    9


GSS_C_AF_CCITT

#define GSS_C_AF_CCITT      10


GSS_C_AF_SNA

#define GSS_C_AF_SNA        11


GSS_C_AF_DECnet

#define GSS_C_AF_DECnet     12


GSS_C_AF_DLI

#define GSS_C_AF_DLI        13


GSS_C_AF_LAT

#define GSS_C_AF_LAT        14


GSS_C_AF_HYLINK

#define GSS_C_AF_HYLINK     15


GSS_C_AF_APPLETALK

#define GSS_C_AF_APPLETALK  16


GSS_C_AF_BSC

#define GSS_C_AF_BSC        17


GSS_C_AF_DSS

#define GSS_C_AF_DSS        18


GSS_C_AF_OSI

#define GSS_C_AF_OSI        19


GSS_C_AF_X25

#define GSS_C_AF_X25        21


GSS_C_AF_NULLADDR

#define GSS_C_AF_NULLADDR   255


GSS_C_NO_NAME

#define GSS_C_NO_NAME ((gss_name_t) 0)


GSS_C_NO_BUFFER

#define GSS_C_NO_BUFFER ((gss_buffer_t) 0)


GSS_C_NO_OID

#define GSS_C_NO_OID ((gss_OID) 0)


GSS_C_NO_OID_SET

#define GSS_C_NO_OID_SET ((gss_OID_set) 0)


GSS_C_NO_CONTEXT

#define GSS_C_NO_CONTEXT ((gss_ctx_id_t) 0)


GSS_C_NO_CREDENTIAL

#define GSS_C_NO_CREDENTIAL ((gss_cred_id_t) 0)


GSS_C_NO_CHANNEL_BINDINGS

#define GSS_C_NO_CHANNEL_BINDINGS ((gss_channel_bindings_t) 0)


GSS_C_EMPTY_BUFFER

#define GSS_C_EMPTY_BUFFER {0, NULL}


GSS_C_NULL_OID

#define GSS_C_NULL_OID GSS_C_NO_OID


GSS_C_NULL_OID_SET

#define GSS_C_NULL_OID_SET GSS_C_NO_OID_SET


GSS_C_QOP_DEFAULT

#define GSS_C_QOP_DEFAULT 0


GSS_C_INDEFINITE

#define GSS_C_INDEFINITE 0xfffffffful


GSS_C_NT_USER_NAME

extern gss_OID GSS_C_NT_USER_NAME;


GSS_C_NT_MACHINE_UID_NAME

extern gss_OID GSS_C_NT_MACHINE_UID_NAME;


GSS_C_NT_STRING_UID_NAME

extern gss_OID GSS_C_NT_STRING_UID_NAME;


GSS_C_NT_HOSTBASED_SERVICE_X

extern gss_OID GSS_C_NT_HOSTBASED_SERVICE_X;


GSS_C_NT_HOSTBASED_SERVICE

extern gss_OID GSS_C_NT_HOSTBASED_SERVICE;


GSS_C_NT_ANONYMOUS

extern gss_OID GSS_C_NT_ANONYMOUS;


GSS_C_NT_EXPORT_NAME

extern gss_OID GSS_C_NT_EXPORT_NAME;


GSS_S_COMPLETE

#define GSS_S_COMPLETE 0


GSS_C_CALLING_ERROR_OFFSET

#define GSS_C_CALLING_ERROR_OFFSET 24


GSS_C_ROUTINE_ERROR_OFFSET

#define GSS_C_ROUTINE_ERROR_OFFSET 16


GSS_C_SUPPLEMENTARY_OFFSET

#define GSS_C_SUPPLEMENTARY_OFFSET 0


GSS_C_CALLING_ERROR_MASK

#define GSS_C_CALLING_ERROR_MASK 0377ul


GSS_C_ROUTINE_ERROR_MASK

#define GSS_C_ROUTINE_ERROR_MASK 0377ul


GSS_C_SUPPLEMENTARY_MASK

#define GSS_C_SUPPLEMENTARY_MASK 0177777ul


GSS_CALLING_ERROR()

#define             GSS_CALLING_ERROR(x)

x :


GSS_ROUTINE_ERROR()

#define             GSS_ROUTINE_ERROR(x)

x :


GSS_SUPPLEMENTARY_INFO()

#define             GSS_SUPPLEMENTARY_INFO(x)

x :


GSS_ERROR()

#define             GSS_ERROR(x)

x :


GSS_S_CALL_INACCESSIBLE_READ

#define GSS_S_CALL_INACCESSIBLE_READ (1ul << GSS_C_CALLING_ERROR_OFFSET)


GSS_S_CALL_INACCESSIBLE_WRITE

#define GSS_S_CALL_INACCESSIBLE_WRITE (2ul << GSS_C_CALLING_ERROR_OFFSET)


GSS_S_CALL_BAD_STRUCTURE

#define GSS_S_CALL_BAD_STRUCTURE (3ul << GSS_C_CALLING_ERROR_OFFSET)


GSS_S_BAD_MECH

#define GSS_S_BAD_MECH             (1ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_NAME

#define GSS_S_BAD_NAME             (2ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_NAMETYPE

#define GSS_S_BAD_NAMETYPE         (3ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_BINDINGS

#define GSS_S_BAD_BINDINGS         (4ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_STATUS

#define GSS_S_BAD_STATUS           (5ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_SIG

#define GSS_S_BAD_SIG              (6ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_MIC

#define GSS_S_BAD_MIC GSS_S_BAD_SIG


GSS_S_NO_CRED

#define GSS_S_NO_CRED              (7ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_NO_CONTEXT

#define GSS_S_NO_CONTEXT           (8ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_DEFECTIVE_TOKEN

#define GSS_S_DEFECTIVE_TOKEN      (9ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_DEFECTIVE_CREDENTIAL

#define GSS_S_DEFECTIVE_CREDENTIAL (10ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_CREDENTIALS_EXPIRED

#define GSS_S_CREDENTIALS_EXPIRED  (11ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_CONTEXT_EXPIRED

#define GSS_S_CONTEXT_EXPIRED      (12ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_FAILURE

#define GSS_S_FAILURE              (13ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_QOP

#define GSS_S_BAD_QOP              (14ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_UNAUTHORIZED

#define GSS_S_UNAUTHORIZED         (15ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_UNAVAILABLE

#define GSS_S_UNAVAILABLE          (16ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_DUPLICATE_ELEMENT

#define GSS_S_DUPLICATE_ELEMENT    (17ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_NAME_NOT_MN

#define GSS_S_NAME_NOT_MN          (18ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_CONTINUE_NEEDED

#define GSS_S_CONTINUE_NEEDED (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 0))


GSS_S_DUPLICATE_TOKEN

#define GSS_S_DUPLICATE_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 1))


GSS_S_OLD_TOKEN

#define GSS_S_OLD_TOKEN		(1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 2))


GSS_S_UNSEQ_TOKEN

#define GSS_S_UNSEQ_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 3))


GSS_S_GAP_TOKEN

#define GSS_S_GAP_TOKEN		(1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 4))


gss_acquire_cred ()

OM_uint32           gss_acquire_cred                    (OM_uint32 *minor_status,
                                                         const gss_name_t desired_name,
                                                         OM_uint32 time_req,
                                                         const gss_OID_set desired_mechs,
                                                         gss_cred_usage_t cred_usage,
                                                         gss_cred_id_t *output_cred_handle,
                                                         gss_OID_set *actual_mechs,
                                                         OM_uint32 *time_rec);

Allows an application to acquire a handle for a pre-existing credential by name. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation-specific extensions to the API.

If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH).

Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined.

This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context.

If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition.

minor_status :

(integer, modify) Mechanism specific status code.

desired_name :

(gss_name_t, read) Name of principal whose credential should be acquired.

time_req :

(Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime.

desired_mechs :

(Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation-specific default.

cred_usage :

(gss_cred_usage_t, read) GSS_C_BOTH - Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credentials will only be used to initiate security contexts. GSS_C_ACCEPT - Credentials will only be used to accept security contexts.

output_cred_handle :

(gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to gss_release_cred().

actual_mechs :

(Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID-set must be released by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

time_rec :

(Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: Unavailable mechanism requested. `GSS_S_BAD_NAMETYPE`: Type contained within desired_name parameter is not supported. `GSS_S_BAD_NAME`: Value supplied for desired_name parameter is ill formed. `GSS_S_CREDENTIALS_EXPIRED`: The credentials could not be acquired Because they have expired. `GSS_S_NO_CRED`: No credentials were found for the specified name.

gss_release_cred ()

OM_uint32           gss_release_cred                    (OM_uint32 *minor_status,
                                                         gss_cred_id_t *cred_handle);

Informs GSS-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call.

minor_status :

(Integer, modify) Mechanism specific status code.

cred_handle :

(gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CRED`: Credentials could not be accessed.

gss_init_sec_context ()

OM_uint32           gss_init_sec_context                (OM_uint32 *minor_status,
                                                         const gss_cred_id_t initiator_cred_handle,
                                                         gss_ctx_id_t *context_handle,
                                                         const gss_name_t target_name,
                                                         const gss_OID mech_type,
                                                         OM_uint32 req_flags,
                                                         OM_uint32 time_req,
                                                         const gss_channel_bindings_t input_chan_bindings,
                                                         const gss_buffer_t input_token,
                                                         gss_OID *actual_mech_type,
                                                         gss_buffer_t output_token,
                                                         OM_uint32 *ret_flags,
                                                         OM_uint32 *time_rec);

Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters.

Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop:

--------------------------------------------------- int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token->length = 0;

while (!context_established) { maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); };

if (output_token->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) }; if (GSS_ERROR(maj_stat)) {

if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; };

if (maj_stat & GSS_S_CONTINUE_NEEDED) { receive_token_from_peer(input_token); } else { context_established = 1; }; }; ---------------------------------------------------

Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters:

- The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE.

- The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory).

- The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established.

- GSS-API implementations that support per-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should determine what per-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values.

- All other bits within the ret_flags argument should be set to zero.

If the initial call of gss_init_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context).

During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes.

The `req_flags` values:

`GSS_C_DELEG_FLAG`:: - True - Delegate credentials to remote peer. - False - Don't delegate.

`GSS_C_MUTUAL_FLAG`:: - True - Request that remote peer authenticate itself. - False - Authenticate self to remote peer only.

`GSS_C_REPLAY_FLAG`:: - True - Enable replay detection for messages protected with gss_wrap or gss_get_mic. - False - Don't attempt to detect replayed messages.

`GSS_C_SEQUENCE_FLAG`:: - True - Enable detection of out-of-sequence protected messages. - False - Don't attempt to detect out-of-sequence messages.

`GSS_C_CONF_FLAG`:: - True - Request that confidentiality service be made available (via gss_wrap). - False - No per-message confidentiality service is required.

`GSS_C_INTEG_FLAG`:: - True - Request that integrity service be made available (via gss_wrap or gss_get_mic). - False - No per-message integrity service is required.

`GSS_C_ANON_FLAG`:: - True - Do not reveal the initiator's identity to the acceptor. - False - Authenticate normally.

The `ret_flags` values:

`GSS_C_DELEG_FLAG`:: - True - Credentials were delegated to the remote peer. - False - No credentials were delegated.

`GSS_C_MUTUAL_FLAG`:: - True - The remote peer has authenticated itself. - False - Remote peer has not authenticated itself.

`GSS_C_REPLAY_FLAG`:: - True - replay of protected messages will be detected. - False - replayed messages will not be detected.

`GSS_C_SEQUENCE_FLAG`:: - True - out-of-sequence protected messages will be detected. - False - out-of-sequence messages will not be detected.

`GSS_C_CONF_FLAG`:: - True - Confidentiality service may be invoked by calling gss_wrap routine. - False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

`GSS_C_INTEG_FLAG`:: - True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. - False - Per-message integrity service unavailable.

`GSS_C_ANON_FLAG`:: - True - The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor. - False - The initiator's identity has been or will be authenticated normally.

`GSS_C_PROT_READY_FLAG`:: - True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. - False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE.

`GSS_C_TRANS_FLAG`:: - True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). - False - The security context is not transferable.

All other bits should be set to zero.

minor_status :

(integer, modify) Mechanism specific status code.

initiator_cred_handle :

(gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED.

context_handle :

(gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context-handle must be released by the application after use with a call to gss_delete_sec_context().

target_name :

(gss_name_t, read) Name of target.

mech_type :

(OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default.

req_flags :

(bit-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ORed together to form the bit-mask value. See below for the flags.

time_req :

(Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period.

input_chan_bindings :

(channel bindings, read, optional) Application-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used.

input_token :

(buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call.

actual_mech_type :

(OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required.

output_token :

(buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to gss_release_buffer().

ret_flags :

(bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

time_rec :

(Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTINUE_NEEDED`: Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token. `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks performed on the input_token failed. `GSS_S_DEFECTIVE_CREDENTIAL`: Indicates that consistency checks performed on the credential failed. `GSS_S_NO_CRED`: The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. `GSS_S_BAD_BINDINGS`: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. `GSS_S_BAD_SIG`: The input_token contains an invalid MIC, or a MIC that could not be verified. `GSS_S_OLD_TOKEN`: The input_token was too old. This is a fatal error during context establishment. `GSS_S_DUPLICATE_TOKEN`: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. `GSS_S_NO_CONTEXT`: Indicates that the supplied context handle did not refer to a valid context. `GSS_S_BAD_NAMETYPE`: The provided target_name parameter contained an invalid or unsupported type of name. `GSS_S_BAD_NAME`: The provided target_name parameter was ill-formed. `GSS_S_BAD_MECH`: The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation.

gss_accept_sec_context ()

OM_uint32           gss_accept_sec_context              (OM_uint32 *minor_status,
                                                         gss_ctx_id_t *context_handle,
                                                         const gss_cred_id_t acceptor_cred_handle,
                                                         const gss_buffer_t input_token_buffer,
                                                         const gss_channel_bindings_t input_chan_bindings,
                                                         gss_name_t *src_name,
                                                         gss_OID *mech_type,
                                                         gss_buffer_t output_token,
                                                         OM_uint32 *ret_flags,
                                                         OM_uint32 *time_rec,
                                                         gss_cred_id_t *delegated_cred_handle);

Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters.

Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop:

--------------------------------------------------- gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;

do { receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token->length != 0) { send_token_to_peer(output_token);

gss_release_buffer(&min_stat, output_token); }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; }; } while (maj_stat & GSS_S_CONTINUE_NEEDED); ---------------------------------------------------

Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters:

The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE.

The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed.

The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established.

Although this requires that GSS-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should be prepared to use per-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values.

All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context.

If the initial call of gss_accept_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context).

During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes.

The `ret_flags` values:

`GSS_C_DELEG_FLAG`:: - True - Delegated credentials are available via the delegated_cred_handle parameter. - False - No credentials were delegated.

`GSS_C_MUTUAL_FLAG`:: - True - Remote peer asked for mutual authentication. - False - Remote peer did not ask for mutual authentication.

`GSS_C_REPLAY_FLAG`:: - True - replay of protected messages will be detected. - False - replayed messages will not be detected.

`GSS_C_SEQUENCE_FLAG`:: - True - out-of-sequence protected messages will be detected. - False - out-of-sequence messages will not be detected.

`GSS_C_CONF_FLAG`:: - True - Confidentiality service may be invoked by calling the gss_wrap routine. - False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

`GSS_C_INTEG_FLAG`:: - True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. - False - Per-message integrity service unavailable.

`GSS_C_ANON_FLAG`:: - True - The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name. - False - The initiator has been authenticated normally.

`GSS_C_PROT_READY_FLAG`:: - True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. - False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE.

`GSS_C_TRANS_FLAG`:: - True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). - False - The security context is not transferable.

All other bits should be set to zero.

minor_status :

(Integer, modify) Mechanism specific status code.

context_handle :

(gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once gss_accept_sec_context() has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to gss_delete_sec_context().

acceptor_cred_handle :

(gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned.

input_token_buffer :

(buffer, opaque, read) Token obtained from remote application.

input_chan_bindings :

(channel bindings, read, optional) Application- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS.

src_name :

(gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to gss_release_name(). If not required, specify NULL.

mech_type :

(Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read-only by the caller (in particular, it does not need to be freed). If not required, specify NULL.

output_token :

(buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non- zero length field is returned, the associated storage must be freed after use by the application with a call to gss_release_buffer().

ret_flags :

(bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

time_rec :

(Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required.

delegated_cred_handle :

(gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, gss_accept_sec_context() will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to gss_release_cred(). Specify NULL if not required.

Returns :

`GSS_S_CONTINUE_NEEDED`: Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token. `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks performed on the input_token failed. `GSS_S_DEFECTIVE_CREDENTIAL`: Indicates that consistency checks performed on the credential failed. `GSS_S_NO_CRED`: The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. `GSS_S_BAD_BINDINGS`: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. `GSS_S_NO_CONTEXT`: Indicates that the supplied context handle did not refer to a valid context. `GSS_S_BAD_SIG`: The input_token contains an invalid MIC. `GSS_S_OLD_TOKEN`: The input_token was too old. This is a fatal error during context establishment. `GSS_S_DUPLICATE_TOKEN`: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. `GSS_S_BAD_MECH`: The received token specified a mechanism that is not supported by the implementation or the provided credential.

gss_process_context_token ()

OM_uint32           gss_process_context_token           (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         const gss_buffer_t token_buffer);

Provides a way to pass an asynchronous token to the security service. Most context-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time.

minor_status :

(Integer, modify) Implementation specific status code.

context_handle :

(gss_ctx_id_t, read) Context handle of context on which token is to be processed

token_buffer :

(buffer, opaque, read) Token to process.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks performed on the token failed. `GSS_S_NO_CONTEXT`: The context_handle did not refer to a valid context.

gss_delete_sec_context ()

OM_uint32           gss_delete_sec_context              (OM_uint32 *minor_status,
                                                         gss_ctx_id_t *context_handle,
                                                         gss_buffer_t output_token);

Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle.

In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half-built" security contexts resulting from an incomplete sequence of gss_init_sec_context()/gss_accept_sec_context() calls.

The output_token parameter is retained for compatibility with version 1 of the GSS-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero-length token, indicating that no peer action is necessary, and that no token should be transferred by the application.

minor_status :

(Integer, modify) Mechanism specific status code.

context_handle :

(gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS-API will set this context handle to GSS_C_NO_CONTEXT.

output_token :

(buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: No valid context was supplied.

gss_context_time ()

OM_uint32           gss_context_time                    (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         OM_uint32 *time_rec);

Determines the number of seconds for which the specified context will remain valid.

minor_status :

(Integer, modify) Implementation specific status code.

context_handle :

(gss_ctx_id_t, read) Identifies the context to be interrogated.

time_rec :

(Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context

gss_get_mic ()

OM_uint32           gss_get_mic                         (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         gss_qop_t qop_req,
                                                         const gss_buffer_t message_buffer,
                                                         gss_buffer_t message_token);

Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support derivation of MICs from zero-length messages.

minor_status :

(Integer, modify) Mechanism specific status code.

context_handle :

(gss_ctx_id_t, read) Identifies the context on which the message will be sent.

qop_req :

(gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP.

message_buffer :

(buffer, opaque, read) Message to be protected.

message_token :

(buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to gss_release_buffer().

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context. `GSS_S_BAD_QOP`: The specified QOP is not supported by the mechanism.

gss_verify_mic ()

OM_uint32           gss_verify_mic                      (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         const gss_buffer_t message_buffer,
                                                         const gss_buffer_t token_buffer,
                                                         gss_qop_t *qop_state);

Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the calculation and verification of MICs over zero-length messages.

minor_status :

(Integer, modify) Mechanism specific status code.

context_handle :

(gss_ctx_id_t, read) Identifies the context on which the message arrived.

message_buffer :

(buffer, opaque, read) Message to be verified.

token_buffer :

(buffer, opaque, read) Token associated with message.

qop_state :

(gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_DEFECTIVE_TOKEN`: The token failed consistency checks. `GSS_S_BAD_SIG`: The MIC was incorrect. `GSS_S_DUPLICATE_TOKEN`: The token was valid, and contained a correct MIC for the message, but it had already been processed. `GSS_S_OLD_TOKEN`: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. `GSS_S_UNSEQ_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. `GSS_S_GAP_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context.

gss_wrap ()

OM_uint32           gss_wrap                            (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         int conf_req_flag,
                                                         gss_qop_t qop_req,
                                                         const gss_buffer_t input_message_buffer,
                                                         int *conf_state,
                                                         gss_buffer_t output_message_buffer);

Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping of zero-length messages.

minor_status :

(Integer, modify) Mechanism specific status code.

context_handle :

(gss_ctx_id_t, read) Identifies the context on which the message will be sent.

conf_req_flag :

(boolean, read) Non-zero - Both confidentiality and integrity services are requested. Zero - Only integrity service is requested.

qop_req :

(gss_qop_t, read, optional) Specifies required quality of protection. A mechanism-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP.

input_message_buffer :

(buffer, opaque, read) Message to be protected.

conf_state :

(boolean, modify, optional) Non-zero - Confidentiality, data origin authentication and integrity services have been applied. Zero - Integrity and data origin services only has been applied. Specify NULL if not required.

output_message_buffer :

(buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to gss_release_buffer().

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context. `GSS_S_BAD_QOP`: The specified QOP is not supported by the mechanism.

gss_unwrap ()

OM_uint32           gss_unwrap                          (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         const gss_buffer_t input_message_buffer,
                                                         gss_buffer_t output_message_buffer,
                                                         int *conf_state,
                                                         gss_qop_t *qop_state);

Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping and unwrapping of zero-length messages.

minor_status :

(Integer, modify) Mechanism specific status code.

context_handle :

(gss_ctx_id_t, read) Identifies the context on which the message arrived.

input_message_buffer :

(buffer, opaque, read) Protected message.

output_message_buffer :

(buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to gss_release_buffer().

conf_state :

(boolean, modify, optional) Non-zero - Confidentiality and integrity protection were used. Zero - Integrity service only was used. Specify NULL if not required.

qop_state :

(gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_DEFECTIVE_TOKEN`: The token failed consistency checks. `GSS_S_BAD_SIG`: The MIC was incorrect. `GSS_S_DUPLICATE_TOKEN`: The token was valid, and contained a correct MIC for the message, but it had already been processed. `GSS_S_OLD_TOKEN`: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. `GSS_S_UNSEQ_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. `GSS_S_GAP_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context.

gss_display_status ()

OM_uint32           gss_display_status                  (OM_uint32 *minor_status,
                                                         OM_uint32 status_value,
                                                         int status_type,
                                                         const gss_OID mech_type,
                                                         OM_uint32 *message_context,
                                                         gss_buffer_t status_string);

Allows an application to obtain a textual representation of a GSS-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non-zero value in this parameter if there are further messages to extract.

The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr:

--------------------------------------------------- OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string;

...

message_context = 0;

do { maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string)

fprintf(stderr, "%.*s\n", (int)status_string.length,

(char *)status_string.value);

gss_release_buffer(&min_status, &status_string);

} while (message_context != 0); ---------------------------------------------------

minor_status :

(integer, modify) Mechanism specific status code.

status_value :

(Integer, read) Status value to be converted.

status_type :

(Integer, read) GSS_C_GSS_CODE - status_value is a GSS status code. GSS_C_MECH_CODE - status_value is a mechanism status code.

mech_type :

(Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default.

message_context :

(Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from gss_display_status(), a non-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to gss_display_status(), passing the same status_value, status_type, mech_type, and message_context parameters.

status_string :

(buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to gss_release_buffer().

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: Indicates that translation in accordance with an unsupported mechanism type was requested. `GSS_S_BAD_STATUS`: The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE.

gss_indicate_mechs ()

OM_uint32           gss_indicate_mechs                  (OM_uint32 *minor_status,
                                                         gss_OID_set *mech_set);

Allows an application to determine which underlying security mechanisms are available.

minor_status :

(integer, modify) Mechanism specific status code.

mech_set :

(set of Object IDs, modify) Set of implementation-supported mechanisms. The returned gss_OID_set value will be a dynamically-allocated OID set, that should be released by the caller after use with a call to gss_release_oid_set().

Returns :

`GSS_S_COMPLETE`: Successful completion.

gss_compare_name ()

OM_uint32           gss_compare_name                    (OM_uint32 *minor_status,
                                                         const gss_name_t name1,
                                                         const gss_name_t name2,
                                                         int *name_equal);

Allows an application to compare two internal-form names to determine whether they refer to the same entity.

If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity.

minor_status :

(Integer, modify) Mechanism specific status code.

name1 :

(gss_name_t, read) Internal-form name.

name2 :

(gss_name_t, read) Internal-form name.

name_equal :

(boolean, modify) Non-zero - names refer to same entity. Zero - names refer to different entities (strictly, the names are not known to refer to the same identity).

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAMETYPE`: The two names were of incomparable types. `GSS_S_BAD_NAME`: One or both of name1 or name2 was ill-formed.

gss_display_name ()

OM_uint32           gss_display_name                    (OM_uint32 *minor_status,
                                                         const gss_name_t input_name,
                                                         gss_buffer_t output_name_buffer,
                                                         gss_OID *output_name_type);

Allows an application to obtain a textual representation of an opaque internal-form name for display purposes. The syntax of a printable name is defined by the GSS-API implementation.

If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer.

If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter.

minor_status :

(Integer, modify) Mechanism specific status code.

input_name :

(gss_name_t, read) Name to be displayed.

output_name_buffer :

(buffer, character-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to gss_release_buffer().

output_name_type :

(Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: input_name was ill-formed.

gss_import_name ()

OM_uint32           gss_import_name                     (OM_uint32 *minor_status,
                                                         const gss_buffer_t input_name_buffer,
                                                         const gss_OID input_name_type,
                                                         gss_name_t *output_name);

Convert a contiguous string name to internal form. In general, the internal name returned (via the output_name parameter) will not be an MN; the exception to this is if the input_name_type indicates that the contiguous string provided via the input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name.

minor_status :

(Integer, modify) Mechanism specific status code.

input_name_buffer :

(buffer, octet-string, read) Buffer containing contiguous string name to convert.

input_name_type :

(Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism-specific default printable syntax, or an OID recognized by the GSS-API implementation to name a specific namespace.

output_name :

(gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAMETYPE`: The input_name_type was unrecognized. `GSS_S_BAD_NAME`: The input_name parameter could not be interpreted as a name of the specified type. `GSS_S_BAD_MECH`: The input name-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input-name is not supported.

gss_export_name ()

OM_uint32           gss_export_name                     (OM_uint32 *minor_status,
                                                         const gss_name_t input_name,
                                                         gss_buffer_t exported_name);

To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access-control list). The input_name parameter must specify a valid MN (i.e. an internal name generated by gss_accept_sec_context() or by gss_canonicalize_name()).

minor_status :

(Integer, modify) Mechanism specific status code.

input_name :

(gss_name_t, read) The MN to be exported.

exported_name :

(gss_buffer_t, octet-string, modify) The canonical contiguous string form of input_name. Storage associated with this string must freed by the application after use with gss_release_buffer().

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_NAME_NOT_MN`: The provided internal name was not a mechanism name. `GSS_S_BAD_NAME`: The provided internal name was ill-formed. `GSS_S_BAD_NAMETYPE`: The internal name was of a type not supported by the GSS-API implementation.

gss_release_name ()

OM_uint32           gss_release_name                    (OM_uint32 *minor_status,
                                                         gss_name_t *name);

Free GSSAPI-allocated storage associated with an internal-form name. The name is set to GSS_C_NO_NAME on successful completion of this call.

minor_status :

(Integer, modify) Mechanism specific status code.

name :

(gss_name_t, modify) The name to be deleted.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: The name parameter did not contain a valid name.

gss_release_buffer ()

OM_uint32           gss_release_buffer                  (OM_uint32 *minor_status,
                                                         gss_buffer_t buffer);

Free storage associated with a buffer. The storage must have been allocated by a GSS-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer).

minor_status :

(integer, modify) Mechanism specific status code.

buffer :

(buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed.

Returns :

`GSS_S_COMPLETE`: Successful completion.

gss_release_oid_set ()

OM_uint32           gss_release_oid_set                 (OM_uint32 *minor_status,
                                                         gss_OID_set *set);

Free storage associated with a GSSAPI-generated gss_OID_set object. The set parameter must refer to an OID-set that was returned from a GSS-API routine. gss_release_oid_set() will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc.

The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine.

minor_status :

(integer, modify) Mechanism specific status code.

set :

(Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted.

Returns :

`GSS_S_COMPLETE`: Successful completion.

gss_inquire_cred ()

OM_uint32           gss_inquire_cred                    (OM_uint32 *minor_status,
                                                         const gss_cred_id_t cred_handle,
                                                         gss_name_t *name,
                                                         OM_uint32 *lifetime,
                                                         gss_cred_usage_t *cred_usage,
                                                         gss_OID_set *mechanisms);

Obtains information about a credential.

minor_status :

(integer, modify) Mechanism specific status code.

cred_handle :

(gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal.

name :

(gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

lifetime :

(Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

cred_usage :

(gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required.

mechanisms :

(gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CRED`: The referenced credentials could not be accessed. `GSS_S_DEFECTIVE_CREDENTIAL`: The referenced credentials were invalid. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0.

gss_inquire_context ()

OM_uint32           gss_inquire_context                 (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         gss_name_t *src_name,
                                                         gss_name_t *targ_name,
                                                         OM_uint32 *lifetime_rec,
                                                         gss_OID *mech_type,
                                                         OM_uint32 *ctx_flags,
                                                         int *locally_initiated,
                                                         int *open);

Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established.

The `ctx_flags` values:

`GSS_C_DELEG_FLAG`:: - True - Credentials were delegated from the initiator to the acceptor. - False - No credentials were delegated.

`GSS_C_MUTUAL_FLAG`:: - True - The acceptor was authenticated to the initiator. - False - The acceptor did not authenticate itself.

`GSS_C_REPLAY_FLAG`:: - True - replay of protected messages will be detected. - False - replayed messages will not be detected.

`GSS_C_SEQUENCE_FLAG`:: - True - out-of-sequence protected messages will be detected. - False - out-of-sequence messages will not be detected.

`GSS_C_CONF_FLAG`:: - True - Confidentiality service may be invoked by calling gss_wrap routine. - False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

`GSS_C_INTEG_FLAG`:: - True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. - False - Per-message integrity service unavailable.

`GSS_C_ANON_FLAG`:: - True - The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name. - False - The initiator has been authenticated normally.

`GSS_C_PROT_READY_FLAG`:: - True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. - False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non-zero).

`GSS_C_TRANS_FLAG`:: - True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). - False - The security context is not transferable.

minor_status :

(Integer, modify) Mechanism specific status code.

context_handle :

(gss_ctx_id_t, read) A handle that refers to the security context.

src_name :

(gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

targ_name :

(gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. Specify NULL if not required.

lifetime_rec :

(Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

mech_type :

(gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read-only by the application; in particular the application should not attempt to free it. Specify NULL if not required.

ctx_flags :

(bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

locally_initiated :

(Boolean, modify) Non-zero if the invoking application is the context initiator. Specify NULL if not required.

open :

(Boolean, modify) Non-zero if the context is fully established; Zero if a context-establishment token is expected from the peer application. Specify NULL if not required.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: The referenced context could not be accessed.

gss_wrap_size_limit ()

OM_uint32           gss_wrap_size_limit                 (OM_uint32 *minor_status,
                                                         const gss_ctx_id_t context_handle,
                                                         int conf_req_flag,
                                                         gss_qop_t qop_req,
                                                         OM_uint32 req_output_size,
                                                         OM_uint32 *max_input_size);

Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes.

This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection.

GSS-API implementations are recommended but not required to detect invalid QOP values when gss_wrap_size_limit() is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection.

Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length.

minor_status :

(Integer, modify) Mechanism specific status code.

context_handle :

(gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent.

conf_req_flag :

(Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details.

qop_req :

(gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details.

req_output_size :

(Integer, read) The desired maximum size for tokens emitted by gss_wrap.

max_input_size :

(Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: The referenced context could not be accessed. `GSS_S_CONTEXT_EXPIRED`: The context has expired. `GSS_S_BAD_QOP`: The specified QOP is not supported by the mechanism.

gss_add_cred ()

OM_uint32           gss_add_cred                        (OM_uint32 *minor_status,
                                                         const gss_cred_id_t input_cred_handle,
                                                         const gss_name_t desired_name,
                                                         const gss_OID desired_mech,
                                                         gss_cred_usage_t cred_usage,
                                                         OM_uint32 initiator_time_req,
                                                         OM_uint32 acceptor_time_req,
                                                         gss_cred_id_t *output_cred_handle,
                                                         gss_OID_set *actual_mechs,
                                                         OM_uint32 *initiator_time_rec,
                                                         OM_uint32 *acceptor_time_rec);

Adds a credential-element to a credential. The credential-element is identified by the name of the principal to which it refers. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credential-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism-specific authentication data, rather than merely acquiring a GSS-API handle to existing data. Such functions, if required, should be defined in implementation-specific extensions to the API.

If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH).

This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context.

If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition.

This routine can be used to either compose a new credential containing all credential-elements of the original in addition to the newly-acquire credential-element, or to add the new credential- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created.

If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to gss_acquire_cred(), specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to gss_add_cred(), and finally called gss_release_cred() on the first credential handle.

If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non-NULL output_cred_handle must be supplied.

minor_status :

(integer, modify) Mechanism specific status code.

input_cred_handle :

(gss_cred_id_t, read, optional) The credential to which a credential-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential-handle is not modified by gss_add_cred(), the underlying credential will be modified if output_credential_handle is NULL.

desired_name :

(gss_name_t, read.) Name of principal whose credential should be acquired.

desired_mech :

(Object ID, read) Underlying security mechanism with which the credential may be used.

cred_usage :

(gss_cred_usage_t, read) GSS_C_BOTH - Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credential will only be used to initiate security contexts. GSS_C_ACCEPT - Credential will only be used to accept security contexts.

initiator_time_req :

(Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime.

acceptor_time_req :

(Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime.

output_cred_handle :

(gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential-element and all the credential-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential-elements from the input_cred_handle and the newly acquired credential-element; if NULL is specified for this parameter, the newly acquired credential-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to gss_release_cred().

actual_mechs :

(Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID-set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

initiator_time_rec :

(Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required

acceptor_time_rec :

(Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: Unavailable mechanism requested. `GSS_S_BAD_NAMETYPE`: Type contained within desired_name parameter is not supported. `GSS_S_BAD_NAME`: Value supplied for desired_name parameter is ill-formed. `GSS_S_DUPLICATE_ELEMENT`: The credential already contains an element for the requested mechanism with overlapping usage and validity period. `GSS_S_CREDENTIALS_EXPIRED`: The required credentials could not be added because they have expired. `GSS_S_NO_CRED`: No credentials were found for the specified name.

gss_inquire_cred_by_mech ()

OM_uint32           gss_inquire_cred_by_mech            (OM_uint32 *minor_status,
                                                         const gss_cred_id_t cred_handle,
                                                         const gss_OID mech_type,
                                                         gss_name_t *name,
                                                         OM_uint32 *initiator_lifetime,
                                                         OM_uint32 *acceptor_lifetime,
                                                         gss_cred_usage_t *cred_usage);

Obtains per-mechanism information about a credential.

minor_status :

(Integer, modify) Mechanism specific status code.

cred_handle :

(gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal.

mech_type :

(gss_OID, read) The mechanism for which information should be returned.

name :

(gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

initiator_lifetime :

(Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

acceptor_lifetime :

(Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

cred_usage :

(gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CRED`: The referenced credentials could not be accessed. `GSS_S_DEFECTIVE_CREDENTIAL`: The referenced credentials were invalid. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0.

gss_export_sec_context ()

OM_uint32           gss_export_sec_context              (OM_uint32 *minor_status,
                                                         gss_ctx_id_t *context_handle,
                                                         gss_buffer_t interprocess_token);

Provided to support the sharing of work between multiple processes. This routine will typically be used by the context-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. gss_export_sec_context() deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail.

The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group.

The interprocess token may contain security-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object-library GSS-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy.

If creation of the interprocess token is successful, the implementation shall deallocate all process-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT.

minor_status :

(Integer, modify) Mechanism specific status code.

context_handle :

(gss_ctx_id_t, modify) Context handle identifying the context to transfer.

interprocess_token :

(buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to gss_release_buffer().

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has expired. `GSS_S_NO_CONTEXT`: The context was invalid. `GSS_S_UNAVAILABLE`: The operation is not supported.

gss_import_sec_context ()

OM_uint32           gss_import_sec_context              (OM_uint32 *minor_status,
                                                         const gss_buffer_t interprocess_token,
                                                         gss_ctx_id_t *context_handle);

Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context.

minor_status :

(Integer, modify) Mechanism specific status code.

interprocess_token :

(buffer, opaque, modify) Token received from exporting process

context_handle :

(gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to gss_delete_sec_context().

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: The token did not contain a valid context reference. `GSS_S_DEFECTIVE_TOKEN`: The token was invalid. `GSS_S_UNAVAILABLE`: The operation is unavailable. `GSS_S_UNAUTHORIZED`: Local policy prevents the import of this context by the current process.

gss_create_empty_oid_set ()

OM_uint32           gss_create_empty_oid_set            (OM_uint32 *minor_status,
                                                         gss_OID_set *oid_set);

Create an object-identifier set containing no object identifiers, to which members may be subsequently added using the gss_add_oid_set_member() routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred.

minor_status :

(integer, modify) Mechanism specific status code.

oid_set :

(Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to gss_release_oid_set().

Returns :

`GSS_S_COMPLETE`: Successful completion.

gss_add_oid_set_member ()

OM_uint32           gss_add_oid_set_member              (OM_uint32 *minor_status,
                                                         const gss_OID member_oid,
                                                         gss_OID_set *oid_set);

Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID-set that was created by GSS-API (e.g. a set returned by gss_create_empty_oid_set()). GSS-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged.

minor_status :

(integer, modify) Mechanism specific status code.

member_oid :

(Object ID, read) The object identifier to copied into the set.

oid_set :

(Set of Object ID, modify) The set in which the object identifier should be inserted.

Returns :

`GSS_S_COMPLETE`: Successful completion.

gss_test_oid_set_member ()

OM_uint32           gss_test_oid_set_member             (OM_uint32 *minor_status,
                                                         const gss_OID member,
                                                         const gss_OID_set set,
                                                         int *present);

Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by gss_indicate_mechs(), gss_acquire_cred(), and gss_inquire_cred(), but will also work with user-generated sets.

minor_status :

(integer, modify) Mechanism specific status code.

member :

(Object ID, read) The object identifier whose presence is to be tested.

set :

(Set of Object ID, read) The Object Identifier set.

present :

(Boolean, modify) Non-zero if the specified OID is a member of the set, zero if not.

Returns :

`GSS_S_COMPLETE`: Successful completion.

gss_inquire_names_for_mech ()

OM_uint32           gss_inquire_names_for_mech          (OM_uint32 *minor_status,
                                                         const gss_OID mechanism,
                                                         gss_OID_set *name_types);

Returns the set of nametypes supported by the specified mechanism.

minor_status :

(Integer, modify) Mechanism specific status code.

mechanism :

(gss_OID, read) The mechanism to be interrogated.

name_types :

(gss_OID_set, modify) Set of name-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to gss_release_oid_set().

Returns :

`GSS_S_COMPLETE`: Successful completion.

gss_inquire_mechs_for_name ()

OM_uint32           gss_inquire_mechs_for_name          (OM_uint32 *minor_status,
                                                         const gss_name_t input_name,
                                                         gss_OID_set *mech_types);

Returns the set of mechanisms supported by the GSS-API implementation that may be able to process the specified name.

Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism-independent GSS-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism-specific routine.

minor_status :

(Integer, modify) Mechanism specific status code.

input_name :

(gss_name_t, read) The name to which the inquiry relates.

mech_types :

(gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to gss_release_oid_set().

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: The input_name parameter was ill-formed. `GSS_S_BAD_NAMETYPE`: The input_name parameter contained an invalid or unsupported type of name.

gss_canonicalize_name ()

OM_uint32           gss_canonicalize_name               (OM_uint32 *minor_status,
                                                         const gss_name_t input_name,
                                                         const gss_OID mech_type,
                                                         gss_name_t *output_name);

Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing mech_type as its only member, followed by a call to gss_init_sec_context(), specifying mech_type as the authentication mechanism.

minor_status :

(Integer, modify) Mechanism specific status code.

input_name :

(gss_name_t, read) The name for which a canonical form is desired.

mech_type :

(Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided.

output_name :

(gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

Returns :

`GSS_S_COMPLETE`: Successful completion.

gss_duplicate_name ()

OM_uint32           gss_duplicate_name                  (OM_uint32 *minor_status,
                                                         const gss_name_t src_name,
                                                         gss_name_t *dest_name);

Create an exact duplicate of the existing internal name src_name. The new dest_name will be independent of src_name (i.e. src_name and dest_name must both be released, and the release of one shall not affect the validity of the other).

minor_status :

(Integer, modify) Mechanism specific status code.

src_name :

(gss_name_t, read) Internal name to be duplicated.

dest_name :

(gss_name_t, modify) The resultant copy of src_name. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: The src_name parameter was ill-formed.

gss_sign ()

OM_uint32           gss_sign                            (OM_uint32 *minor_status,
                                                         gss_ctx_id_t context_handle,
                                                         int qop_req,
                                                         gss_buffer_t message_buffer,
                                                         gss_buffer_t message_token);

minor_status :

context_handle :

qop_req :

message_buffer :

message_token :

Returns :


gss_verify ()

OM_uint32           gss_verify                          (OM_uint32 *minor_status,
                                                         gss_ctx_id_t context_handle,
                                                         gss_buffer_t message_buffer,
                                                         gss_buffer_t token_buffer,
                                                         int *qop_state);

minor_status :

context_handle :

message_buffer :

token_buffer :

qop_state :

Returns :


gss_seal ()

OM_uint32           gss_seal                            (OM_uint32 *minor_status,
                                                         gss_ctx_id_t context_handle,
                                                         int conf_req_flag,
                                                         int qop_req,
                                                         gss_buffer_t input_message_buffer,
                                                         int *conf_state,
                                                         gss_buffer_t output_message_buffer);

minor_status :

context_handle :

conf_req_flag :

qop_req :

input_message_buffer :

conf_state :

output_message_buffer :

Returns :


gss_unseal ()

OM_uint32           gss_unseal                          (OM_uint32 *minor_status,
                                                         gss_ctx_id_t context_handle,
                                                         gss_buffer_t input_message_buffer,
                                                         gss_buffer_t output_message_buffer,
                                                         int *conf_state,
                                                         int *qop_state);

minor_status :

context_handle :

input_message_buffer :

output_message_buffer :

conf_state :

qop_state :

Returns :


gss_inquire_saslname_for_mech ()

OM_uint32           gss_inquire_saslname_for_mech       (OM_uint32 *minor_status,
                                                         const gss_OID desired_mech,
                                                         gss_buffer_t sasl_mech_name,
                                                         gss_buffer_t mech_name,
                                                         gss_buffer_t mech_description);

Output the SASL mechanism name of a GSS-API mechanism. It also returns a name and description of the mechanism in a user friendly form.

minor_status :

(Integer, modify) Mechanism specific status code.

desired_mech :

(OID, read) Identifies the GSS-API mechanism to query.

sasl_mech_name :

(buffer, character-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer().

mech_name :

(buffer, character-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer().

mech_description :

(buffer, character-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to gss_release_buffer().

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: The desired_mech OID is unsupported.

gss_inquire_mech_for_saslname ()

OM_uint32           gss_inquire_mech_for_saslname       (OM_uint32 *minor_status,
                                                         const gss_buffer_t sasl_mech_name,
                                                         gss_OID *mech_type);

Output GSS-API mechanism OID of mechanism associated with given sasl_mech_name.

minor_status :

(Integer, modify) Mechanism specific status code.

sasl_mech_name :

(buffer, character-string, read) Buffer with SASL mechanism name.

mech_type :

(OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required.

Returns :

`GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: There is no GSS-API mechanism known as sasl_mech_name.

gss_const_buffer_t

typedef const gss_buffer_desc *gss_const_buffer_t;


gss_const_ctx_id_t

typedef const struct gss_ctx_id_struct *gss_const_ctx_id_t;


gss_const_cred_id_t

typedef const struct gss_cred_id_struct *gss_const_cred_id_t;


gss_const_name_t

typedef const struct gss_name_struct *gss_const_name_t;


gss_const_OID

typedef const gss_OID_desc *gss_const_OID;


gss_const_OID_set

typedef const gss_OID_set_desc *gss_const_OID_set;


gss_oid_equal ()

int                 gss_oid_equal                       (gss_const_OID first_oid,
                                                         gss_const_OID second_oid);

Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339.

first_oid :

(Object ID, read) First Object identifier.

second_oid :

(Object ID, read) First Object identifier.

Returns :

Returns boolean value true when the two OIDs are equal, otherwise false.

gss_encapsulate_token ()

OM_uint32           gss_encapsulate_token               (gss_const_buffer_t input_token,
                                                         gss_const_OID token_oid,
                                                         gss_buffer_t output_token);

Add the mechanism-independent token header to GSS-API context token data. This is used for the initial token of a GSS-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339.

input_token :

(buffer, opaque, read) Buffer with GSS-API context token data.

token_oid :

(Object ID, read) Object identifier of token.

output_token :

(buffer, opaque, modify) Encapsulated token data; caller must release with gss_release_buffer().

Returns :

`GSS_S_COMPLETE`: Indicates successful completion, and that output parameters holds correct information. `GSS_S_FAILURE`: Indicates that encapsulation failed for reasons unspecified at the GSS-API level.

gss_decapsulate_token ()

OM_uint32           gss_decapsulate_token               (gss_const_buffer_t input_token,
                                                         gss_const_OID token_oid,
                                                         gss_buffer_t output_token);

Remove the mechanism-independent token header from an initial GSS-API context token. Unwrap a buffer in the mechanism-independent token format. This is the reverse of gss_encapsulate_token(). The translation is loss-less, all data is preserved as is. This function is standardized in RFC 6339.

input_token :

(buffer, opaque, read) Buffer with GSS-API context token.

token_oid :

(Object ID, read) Expected object identifier of token.

output_token :

(buffer, opaque, modify) Decapsulated token data; caller must release with gss_release_buffer().

Returns :

`GSS_S_COMPLETE`: Indicates successful completion, and that output parameters holds correct information. `GSS_S_DEFECTIVE_TOKEN`: Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors). `GSS_S_FAILURE`: Indicates that decapsulation failed for reasons unspecified at the GSS-API level.
gss-1.0.2/doc/reference/tmpl/0000755000000000000000000000000011663555057012751 500000000000000gss-1.0.2/doc/reference/tmpl/ext.sgml0000644000000000000000000000200411663555057014351 00000000000000 ext @req_version: @Returns: @name: @username: @Returns: gss-1.0.2/doc/reference/tmpl/api.sgml0000644000000000000000000003262211663555057014333 00000000000000 api @x: @x: @x: @x: @minor_status: @desired_name: @time_req: @desired_mechs: @cred_usage: @output_cred_handle: @actual_mechs: @time_rec: @Returns: @minor_status: @cred_handle: @Returns: @minor_status: @initiator_cred_handle: @context_handle: @target_name: @mech_type: @req_flags: @time_req: @input_chan_bindings: @input_token: @actual_mech_type: @output_token: @ret_flags: @time_rec: @Returns: @minor_status: @context_handle: @acceptor_cred_handle: @input_token_buffer: @input_chan_bindings: @src_name: @mech_type: @output_token: @ret_flags: @time_rec: @delegated_cred_handle: @Returns: @minor_status: @context_handle: @token_buffer: @Returns: @minor_status: @context_handle: @output_token: @Returns: @minor_status: @context_handle: @time_rec: @Returns: @minor_status: @context_handle: @qop_req: @message_buffer: @message_token: @Returns: @minor_status: @context_handle: @message_buffer: @token_buffer: @qop_state: @Returns: @minor_status: @context_handle: @conf_req_flag: @qop_req: @input_message_buffer: @conf_state: @output_message_buffer: @Returns: @minor_status: @context_handle: @input_message_buffer: @output_message_buffer: @conf_state: @qop_state: @Returns: @minor_status: @status_value: @status_type: @mech_type: @message_context: @status_string: @Returns: @minor_status: @mech_set: @Returns: @minor_status: @name1: @name2: @name_equal: @Returns: @minor_status: @input_name: @output_name_buffer: @output_name_type: @Returns: @minor_status: @input_name_buffer: @input_name_type: @output_name: @Returns: @minor_status: @input_name: @exported_name: @Returns: @minor_status: @name: @Returns: @minor_status: @buffer: @Returns: @minor_status: @set: @Returns: @minor_status: @cred_handle: @name: @lifetime: @cred_usage: @mechanisms: @Returns: @minor_status: @context_handle: @src_name: @targ_name: @lifetime_rec: @mech_type: @ctx_flags: @locally_initiated: @open: @Returns: @minor_status: @context_handle: @conf_req_flag: @qop_req: @req_output_size: @max_input_size: @Returns: @minor_status: @input_cred_handle: @desired_name: @desired_mech: @cred_usage: @initiator_time_req: @acceptor_time_req: @output_cred_handle: @actual_mechs: @initiator_time_rec: @acceptor_time_rec: @Returns: @minor_status: @cred_handle: @mech_type: @name: @initiator_lifetime: @acceptor_lifetime: @cred_usage: @Returns: @minor_status: @context_handle: @interprocess_token: @Returns: @minor_status: @interprocess_token: @context_handle: @Returns: @minor_status: @oid_set: @Returns: @minor_status: @member_oid: @oid_set: @Returns: @minor_status: @member: @set: @present: @Returns: @minor_status: @mechanism: @name_types: @Returns: @minor_status: @input_name: @mech_types: @Returns: @minor_status: @input_name: @mech_type: @output_name: @Returns: @minor_status: @src_name: @dest_name: @Returns: @minor_status: @context_handle: @qop_req: @message_buffer: @message_token: @Returns: @minor_status: @context_handle: @message_buffer: @token_buffer: @qop_state: @Returns: @minor_status: @context_handle: @conf_req_flag: @qop_req: @input_message_buffer: @conf_state: @output_message_buffer: @Returns: @minor_status: @context_handle: @input_message_buffer: @output_message_buffer: @conf_state: @qop_state: @Returns: @minor_status: @desired_mech: @sasl_mech_name: @mech_name: @mech_description: @Returns: @minor_status: @sasl_mech_name: @mech_type: @Returns: @first_oid: @second_oid: @Returns: @input_token: @token_oid: @output_token: @Returns: @input_token: @token_oid: @output_token: @Returns: gss-1.0.2/doc/reference/tmpl/krb5.sgml0000644000000000000000000000356711663555057014433 00000000000000 krb5 gss-1.0.2/doc/reference/tmpl/gss.sgml0000644000000000000000000000114011663555057014345 00000000000000 gss gss-1.0.2/doc/reference/tmpl/krb5-ext.sgml0000644000000000000000000000150311663555057015215 00000000000000 krb5-ext gss-1.0.2/doc/reference/tmpl/gss-unused.sgml0000644000000000000000000000000011663555057015640 00000000000000gss-1.0.2/doc/reference/gss-sections.txt0000644000000000000000000000767711663555057015120 00000000000000
gss GSS_VERSION GSS_VERSION_MAJOR GSS_VERSION_MINOR GSS_VERSION_PATCH GSS_VERSION_NUMBER
krb5-ext GSS_KRB5 GSS_KRB5_static GSS_KRB5_NT_USER_NAME_static GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static GSS_KRB5_NT_PRINCIPAL_NAME_static GSS_KRB5_NT_MACHINE_UID_NAME_static GSS_KRB5_NT_STRING_UID_NAME_static
api gss_ctx_id_t gss_cred_id_t gss_name_t gss_uint32 OM_uint32 gss_qop_t gss_cred_usage_t GSS_C_DELEG_FLAG GSS_C_MUTUAL_FLAG GSS_C_REPLAY_FLAG GSS_C_SEQUENCE_FLAG GSS_C_CONF_FLAG GSS_C_INTEG_FLAG GSS_C_ANON_FLAG GSS_C_PROT_READY_FLAG GSS_C_TRANS_FLAG GSS_C_BOTH GSS_C_INITIATE GSS_C_ACCEPT GSS_C_GSS_CODE GSS_C_MECH_CODE GSS_C_AF_UNSPEC GSS_C_AF_LOCAL GSS_C_AF_INET GSS_C_AF_IMPLINK GSS_C_AF_PUP GSS_C_AF_CHAOS GSS_C_AF_NS GSS_C_AF_NBS GSS_C_AF_ECMA GSS_C_AF_DATAKIT GSS_C_AF_CCITT GSS_C_AF_SNA GSS_C_AF_DECnet GSS_C_AF_DLI GSS_C_AF_LAT GSS_C_AF_HYLINK GSS_C_AF_APPLETALK GSS_C_AF_BSC GSS_C_AF_DSS GSS_C_AF_OSI GSS_C_AF_X25 GSS_C_AF_NULLADDR GSS_C_NO_NAME GSS_C_NO_BUFFER GSS_C_NO_OID GSS_C_NO_OID_SET GSS_C_NO_CONTEXT GSS_C_NO_CREDENTIAL GSS_C_NO_CHANNEL_BINDINGS GSS_C_EMPTY_BUFFER GSS_C_NULL_OID GSS_C_NULL_OID_SET GSS_C_QOP_DEFAULT GSS_C_INDEFINITE GSS_C_NT_USER_NAME GSS_C_NT_MACHINE_UID_NAME GSS_C_NT_STRING_UID_NAME GSS_C_NT_HOSTBASED_SERVICE_X GSS_C_NT_HOSTBASED_SERVICE GSS_C_NT_ANONYMOUS GSS_C_NT_EXPORT_NAME GSS_S_COMPLETE GSS_C_CALLING_ERROR_OFFSET GSS_C_ROUTINE_ERROR_OFFSET GSS_C_SUPPLEMENTARY_OFFSET GSS_C_CALLING_ERROR_MASK GSS_C_ROUTINE_ERROR_MASK GSS_C_SUPPLEMENTARY_MASK GSS_CALLING_ERROR GSS_ROUTINE_ERROR GSS_SUPPLEMENTARY_INFO GSS_ERROR GSS_S_CALL_INACCESSIBLE_READ GSS_S_CALL_INACCESSIBLE_WRITE GSS_S_CALL_BAD_STRUCTURE GSS_S_BAD_MECH GSS_S_BAD_NAME GSS_S_BAD_NAMETYPE GSS_S_BAD_BINDINGS GSS_S_BAD_STATUS GSS_S_BAD_SIG GSS_S_BAD_MIC GSS_S_NO_CRED GSS_S_NO_CONTEXT GSS_S_DEFECTIVE_TOKEN GSS_S_DEFECTIVE_CREDENTIAL GSS_S_CREDENTIALS_EXPIRED GSS_S_CONTEXT_EXPIRED GSS_S_FAILURE GSS_S_BAD_QOP GSS_S_UNAUTHORIZED GSS_S_UNAVAILABLE GSS_S_DUPLICATE_ELEMENT GSS_S_NAME_NOT_MN GSS_S_CONTINUE_NEEDED GSS_S_DUPLICATE_TOKEN GSS_S_OLD_TOKEN GSS_S_UNSEQ_TOKEN GSS_S_GAP_TOKEN gss_acquire_cred gss_release_cred gss_init_sec_context gss_accept_sec_context gss_process_context_token gss_delete_sec_context gss_context_time gss_get_mic gss_verify_mic gss_wrap gss_unwrap gss_display_status gss_indicate_mechs gss_compare_name gss_display_name gss_import_name gss_export_name gss_release_name gss_release_buffer gss_release_oid_set gss_inquire_cred gss_inquire_context gss_wrap_size_limit gss_add_cred gss_inquire_cred_by_mech gss_export_sec_context gss_import_sec_context gss_create_empty_oid_set gss_add_oid_set_member gss_test_oid_set_member gss_inquire_names_for_mech gss_inquire_mechs_for_name gss_canonicalize_name gss_duplicate_name gss_sign gss_verify gss_seal gss_unseal gss_inquire_saslname_for_mech gss_inquire_mech_for_saslname gss_const_buffer_t gss_const_ctx_id_t gss_const_cred_id_t gss_const_name_t gss_const_OID gss_const_OID_set gss_oid_equal gss_encapsulate_token gss_decapsulate_token
ext gss_check_version gss_userok GSS_C_NT_USER_NAME_static GSS_C_NT_MACHINE_UID_NAME_static GSS_C_NT_STRING_UID_NAME_static GSS_C_NT_HOSTBASED_SERVICE_X_static GSS_C_NT_HOSTBASED_SERVICE_static GSS_C_NT_ANONYMOUS_static GSS_C_NT_EXPORT_NAME_static
krb5 GSS_KRB5_S_G_BAD_SERVICE_NAME GSS_KRB5_S_G_BAD_STRING_UID GSS_KRB5_S_G_NOUSER GSS_KRB5_S_G_VALIDATE_FAILED GSS_KRB5_S_G_BUFFER_ALLOC GSS_KRB5_S_G_BAD_MSG_CTX GSS_KRB5_S_G_WRONG_SIZE GSS_KRB5_S_G_BAD_USAGE GSS_KRB5_S_G_UNKNOWN_QOP GSS_KRB5_S_KG_CCACHE_NOMATCH GSS_KRB5_S_KG_KEYTAB_NOMATCH GSS_KRB5_S_KG_TGT_MISSING GSS_KRB5_S_KG_NO_SUBKEY GSS_KRB5_S_KG_CONTEXT_ESTABLISHED GSS_KRB5_S_KG_BAD_SIGN_TYPE GSS_KRB5_S_KG_BAD_LENGTH GSS_KRB5_S_KG_CTX_INCOMPLETE GSS_KRB5_NT_USER_NAME GSS_KRB5_NT_HOSTBASED_SERVICE_NAME GSS_KRB5_NT_PRINCIPAL_NAME GSS_KRB5_NT_MACHINE_UID_NAME GSS_KRB5_NT_STRING_UID_NAME
gss-1.0.2/doc/Makefile.in0000644000000000000000000020477311663554732012040 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. # -*- makefile -*- # Copyright (C) 2002-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. # This file is automatically generated. DO NOT EDIT! -*- makefile -*- VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_GTK_DOC_TRUE@am__append_1 = reference DIST_COMMON = $(dist_man_MANS) $(gss_TEXINFOS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.gdoc $(srcdir)/Makefile.gdoci \ $(srcdir)/Makefile.in $(srcdir)/stamp-vti \ $(srcdir)/version.texi subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = INFO_DEPS = $(srcdir)/gss.info TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux DVIS = gss.dvi PDFS = gss.pdf PSS = gss.ps HTMLS = gss.html TEXINFOS = gss.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html DVIPS = dvips RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(man3dir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 man3dir = $(mandir)/man3 NROFF = nroff MANS = $(dist_man_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = cyclo reference DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = cyclo $(am__append_1) EXTRA_DIST = gss.html gss.ps gss.pdf \ gdoc asciidoc asciidoc.conf texinfo.conf texinfo.css info_TEXINFOS = gss.texi gss_TEXINFOS = gpl-3.0.texi fdl-1.3.texi $(gdoc_TEXINFOS) AM_MAKEINFOHTMLFLAGS = --no-split --number-sections --css-include=texinfo.css dist_man_MANS = gss.1 $(gdoc_MANS) MAINTAINERCLEANFILES = $(dist_man_MANS) # GDOC GDOC_SRC = $(top_srcdir)/lib/*.c GDOC_TEXI_PREFIX = texi/ GDOC_MAN_PREFIX = man/ GDOC_MAN_EXTRA_ARGS = -module $(PACKAGE) -sourceversion $(VERSION) \ -bugsto $(PACKAGE_BUGREPORT) -includefuncprefix -seeinfo $(PACKAGE) \ -copyright "2003-2011 Simon Josefsson" \ -verbatimcopying -pkg-name "$(PACKAGE_NAME)" BUILT_SOURCES = Makefile.gdoc # ### asn1.c # # asn1.c: gss_encapsulate_token # asn1.c: gss_decapsulate_token # ### context.c # # context.c: gss_init_sec_context # context.c: gss_accept_sec_context # context.c: gss_delete_sec_context # context.c: gss_process_context_token # context.c: gss_context_time # context.c: gss_inquire_context # context.c: gss_wrap_size_limit # context.c: gss_export_sec_context # context.c: gss_import_sec_context # ### cred.c # # cred.c: gss_acquire_cred # cred.c: gss_add_cred # cred.c: gss_inquire_cred # cred.c: gss_inquire_cred_by_mech # cred.c: gss_release_cred # ### error.c # # error.c: gss_display_status # ### ext.c # # ext.c: gss_userok # ### meta.c # # ### misc.c # # misc.c: gss_create_empty_oid_set # misc.c: gss_add_oid_set_member # misc.c: gss_test_oid_set_member # misc.c: gss_release_oid_set # misc.c: gss_indicate_mechs # misc.c: gss_release_buffer # ### msg.c # # msg.c: gss_get_mic # msg.c: gss_verify_mic # msg.c: gss_wrap # msg.c: gss_unwrap # ### name.c # # name.c: gss_import_name # name.c: gss_display_name # name.c: gss_compare_name # name.c: gss_release_name # name.c: gss_inquire_names_for_mech # name.c: gss_inquire_mechs_for_name # name.c: gss_export_name # name.c: gss_canonicalize_name # name.c: gss_duplicate_name # ### obsolete.c # # ### oid.c # # oid.c: gss_oid_equal # ### saslname.c # # saslname.c: gss_inquire_saslname_for_mech # saslname.c: gss_inquire_mech_for_saslname # ### version.c # # version.c: gss_check_version gdoc_TEXINFOS = texi/asn1.c.texi texi/gss_encapsulate_token.texi \ texi/gss_decapsulate_token.texi texi/context.c.texi \ texi/gss_init_sec_context.texi \ texi/gss_accept_sec_context.texi \ texi/gss_delete_sec_context.texi \ texi/gss_process_context_token.texi texi/gss_context_time.texi \ texi/gss_inquire_context.texi texi/gss_wrap_size_limit.texi \ texi/gss_export_sec_context.texi \ texi/gss_import_sec_context.texi texi/cred.c.texi \ texi/gss_acquire_cred.texi texi/gss_add_cred.texi \ texi/gss_inquire_cred.texi texi/gss_inquire_cred_by_mech.texi \ texi/gss_release_cred.texi texi/error.c.texi \ texi/gss_display_status.texi texi/ext.c.texi \ texi/gss_userok.texi texi/meta.c.texi texi/misc.c.texi \ texi/gss_create_empty_oid_set.texi \ texi/gss_add_oid_set_member.texi \ texi/gss_test_oid_set_member.texi \ texi/gss_release_oid_set.texi texi/gss_indicate_mechs.texi \ texi/gss_release_buffer.texi texi/msg.c.texi \ texi/gss_get_mic.texi texi/gss_verify_mic.texi \ texi/gss_wrap.texi texi/gss_unwrap.texi texi/name.c.texi \ texi/gss_import_name.texi texi/gss_display_name.texi \ texi/gss_compare_name.texi texi/gss_release_name.texi \ texi/gss_inquire_names_for_mech.texi \ texi/gss_inquire_mechs_for_name.texi texi/gss_export_name.texi \ texi/gss_canonicalize_name.texi texi/gss_duplicate_name.texi \ texi/obsolete.c.texi texi/oid.c.texi texi/gss_oid_equal.texi \ texi/saslname.c.texi texi/gss_inquire_saslname_for_mech.texi \ texi/gss_inquire_mech_for_saslname.texi texi/version.c.texi \ texi/gss_check_version.texi gdoc_MANS = man/gss_encapsulate_token.3 man/gss_decapsulate_token.3 \ man/gss_init_sec_context.3 man/gss_accept_sec_context.3 \ man/gss_delete_sec_context.3 man/gss_process_context_token.3 \ man/gss_context_time.3 man/gss_inquire_context.3 \ man/gss_wrap_size_limit.3 man/gss_export_sec_context.3 \ man/gss_import_sec_context.3 man/gss_acquire_cred.3 \ man/gss_add_cred.3 man/gss_inquire_cred.3 \ man/gss_inquire_cred_by_mech.3 man/gss_release_cred.3 \ man/gss_display_status.3 man/gss_userok.3 \ man/gss_create_empty_oid_set.3 man/gss_add_oid_set_member.3 \ man/gss_test_oid_set_member.3 man/gss_release_oid_set.3 \ man/gss_indicate_mechs.3 man/gss_release_buffer.3 \ man/gss_get_mic.3 man/gss_verify_mic.3 man/gss_wrap.3 \ man/gss_unwrap.3 man/gss_import_name.3 man/gss_display_name.3 \ man/gss_compare_name.3 man/gss_release_name.3 \ man/gss_inquire_names_for_mech.3 \ man/gss_inquire_mechs_for_name.3 man/gss_export_name.3 \ man/gss_canonicalize_name.3 man/gss_duplicate_name.3 \ man/gss_oid_equal.3 man/gss_inquire_saslname_for_mech.3 \ man/gss_inquire_mech_for_saslname.3 man/gss_check_version.3 all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.gdoci $(srcdir)/Makefile.gdoc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs .texi.info: restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $< .texi.pdf: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $< .texi.html: rm -rf $(@:.html=.htp) if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@; \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ else \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ exit 1; \ fi $(srcdir)/gss.info: gss.texi $(srcdir)/version.texi $(gss_TEXINFOS) gss.dvi: gss.texi $(srcdir)/version.texi $(gss_TEXINFOS) gss.pdf: gss.texi $(srcdir)/version.texi $(gss_TEXINFOS) gss.html: gss.texi $(srcdir)/version.texi $(gss_TEXINFOS) $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: gss.texi $(top_srcdir)/configure @(dir=.; test -f ./gss.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/gss.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp @cmp -s vti.tmp $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi"; \ cp vti.tmp $(srcdir)/version.texi) -@rm -f vti.tmp @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp maintainer-clean-vti: -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && \ (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf gss.aux gss.cp gss.cps gss.fn gss.fns gss.ky gss.kys gss.log gss.pg \ gss.tmp gss.toc gss.tp gss.vr clean-aminfo: -test -z "gss.dvi gss.pdf gss.ps gss.html" \ || rm -rf gss.dvi gss.pdf gss.ps gss.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } install-man3: $(dist_man_MANS) @$(NORMAL_INSTALL) test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)" @list=''; test -n "$(man3dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.3[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ done; } uninstall-man3: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man3dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.3[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man3dir)" && rm -f $$files; } # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(INFO_DEPS) $(MANS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: $(DVIS) html: html-recursive html-am: $(HTMLS) info: info-recursive info-am: $(INFO_DEPS) install-data-am: install-info-am install-man install-dvi: install-dvi-recursive install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-recursive install-html-am: $(HTMLS) @$(NORMAL_INSTALL) test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ if test -d "$$d$$p"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d$$p"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-recursive install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man1 install-man3 install-pdf: install-pdf-recursive install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-recursive install-ps-am: $(PSS) @$(NORMAL_INSTALL) test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ mostlyclean-libtool mostlyclean-vti pdf: pdf-recursive pdf-am: $(PDFS) ps: ps-recursive ps-am: $(PSS) uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-man uninstall-pdf-am uninstall-ps-am uninstall-man: uninstall-man1 uninstall-man3 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-aminfo clean-generic \ clean-libtool ctags ctags-recursive dist-info distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-man3 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic \ maintainer-clean-vti mostlyclean mostlyclean-aminfo \ mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-man uninstall-man1 uninstall-man3 uninstall-pdf-am \ uninstall-ps-am gss.1: $(top_srcdir)/src/gss.c $(top_srcdir)/src/gss.ggo \ $(top_srcdir)/configure.ac $(HELP2MAN) \ --name="Generic Security Service command line interface" \ --output=$@ $(top_builddir)/src/gss Makefile.gdoc: $(top_builddir)/configure Makefile.am Makefile.gdoci $(GDOC_SRC) echo '# This file is automatically generated. DO NOT EDIT! -*- makefile -*-' > Makefile.gdoc echo >> Makefile.gdoc echo 'gdoc_TEXINFOS =' >> Makefile.gdoc echo 'gdoc_MANS =' >> Makefile.gdoc echo >> Makefile.gdoc for file in $(GDOC_SRC); do \ shortfile=`basename $$file`; \ echo "#" >> Makefile.gdoc; \ echo "### $$shortfile" >> Makefile.gdoc; \ echo "#" >> Makefile.gdoc; \ echo "gdoc_TEXINFOS += $(GDOC_TEXI_PREFIX)$$shortfile.texi" >> Makefile.gdoc; \ echo "$(GDOC_TEXI_PREFIX)$$shortfile.texi: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -texinfo $$(GDOC_TEXI_EXTRA_ARGS) $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ functions=`$(PERL) $(srcdir)/gdoc -listfunc $$file`; \ for function in $$functions; do \ echo "# $$shortfile: $$function" >> Makefile.gdoc; \ echo "gdoc_TEXINFOS += $(GDOC_TEXI_PREFIX)$$function.texi" >> Makefile.gdoc; \ echo "$(GDOC_TEXI_PREFIX)$$function.texi: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -texinfo $$(GDOC_TEXI_EXTRA_ARGS) -function'" $$function"' $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ echo "gdoc_MANS += $(GDOC_MAN_PREFIX)$$function.3" >> Makefile.gdoc; \ echo "$(GDOC_MAN_PREFIX)$$function.3: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -man $$(GDOC_MAN_EXTRA_ARGS) -function'" $$function"' $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ done; \ echo >> Makefile.gdoc; \ done $(MAKE) Makefile texi/asn1.c.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_encapsulate_token.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_encapsulate_token $< > $@ man/gss_encapsulate_token.3: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_encapsulate_token $< > $@ texi/gss_decapsulate_token.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_decapsulate_token $< > $@ man/gss_decapsulate_token.3: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_decapsulate_token $< > $@ texi/context.c.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_init_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_init_sec_context $< > $@ man/gss_init_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_init_sec_context $< > $@ texi/gss_accept_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_accept_sec_context $< > $@ man/gss_accept_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_accept_sec_context $< > $@ texi/gss_delete_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_delete_sec_context $< > $@ man/gss_delete_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_delete_sec_context $< > $@ texi/gss_process_context_token.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_process_context_token $< > $@ man/gss_process_context_token.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_process_context_token $< > $@ texi/gss_context_time.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_context_time $< > $@ man/gss_context_time.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_context_time $< > $@ texi/gss_inquire_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_context $< > $@ man/gss_inquire_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_context $< > $@ texi/gss_wrap_size_limit.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_wrap_size_limit $< > $@ man/gss_wrap_size_limit.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_wrap_size_limit $< > $@ texi/gss_export_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_export_sec_context $< > $@ man/gss_export_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_export_sec_context $< > $@ texi/gss_import_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_import_sec_context $< > $@ man/gss_import_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_import_sec_context $< > $@ texi/cred.c.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_acquire_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_acquire_cred $< > $@ man/gss_acquire_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_acquire_cred $< > $@ texi/gss_add_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_add_cred $< > $@ man/gss_add_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_add_cred $< > $@ texi/gss_inquire_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_cred $< > $@ man/gss_inquire_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_cred $< > $@ texi/gss_inquire_cred_by_mech.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_cred_by_mech $< > $@ man/gss_inquire_cred_by_mech.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_cred_by_mech $< > $@ texi/gss_release_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_cred $< > $@ man/gss_release_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_cred $< > $@ texi/error.c.texi: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_display_status.texi: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_display_status $< > $@ man/gss_display_status.3: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_display_status $< > $@ texi/ext.c.texi: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_userok.texi: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_userok $< > $@ man/gss_userok.3: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_userok $< > $@ texi/meta.c.texi: ../lib/meta.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/misc.c.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_create_empty_oid_set.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_create_empty_oid_set $< > $@ man/gss_create_empty_oid_set.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_create_empty_oid_set $< > $@ texi/gss_add_oid_set_member.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_add_oid_set_member $< > $@ man/gss_add_oid_set_member.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_add_oid_set_member $< > $@ texi/gss_test_oid_set_member.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_test_oid_set_member $< > $@ man/gss_test_oid_set_member.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_test_oid_set_member $< > $@ texi/gss_release_oid_set.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_oid_set $< > $@ man/gss_release_oid_set.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_oid_set $< > $@ texi/gss_indicate_mechs.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_indicate_mechs $< > $@ man/gss_indicate_mechs.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_indicate_mechs $< > $@ texi/gss_release_buffer.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_buffer $< > $@ man/gss_release_buffer.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_buffer $< > $@ texi/msg.c.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_get_mic.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_get_mic $< > $@ man/gss_get_mic.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_get_mic $< > $@ texi/gss_verify_mic.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_verify_mic $< > $@ man/gss_verify_mic.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_verify_mic $< > $@ texi/gss_wrap.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_wrap $< > $@ man/gss_wrap.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_wrap $< > $@ texi/gss_unwrap.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_unwrap $< > $@ man/gss_unwrap.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_unwrap $< > $@ texi/name.c.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_import_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_import_name $< > $@ man/gss_import_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_import_name $< > $@ texi/gss_display_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_display_name $< > $@ man/gss_display_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_display_name $< > $@ texi/gss_compare_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_compare_name $< > $@ man/gss_compare_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_compare_name $< > $@ texi/gss_release_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_name $< > $@ man/gss_release_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_name $< > $@ texi/gss_inquire_names_for_mech.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_names_for_mech $< > $@ man/gss_inquire_names_for_mech.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_names_for_mech $< > $@ texi/gss_inquire_mechs_for_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_mechs_for_name $< > $@ man/gss_inquire_mechs_for_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_mechs_for_name $< > $@ texi/gss_export_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_export_name $< > $@ man/gss_export_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_export_name $< > $@ texi/gss_canonicalize_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_canonicalize_name $< > $@ man/gss_canonicalize_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_canonicalize_name $< > $@ texi/gss_duplicate_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_duplicate_name $< > $@ man/gss_duplicate_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_duplicate_name $< > $@ texi/obsolete.c.texi: ../lib/obsolete.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/oid.c.texi: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_oid_equal.texi: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_oid_equal $< > $@ man/gss_oid_equal.3: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_oid_equal $< > $@ texi/saslname.c.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_inquire_saslname_for_mech.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_saslname_for_mech $< > $@ man/gss_inquire_saslname_for_mech.3: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_saslname_for_mech $< > $@ texi/gss_inquire_mech_for_saslname.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_mech_for_saslname $< > $@ man/gss_inquire_mech_for_saslname.3: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_mech_for_saslname $< > $@ texi/version.c.texi: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_check_version.texi: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_check_version $< > $@ man/gss_check_version.3: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_check_version $< > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/doc/Makefile.gdoci0000644000000000000000000000536311546676326012515 00000000000000# -*- makefile -*- # Copyright (C) 2002-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. BUILT_SOURCES = Makefile.gdoc Makefile.gdoc: $(top_builddir)/configure Makefile.am Makefile.gdoci $(GDOC_SRC) echo '# This file is automatically generated. DO NOT EDIT! -*- makefile -*-' > Makefile.gdoc echo >> Makefile.gdoc echo 'gdoc_TEXINFOS =' >> Makefile.gdoc echo 'gdoc_MANS =' >> Makefile.gdoc echo >> Makefile.gdoc for file in $(GDOC_SRC); do \ shortfile=`basename $$file`; \ echo "#" >> Makefile.gdoc; \ echo "### $$shortfile" >> Makefile.gdoc; \ echo "#" >> Makefile.gdoc; \ echo "gdoc_TEXINFOS += $(GDOC_TEXI_PREFIX)$$shortfile.texi" >> Makefile.gdoc; \ echo "$(GDOC_TEXI_PREFIX)$$shortfile.texi: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -texinfo $$(GDOC_TEXI_EXTRA_ARGS) $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ functions=`$(PERL) $(srcdir)/gdoc -listfunc $$file`; \ for function in $$functions; do \ echo "# $$shortfile: $$function" >> Makefile.gdoc; \ echo "gdoc_TEXINFOS += $(GDOC_TEXI_PREFIX)$$function.texi" >> Makefile.gdoc; \ echo "$(GDOC_TEXI_PREFIX)$$function.texi: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -texinfo $$(GDOC_TEXI_EXTRA_ARGS) -function'" $$function"' $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ echo "gdoc_MANS += $(GDOC_MAN_PREFIX)$$function.3" >> Makefile.gdoc; \ echo "$(GDOC_MAN_PREFIX)$$function.3: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -man $$(GDOC_MAN_EXTRA_ARGS) -function'" $$function"' $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ done; \ echo >> Makefile.gdoc; \ done $(MAKE) Makefile include Makefile.gdoc gss-1.0.2/doc/texinfo.conf0000644000000000000000000000132511361023201012253 00000000000000# # texinfo.conf # # Asciidoc global configuration file. # Texinfo backend. # [miscellaneous] outfilesuffix=.texi newline=\n [specialcharacters] # Override SGML special chars. &=& <=< >=> # Texinfo special chars. @=@@ {=@{ }=@} [tags] ilist=@itemize @bullet|@end itemize ilistitem=| ilisttext=@item| vlist=@table @asis|@end table vlistentry=| vlisttext=| vlistterm=@item| vlistitem=| # Quoted text. emphasis=@emph\{|\} strong=@strong\{|\} monospaced=@code\{|\} # Special word substitution. [emphasizedwords] @emph\{{words}\} [monospacedwords] @strong\{{words}\} [strongwords] @code\{{words}\} # Paragraph substitution. [paragraph] | [indentedparagraph] @display | @end display [verbatimblock] @example | @end example gss-1.0.2/doc/gss.texi0000644000000000000000000020571411662454551011453 00000000000000\input texinfo @c -*- mode: texinfo; coding: us-ascii; -*- @c This file is part of the GNU Generic Security Service Library. @c See below for copyright and license. @setfilename gss.info @include version.texi @settitle GNU Generic Security Service Library @finalout @c Unify some of the indices. @syncodeindex tp fn @syncodeindex pg fn @syncodeindex vr fn @copying This manual is last updated @value{UPDATED} for version @value{VERSION} of GNU GSS. Copyright @copyright{} 2003-2011 Simon Josefsson. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory GNU Libraries @direntry * gss: (gss). Generic Security Service API Library @end direntry @titlepage @title GNU Generic Security Service Library @subtitle GSS-API Library for the GNU system @subtitle for version @value{VERSION}, @value{UPDATED} @author Simon Josefsson @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU Generic Security Service Library @insertcopying @end ifnottex @menu * Introduction:: How to use this manual. * Preparation:: What you should do before using the library. * Standard GSS API:: Reference documentation for the Standard API. * Extended GSS API:: Non-standard functions. * Invoking gss:: Command line interface to the library. * Acknowledgements:: Whom to blame. Appendices * Criticism of GSS:: Why you maybe shouldn't use GSS. * Copying Information:: How you can copy and share GSS. Indices * Concept Index:: Index of concepts and programs. * API Index:: Index of functions, variables and data types. @end menu @c ********************************************************** @c ******************* Introduction *********************** @c ********************************************************** @node Introduction @chapter Introduction GSS is an implementation of the Generic Security Service Application Program Interface (GSS-API). GSS-API is used by network servers to provide security services, e.g., to authenticate SMTP/IMAP clients against SMTP/IMAP servers. GSS consists of a library and a manual. GSS is developed for the GNU/Linux system, but runs on over 20 platforms including most major Unix platforms and Windows, and many kind of devices including iPAQ handhelds and S/390 mainframes. GSS is a GNU project, and is licensed under the GNU General Public License version 3 or later. @menu * Getting Started:: * Features:: * GSS-API Overview:: * Supported Platforms:: * Commercial Support:: * Downloading and Installing:: * Bug Reports:: * Contributing:: * Planned Features:: @end menu @node Getting Started @section Getting Started This manual documents the GSS programming interface. All functions and data types provided by the library are explained. The reader is assumed to possess basic familiarity with GSS-API and network programming in C or C++. For general GSS-API information, and some programming examples, there is a guide available online at @url{http://docs.sun.com/db/doc/816-1331}. This manual can be used in several ways. If read from the beginning to the end, it gives a good introduction into the library and how it can be used in an application. Forward references are included where necessary. Later on, the manual can be used as a reference manual to get just the information needed about any particular interface of the library. Experienced programmers might want to start looking at the examples at the end of the manual, and then only read up those parts of the interface which are unclear. @node Features @section Features GSS might have a couple of advantages over other libraries doing a similar job. @table @asis @item It's Free Software Anybody can use, modify, and redistribute it under the terms of the GNU General Public License version 3 or later. @item It's thread-safe No global variables are used and multiple library handles and session handles may be used in parallell. @item It's internationalized It handles non-ASCII names and user visible strings used in the library (e.g., error messages) can be translated into the users' language. @item It's portable It should work on all Unix like operating systems, including Windows. @end table @node GSS-API Overview @section GSS-API Overview This section describes GSS-API from a protocol point of view. The Generic Security Service Application Programming Interface provides security services to calling applications. It allows a communicating application to authenticate the user associated with another application, to delegate rights to another application, and to apply security services such as confidentiality and integrity on a per-message basis. There are four stages to using the GSS-API: @enumerate @item The application acquires a set of credentials with which it may prove its identity to other processes. The application's credentials vouch for its global identity, which may or may not be related to any local username under which it may be running. @item A pair of communicating applications establish a joint security context using their credentials. The security context is a pair of GSS-API data structures that contain shared state information, which is required in order that per-message security services may be provided. Examples of state that might be shared between applications as part of a security context are cryptographic keys, and message sequence numbers. As part of the establishment of a security context, the context initiator is authenticated to the responder, and may require that the responder is authenticated in turn. The initiator may optionally give the responder the right to initiate further security contexts, acting as an agent or delegate of the initiator. This transfer of rights is termed delegation, and is achieved by creating a set of credentials, similar to those used by the initiating application, but which may be used by the responder. To establish and maintain the shared information that makes up the security context, certain GSS-API calls will return a token data structure, which is an opaque data type that may contain cryptographically protected data. The caller of such a GSS-API routine is responsible for transferring the token to the peer application, encapsulated if necessary in an application- application protocol. On receipt of such a token, the peer application should pass it to a corresponding GSS-API routine which will decode the token and extract the information, updating the security context state information accordingly. @item Per-message services are invoked to apply either: integrity and data origin authentication, or confidentiality, integrity and data origin authentication to application data, which are treated by GSS-API as arbitrary octet-strings. An application transmitting a message that it wishes to protect will call the appropriate GSS-API routine (gss_get_mic or gss_wrap) to apply protection, specifying the appropriate security context, and send the resulting token to the receiving application. The receiver will pass the received token (and, in the case of data protected by gss_get_mic, the accompanying message-data) to the corresponding decoding routine (gss_verify_mic or gss_unwrap) to remove the protection and validate the data. @item At the completion of a communications session (which may extend across several transport connections), each application calls a GSS-API routine to delete the security context. Multiple contexts may also be used (either successively or simultaneously) within a single communications association, at the option of the applications. @end enumerate @node Supported Platforms @section Supported Platforms GSS has at some point in time been tested on the following platforms. @enumerate @item Debian GNU/Linux 3.0 (Woody) @cindex Debian GCC 2.95.4 and GNU Make. This is the main development platform. @code{alphaev67-unknown-linux-gnu}, @code{alphaev6-unknown-linux-gnu}, @code{arm-unknown-linux-gnu}, @code{hppa-unknown-linux-gnu}, @code{hppa64-unknown-linux-gnu}, @code{i686-pc-linux-gnu}, @code{ia64-unknown-linux-gnu}, @code{m68k-unknown-linux-gnu}, @code{mips-unknown-linux-gnu}, @code{mipsel-unknown-linux-gnu}, @code{powerpc-unknown-linux-gnu}, @code{s390-ibm-linux-gnu}, @code{sparc-unknown-linux-gnu}. @item Debian GNU/Linux 2.1 @cindex Debian GCC 2.95.1 and GNU Make. @code{armv4l-unknown-linux-gnu}. @item Tru64 UNIX @cindex Tru64 Tru64 UNIX C compiler and Tru64 Make. @code{alphaev67-dec-osf5.1}, @code{alphaev68-dec-osf5.1}. @item SuSE Linux 7.1 @cindex SuSE GCC 2.96 and GNU Make. @code{alphaev6-unknown-linux-gnu}, @code{alphaev67-unknown-linux-gnu}. @item SuSE Linux 7.2a @cindex SuSE Linux GCC 3.0 and GNU Make. @code{ia64-unknown-linux-gnu}. @item RedHat Linux 7.2 @cindex RedHat GCC 2.96 and GNU Make. @code{alphaev6-unknown-linux-gnu}, @code{alphaev67-unknown-linux-gnu}, @code{ia64-unknown-linux-gnu}. @item RedHat Linux 8.0 @cindex RedHat GCC 3.2 and GNU Make. @code{i686-pc-linux-gnu}. @item RedHat Advanced Server 2.1 @cindex RedHat Advanced Server GCC 2.96 and GNU Make. @code{i686-pc-linux-gnu}. @item Slackware Linux 8.0.01 @cindex RedHat GCC 2.95.3 and GNU Make. @code{i686-pc-linux-gnu}. @item Mandrake Linux 9.0 @cindex Mandrake GCC 3.2 and GNU Make. @code{i686-pc-linux-gnu}. @item IRIX 6.5 @cindex IRIX MIPS C compiler, IRIX Make. @code{mips-sgi-irix6.5}. @item AIX 4.3.2 @cindex AIX IBM C for AIX compiler, AIX Make. @code{rs6000-ibm-aix4.3.2.0}. @item Microsoft Windows 2000 (Cygwin) @cindex Windows GCC 3.2, GNU make. @code{i686-pc-cygwin}. @item HP-UX 11 @cindex HP-UX HP-UX C compiler and HP Make. @code{ia64-hp-hpux11.22}, @code{hppa2.0w-hp-hpux11.11}. @item SUN Solaris 2.8 @cindex Solaris Sun WorkShop Compiler C 6.0 and SUN Make. @code{sparc-sun-solaris2.8}. @item NetBSD 1.6 @cindex NetBSD GCC 2.95.3 and GNU Make. @code{alpha-unknown-netbsd1.6}, @code{i386-unknown-netbsdelf1.6}. @item OpenBSD 3.1 and 3.2 @cindex OpenBSD GCC 2.95.3 and GNU Make. @code{alpha-unknown-openbsd3.1}, @code{i386-unknown-openbsd3.1}. @item FreeBSD 4.7 @cindex FreeBSD GCC 2.95.4 and GNU Make. @code{alpha-unknown-freebsd4.7}, @code{i386-unknown-freebsd4.7}. @item Cross compiled to uClinux/uClibc on Motorola Coldfire. @cindex Motorola Coldfire @cindex uClinux @cindex uClibc GCC 3.4 and GNU Make @code{m68k-uclinux-elf}. @end enumerate If you use GSS on, or port GSS to, a new platform please report it to the author. @node Commercial Support @section Commercial Support Commercial support is available for users of GNU GSS. The kind of support that can be purchased may include: @itemize @item Implement new features. Such as a new GSS-API mechanism. @item Port GSS to new platforms. This could include porting to an embedded platforms that may need memory or size optimization. @item Integrating GSS as a security environment in your existing project. @item System design of components related to GSS-API. @end itemize If you are interested, please write to: @verbatim Simon Josefsson Datakonsult AB Hagagatan 24 113 47 Stockholm Sweden E-mail: simon@josefsson.org @end verbatim If your company provides support related to GNU GSS and would like to be mentioned here, contact the author (@pxref{Bug Reports}). @node Downloading and Installing @section Downloading and Installing @cindex Installation @cindex Download The package can be downloaded from several places, including: @url{ftp://ftp.gnu.org/gnu/gss/} The latest version is stored in a file, e.g., @samp{gss-@value{VERSION}.tar.gz} where the @samp{@value{VERSION}} indicate the highest version number. The package is then extracted, configured and built like many other packages that use Autoconf. For detailed information on configuring and building it, refer to the @file{INSTALL} file that is part of the distribution archive. Here is an example terminal session that downloads, configures, builds and installs the package. You will need a few basic tools, such as @samp{sh}, @samp{make} and @samp{cc}. @example $ wget -q ftp://ftp.gnu.org/gnu/gss/gss-@value{VERSION}.tar.gz $ tar xfz gss-@value{VERSION}.tar.gz $ cd gss-@value{VERSION}/ $ ./configure ... $ make ... $ make install ... @end example After that GSS should be properly installed and ready for use. @node Bug Reports @section Bug Reports @cindex Reporting Bugs If you think you have found a bug in GSS, please investigate it and report it. @itemize @bullet @item Please make sure that the bug is really in GSS, and preferably also check that it hasn't already been fixed in the latest version. @item You have to send us a test case that makes it possible for us to reproduce the bug. @item You also have to explain what is wrong; if you get a crash, or if the results printed are not good and in that case, in what way. Make sure that the bug report includes all information you would need to fix this kind of bug for someone else. @end itemize Please make an effort to produce a self-contained report, with something definite that can be tested or debugged. Vague queries or piecemeal messages are difficult to act on and don't help the development effort. If your bug report is good, we will do our best to help you to get a corrected version of the software; if the bug report is poor, we won't do anything about it (apart from asking you to send better bug reports). If you think something in this manual is unclear, or downright incorrect, or if the language needs to be improved, please also send a note. Send your bug report to: @center @samp{bug-gss@@gnu.org} @node Contributing @section Contributing @cindex Contributing @cindex Hacking If you want to submit a patch for inclusion -- from solve a typo you discovered, up to adding support for a new feature -- you should submit it as a bug report (@pxref{Bug Reports}). There are some things that you can do to increase the chances for it to be included in the official package. Unless your patch is very small (say, under 10 lines) we require that you assign the copyright of your work to the Free Software Foundation. This is to protect the freedom of the project. If you have not already signed papers, we will send you the necessary information when you submit your contribution. For contributions that doesn't consist of actual programming code, the only guidelines are common sense. Use it. For code contributions, a number of style guides will help you: @itemize @bullet @item Coding Style. Follow the GNU Standards document (@pxref{top, GNU Coding Standards,, standards}). If you normally code using another coding standard, there is no problem, but you should use @samp{indent} to reformat the code (@pxref{top, GNU Indent,, indent}) before submitting your work. @item Use the unified diff format @samp{diff -u}. @item Return errors. No reason whatsoever should abort the execution of the library. Even memory allocation errors, e.g. when malloc return NULL, should work although result in an error code. @item Design with thread safety in mind. Don't use global variables. Don't even write to per-handle global variables unless the documented behaviour of the function you write is to write to the per-handle global variable. @item Avoid using the C math library. It causes problems for embedded implementations, and in most situations it is very easy to avoid using it. @item Document your functions. Use comments before each function headers, that, if properly formatted, are extracted into Texinfo manuals and GTK-DOC web pages. @item Supply a ChangeLog and NEWS entries, where appropriate. @end itemize @node Planned Features @section Planned Features @cindex Todo list @cindex Future goals This is also known as the ``todo list''. If you like to start working on anything, please let me know so work duplication can be avoided. @itemize @item Support non-blocking mode. This would be an API extension. It could work by forking a process and interface to it, or by using a user-specific daemon. E.g., h = START(accept_sec_context(...)), FINISHED(h), ret = FINISH(h), ABORT(h). @item Support loadable modules via dlopen, a'la Solaris GSS. @item Port to Cyclone? CCured? @end itemize @c ********************************************************** @c ******************* Preparation ************************ @c ********************************************************** @node Preparation @chapter Preparation To use GSS, you have to perform some changes to your sources and the build system. The necessary changes are small and explained in the following sections. At the end of this chapter, it is described how the library is initialized, and how the requirements of the library are verified. A faster way to find out how to adapt your application for use with GSS may be to look at the examples at the end of this manual. @menu * Header:: * Initialization:: * Version Check:: * Building the source:: * Out of Memory handling:: @end menu @node Header @section Header @cindex Header files All standard interfaces (data types and functions) of the official GSS API are defined in the header file @file{gss/api.h}. The file is taken verbatim from the RFC (after correcting a few typos) where it is known as @file{gssapi.h}. However, to be able to co-exist gracefully with other GSS-API implementation, the name @file{gssapi.h} was changed. The header file @file{gss.h} includes @file{gss/api.h}, and declares a few non-standard extensions (by including @file{gss/ext.h}), takes care of including header files related to all supported mechanisms (e.g., @file{gss/krb5.h}) and finally adds C++ namespace protection of all definitions. Therefore, including @file{gss.h} in your project is recommended over @file{gss/api.h}. If using @file{gss.h} instead of @file{gss/api.h} causes problems, it should be regarded a bug. You must include either file in all programs using the library, either directly or through some other header file, like this: @example #include @end example The name space of GSS is @code{gss_*} for function names, @code{gss_*} for data types and @code{GSS_*} for other symbols. In addition the same name prefixes with one prepended underscore are reserved for internal use and should never be used by an application. Each supported GSS mechanism may want to expose mechanism specific functionality, and can do so through one or more header files under the @file{gss/} directory. The Kerberos 5 mechanism uses the file @file{gss/krb5.h}, but again, it is included (with C++ namespace fixes) from @file{gss.h}. @node Initialization @section Initialization GSS does not need to be initialized before it can be used. In order to take advantage of the internationalisation features in GSS, e.g. translated error messages, the application must set the current locale using @code{setlocale()} before calling, e.g., @code{gss_display_status()}. This is typically done in @code{main()} as in the following example. @example #include #include ... setlocale (LC_ALL, ""); @end example @node Version Check @section Version Check It is often desirable to check that the version of GSS used is indeed one which fits all requirements. Even with binary compatibility new features may have been introduced but due to problem with the dynamic linker an old version is actually used. So you may want to check that the version is okay right after program startup. The function is called @code{gss_check_version()} and is described formally in @xref{Extended GSS API}. The normal way to use the function is to put something similar to the following early in your @code{main()}: @example #include ... if (!gss_check_version (GSS_VERSION)) @{ printf ("gss_check_version() failed:\n" "Header file incompatible with shared library.\n"); exit(EXIT_FAILURE); @} @end example @node Building the source @section Building the source @cindex Compiling your application If you want to compile a source file that includes the @file{gss.h} header file, you must make sure that the compiler can find it in the directory hierarchy. This is accomplished by adding the path to the directory in which the header file is located to the compilers include file search path (via the @option{-I} option). However, the path to the include file is determined at the time the source is configured. To solve this problem, GSS uses the external package @command{pkg-config} that knows the path to the include file and other configuration options. The options that need to be added to the compiler invocation at compile time are output by the @option{--cflags} option to @command{pkg-config gss}. The following example shows how it can be used at the command line: @example gcc -c foo.c `pkg-config gss --cflags` @end example Adding the output of @samp{pkg-config gss --cflags} to the compilers command line will ensure that the compiler can find the @file{gss.h} header file. A similar problem occurs when linking the program with the library. Again, the compiler has to find the library files. For this to work, the path to the library files has to be added to the library search path (via the @option{-L} option). For this, the option @option{--libs} to @command{pkg-config gss} can be used. For convenience, this option also outputs all other options that are required to link the program with the GSS libarary (for instance, the @samp{-lshishi} option). The example shows how to link @file{foo.o} with GSS into a program @command{foo}. @example gcc -o foo foo.o `pkg-config gss --libs` @end example Of course you can also combine both examples to a single command by specifying both options to @command{pkg-config}: @example gcc -o foo foo.c `pkg-config gss --cflags --libs` @end example @node Out of Memory handling @section Out of Memory handling @cindex Out of Memory handling @cindex Memory allocation failure The GSS API does not have a standard error code for the out of memory error condition. This library will return @code{GSS_S_FAILURE} and set @code{minor_status} to ENOMEM. @c ********************************************************** @c ************** Generic Security Services **************** @c ********************************************************** @node Standard GSS API @chapter Standard GSS API @menu * Simple Data Types:: About integers, strings, OIDs, and OID sets. * Complex Data Types:: About credentials, contexts, names, etc. * Optional Parameters:: What value to use when you don't want one. * Error Handling:: How errors in GSS are reported and handled. * Credential Management:: Standard GSS credential functions. * Context-Level Routines:: Standard GSS context functions. * Per-Message Routines:: Standard GSS per-message functions. * Name Manipulation:: Standard GSS name manipulation functions. * Miscellaneous Routines:: Standard miscellaneous functions. * SASL GS2 Routines:: Standard SASL GS2 related functions. @end menu @node Simple Data Types @section Simple Data Types The following conventions are used by the GSS-API C-language bindings: @subsection Integer types GSS-API uses the following integer data type: @verbatim OM_uint32 32-bit unsigned integer @end verbatim @subsection String and similar data Many of the GSS-API routines take arguments and return values that describe contiguous octet-strings. All such data is passed between the GSS-API and the caller using the @code{gss_buffer_t} data type. This data type is a pointer to a buffer descriptor, which consists of a length field that contains the total number of bytes in the datum, and a value field which contains a pointer to the actual datum: @verbatim typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t; @end verbatim Storage for data returned to the application by a GSS-API routine using the @code{gss_buffer_t} conventions is allocated by the GSS-API routine. The application may free this storage by invoking the @code{gss_release_buffer} routine. Allocation of the @code{gss_buffer_desc} object is always the responsibility of the application; unused @code{gss_buffer_desc} objects may be initialized to the value @code{GSS_C_EMPTY_BUFFER}. @subsubsection Opaque data types Certain multiple-word data items are considered opaque data types at the GSS-API, because their internal structure has no significance either to the GSS-API or to the caller. Examples of such opaque data types are the input_token parameter to @code{gss_init_sec_context} (which is opaque to the caller), and the input_message parameter to @code{gss_wrap} (which is opaque to the GSS-API). Opaque data is passed between the GSS-API and the application using the @code{gss_buffer_t} datatype. @subsubsection Character strings Certain multiple-word data items may be regarded as simple ISO Latin-1 character strings. Examples are the printable strings passed to @code{gss_import_name} via the input_name_buffer parameter. Some GSS-API routines also return character strings. All such character strings are passed between the application and the GSS-API implementation using the @code{gss_buffer_t} datatype, which is a pointer to a @code{gss_buffer_desc} object. When a @code{gss_buffer_desc} object describes a printable string, the length field of the @code{gss_buffer_desc} should only count printable characters within the string. In particular, a trailing NUL character should NOT be included in the length count, nor should either the GSS-API implementation or the application assume the presence of an uncounted trailing NUL. @subsection Object Identifiers @anchor{Object Identifiers} Certain GSS-API procedures take parameters of the type @code{gss_OID}, or Object identifier. This is a type containing ISO-defined tree- structured values, and is used by the GSS-API caller to select an underlying security mechanism and to specify namespaces. A value of type @code{gss_OID} has the following structure: @verbatim typedef struct gss_OID_desc_struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID; @end verbatim The elements field of this structure points to the first byte of an octet string containing the ASN.1 BER encoding of the value portion of the normal BER TLV encoding of the @code{gss_OID}. The length field contains the number of bytes in this value. For example, the @code{gss_OID} value corresponding to @code{iso(1) identified-organization(3) icd-ecma(12) member-company(2) dec(1011) cryptoAlgorithms(7) DASS(5)}, meaning the DASS X.509 authentication mechanism, has a length field of 7 and an elements field pointing to seven octets containing the following octal values: 53,14,2,207,163,7,5. GSS-API implementations should provide constant @code{gss_OID} values to allow applications to request any supported mechanism, although applications are encouraged on portability grounds to accept the default mechanism. @code{gss_OID} values should also be provided to allow applications to specify particular name types (see section 3.10). Applications should treat @code{gss_OID_desc} values returned by GSS-API routines as read-only. In particular, the application should not attempt to deallocate them with free(). @subsection Object Identifier Sets Certain GSS-API procedures take parameters of the type @code{gss_OID_set}. This type represents one or more object identifiers (@pxref{Object Identifiers}). A @code{gss_OID_set} object has the following structure: @verbatim typedef struct gss_OID_set_desc_struct { size_t count; gss_OID elements; } gss_OID_set_desc, *gss_OID_set; @end verbatim The count field contains the number of OIDs within the set. The elements field is a pointer to an array of @code{gss_OID_desc} objects, each of which describes a single OID. @code{gss_OID_set} values are used to name the available mechanisms supported by the GSS-API, to request the use of specific mechanisms, and to indicate which mechanisms a given credential supports. All OID sets returned to the application by GSS-API are dynamic objects (the @code{gss_OID_set_desc}, the "elements" array of the set, and the "elements" array of each member OID are all dynamically allocated), and this storage must be deallocated by the application using the @code{gss_release_oid_set} routine. @node Complex Data Types @section Complex Data Types @subsection Credentials A credential handle is a caller-opaque atomic datum that identifies a GSS-API credential data structure. It is represented by the caller- opaque type @code{gss_cred_id_t}. GSS-API credentials can contain mechanism-specific principal authentication data for multiple mechanisms. A GSS-API credential is composed of a set of credential-elements, each of which is applicable to a single mechanism. A credential may contain at most one credential-element for each supported mechanism. A credential-element identifies the data needed by a single mechanism to authenticate a single principal, and conceptually contains two credential-references that describe the actual mechanism-specific authentication data, one to be used by GSS-API for initiating contexts, and one to be used for accepting contexts. For mechanisms that do not distinguish between acceptor and initiator credentials, both references would point to the same underlying mechanism-specific authentication data. Credentials describe a set of mechanism-specific principals, and give their holder the ability to act as any of those principals. All principal identities asserted by a single GSS-API credential should belong to the same entity, although enforcement of this property is an implementation-specific matter. The GSS-API does not make the actual credentials available to applications; instead a credential handle is used to identify a particular credential, held internally by GSS-API. The combination of GSS-API credential handle and mechanism identifies the principal whose identity will be asserted by the credential when used with that mechanism. The @code{gss_init_sec_context} and @code{gss_accept_sec_context} routines allow the value @code{GSS_C_NO_CREDENTIAL} to be specified as their credential handle parameter. This special credential-handle indicates a desire by the application to act as a default principal. @subsection Contexts The @code{gss_ctx_id_t} data type contains a caller-opaque atomic value that identifies one end of a GSS-API security context. The security context holds state information about each end of a peer communication, including cryptographic state information. @subsection Authentication tokens A token is a caller-opaque type that GSS-API uses to maintain synchronization between the context data structures at each end of a GSS-API security context. The token is a cryptographically protected octet-string, generated by the underlying mechanism at one end of a GSS-API security context for use by the peer mechanism at the other end. Encapsulation (if required) and transfer of the token are the responsibility of the peer applications. A token is passed between the GSS-API and the application using the @code{gss_buffer_t} conventions. @subsection Interprocess tokens Certain GSS-API routines are intended to transfer data between processes in multi-process programs. These routines use a caller-opaque octet-string, generated by the GSS-API in one process for use by the GSS-API in another process. The calling application is responsible for transferring such tokens between processes in an OS-specific manner. Note that, while GSS-API implementors are encouraged to avoid placing sensitive information within interprocess tokens, or to cryptographically protect them, many implementations will be unable to avoid placing key material or other sensitive data within them. It is the application's responsibility to ensure that interprocess tokens are protected in transit, and transferred only to processes that are trustworthy. An interprocess token is passed between the GSS-API and the application using the @code{gss_buffer_t} conventions. @subsection Names A name is used to identify a person or entity. GSS-API authenticates the relationship between a name and the entity claiming the name. Since different authentication mechanisms may employ different namespaces for identifying their principals, GSSAPI's naming support is necessarily complex in multi-mechanism environments (or even in some single-mechanism environments where the underlying mechanism supports multiple namespaces). Two distinct representations are defined for names: @itemize @item An internal form. This is the GSS-API "native" format for names, represented by the implementation-specific @code{gss_name_t} type. It is opaque to GSS-API callers. A single @code{gss_name_t} object may contain multiple names from different namespaces, but all names should refer to the same entity. An example of such an internal name would be the name returned from a call to the @code{gss_inquire_cred} routine, when applied to a credential containing credential elements for multiple authentication mechanisms employing different namespaces. This @code{gss_name_t} object will contain a distinct name for the entity for each authentication mechanism. For GSS-API implementations supporting multiple namespaces, objects of type @code{gss_name_t} must contain sufficient information to determine the namespace to which each primitive name belongs. @item Mechanism-specific contiguous octet-string forms. A format capable of containing a single name (from a single namespace). Contiguous string names are always accompanied by an object identifier specifying the namespace to which the name belongs, and their format is dependent on the authentication mechanism that employs the name. Many, but not all, contiguous string names will be printable, and may therefore be used by GSS-API applications for communication with their users. @end itemize Routines (@code{gss_import_name} and @code{gss_display_name}) are provided to convert names between contiguous string representations and the internal @code{gss_name_t} type. @code{gss_import_name} may support multiple syntaxes for each supported namespace, allowing users the freedom to choose a preferred name representation. @code{gss_display_name} should use an implementation-chosen printable syntax for each supported name-type. If an application calls @code{gss_display_name}, passing the internal name resulting from a call to @code{gss_import_name}, there is no guarantee the resulting contiguous string name will be the same as the original imported string name. Nor do name-space identifiers necessarily survive unchanged after a journey through the internal name-form. An example of this might be a mechanism that authenticates X.500 names, but provides an algorithmic mapping of Internet DNS names into X.500. That mechanism's implementation of @code{gss_import_name} might, when presented with a DNS name, generate an internal name that contained both the original DNS name and the equivalent X.500 name. Alternatively, it might only store the X.500 name. In the latter case, @code{gss_display_name} would most likely generate a printable X.500 name, rather than the original DNS name. The process of authentication delivers to the context acceptor an internal name. Since this name has been authenticated by a single mechanism, it contains only a single name (even if the internal name presented by the context initiator to @code{gss_init_sec_context} had multiple components). Such names are termed internal mechanism names, or "MN"s and the names emitted by @code{gss_accept_sec_context} are always of this type. Since some applications may require MNs without wanting to incur the overhead of an authentication operation, a second function, @code{gss_canonicalize_name}, is provided to convert a general internal name into an MN. Comparison of internal-form names may be accomplished via the @code{gss_compare_name} routine, which returns true if the two names being compared refer to the same entity. This removes the need for the application program to understand the syntaxes of the various printable names that a given GSS-API implementation may support. Since GSS-API assumes that all primitive names contained within a given internal name refer to the same entity, @code{gss_compare_name} can return true if the two names have at least one primitive name in common. If the implementation embodies knowledge of equivalence relationships between names taken from different namespaces, this knowledge may also allow successful comparison of internal names containing no overlapping primitive elements. When used in large access control lists, the overhead of invoking @code{gss_import_name} and @code{gss_compare_name} on each name from the ACL may be prohibitive. As an alternative way of supporting this case, GSS-API defines a special form of the contiguous string name which may be compared directly (e.g. with memcmp()). Contiguous names suitable for comparison are generated by the @code{gss_export_name} routine, which requires an MN as input. Exported names may be re- imported by the @code{gss_import_name} routine, and the resulting internal name will also be an MN. The @code{gss_OID} constant @code{GSS_C_NT_EXPORT_NAME} indentifies the "export name" type, and the value of this constant is given in Appendix A. Structurally, an exported name object consists of a header containing an OID identifying the mechanism that authenticated the name, and a trailer containing the name itself, where the syntax of the trailer is defined by the individual mechanism specification. The precise format of an export name is defined in the language-independent GSS-API specification [GSSAPI]. Note that the results obtained by using @code{gss_compare_name} will in general be different from those obtained by invoking @code{gss_canonicalize_name} and @code{gss_export_name}, and then comparing the exported names. The first series of operation determines whether two (unauthenticated) names identify the same principal; the second whether a particular mechanism would authenticate them as the same principal. These two operations will in general give the same results only for MNs. The @code{gss_name_t} datatype should be implemented as a pointer type. To allow the compiler to aid the application programmer by performing type-checking, the use of (void *) is discouraged. A pointer to an implementation-defined type is the preferred choice. Storage is allocated by routines that return @code{gss_name_t} values. A procedure, @code{gss_release_name}, is provided to free storage associated with an internal-form name. @subsection Channel Bindings GSS-API supports the use of user-specified tags to identify a given context to the peer application. These tags are intended to be used to identify the particular communications channel that carries the context. Channel bindings are communicated to the GSS-API using the following structure: @verbatim typedef struct gss_channel_bindings_struct { OM_uint32 initiator_addrtype; gss_buffer_desc initiator_address; OM_uint32 acceptor_addrtype; gss_buffer_desc acceptor_address; gss_buffer_desc application_data; } *gss_channel_bindings_t; @end verbatim The initiator_addrtype and acceptor_addrtype fields denote the type of addresses contained in the initiator_address and acceptor_address buffers. The address type should be one of the following: @verbatim GSS_C_AF_UNSPEC Unspecified address type GSS_C_AF_LOCAL Host-local address type GSS_C_AF_INET Internet address type (e.g. IP) GSS_C_AF_IMPLINK ARPAnet IMP address type GSS_C_AF_PUP pup protocols (eg BSP) address type GSS_C_AF_CHAOS MIT CHAOS protocol address type GSS_C_AF_NS XEROX NS address type GSS_C_AF_NBS nbs address type GSS_C_AF_ECMA ECMA address type GSS_C_AF_DATAKIT datakit protocols address type GSS_C_AF_CCITT CCITT protocols GSS_C_AF_SNA IBM SNA address type GSS_C_AF_DECnet DECnet address type GSS_C_AF_DLI Direct data link interface address type GSS_C_AF_LAT LAT address type GSS_C_AF_HYLINK NSC Hyperchannel address type GSS_C_AF_APPLETALK AppleTalk address type GSS_C_AF_BSC BISYNC 2780/3780 address type GSS_C_AF_DSS Distributed system services address type GSS_C_AF_OSI OSI TP4 address type GSS_C_AF_X25 X.25 GSS_C_AF_NULLADDR No address specified @end verbatim Note that these symbols name address families rather than specific addressing formats. For address families that contain several alternative address forms, the initiator_address and acceptor_address fields must contain sufficient information to determine which address form is used. When not otherwise specified, addresses should be specified in network byte-order (that is, native byte-ordering for the address family). Conceptually, the GSS-API concatenates the initiator_addrtype, initiator_address, acceptor_addrtype, acceptor_address and application_data to form an octet string. The mechanism calculates a MIC over this octet string, and binds the MIC to the context establishment token emitted by @code{gss_init_sec_context}. The same bindings are presented by the context acceptor to @code{gss_accept_sec_context}, and a MIC is calculated in the same way. The calculated MIC is compared with that found in the token, and if the MICs differ, @code{gss_accept_sec_context} will return a @code{GSS_S_BAD_BINDINGS} error, and the context will not be established. Some mechanisms may include the actual channel binding data in the token (rather than just a MIC); applications should therefore not use confidential data as channel-binding components. Individual mechanisms may impose additional constraints on addresses and address types that may appear in channel bindings. For example, a mechanism may verify that the initiator_address field of the channel bindings presented to @code{gss_init_sec_context} contains the correct network address of the host system. Portable applications should therefore ensure that they either provide correct information for the address fields, or omit addressing information, specifying @code{GSS_C_AF_NULLADDR} as the address-types. @node Optional Parameters @section Optional Parameters Various parameters are described as optional. This means that they follow a convention whereby a default value may be requested. The following conventions are used for omitted parameters. These conventions apply only to those parameters that are explicitly documented as optional. @itemize @item gss_buffer_t types. Specify GSS_C_NO_BUFFER as a value. For an input parameter this signifies that default behavior is requested, while for an output parameter it indicates that the information that would be returned via the parameter is not required by the application. @item Integer types (input). Individual parameter documentation lists values to be used to indicate default actions. @item Integer types (output). Specify NULL as the value for the pointer. @item Pointer types. Specify NULL as the value. @item Object IDs. Specify GSS_C_NO_OID as the value. @item Object ID Sets. Specify GSS_C_NO_OID_SET as the value. @item Channel Bindings. Specify GSS_C_NO_CHANNEL_BINDINGS to indicate that channel bindings are not to be used. @end itemize @node Error Handling @section Error Handling @cindex status codes @cindex mechanism status codes Every GSS-API routine returns two distinct values to report status information to the caller: GSS status codes and Mechanism status codes. @subsection GSS status codes GSS-API routines return GSS status codes as their @code{OM_uint32} function value. These codes indicate errors that are independent of the underlying mechanism(s) used to provide the security service. The errors that can be indicated via a GSS status code are either generic API routine errors (errors that are defined in the GSS-API specification) or calling errors (errors that are specific to these language bindings). A GSS status code can indicate a single fatal generic API error from the routine and a single calling error. In addition, supplementary status information may be indicated via the setting of bits in the supplementary info field of a GSS status code. These errors are encoded into the 32-bit GSS status code as follows: @verbatim MSB LSB |------------------------------------------------------------| | Calling Error | Routine Error | Supplementary Info | |------------------------------------------------------------| Bit 31 24 23 16 15 0 @end verbatim Hence if a GSS-API routine returns a GSS status code whose upper 16 bits contain a non-zero value, the call failed. If the calling error field is non-zero, the invoking application's call of the routine was erroneous. Calling errors are defined in table 3-1. If the routine error field is non-zero, the routine failed for one of the routine- specific reasons listed below in table 3-2. Whether or not the upper 16 bits indicate a failure or a success, the routine may indicate additional information by setting bits in the supplementary info field of the status code. The meaning of individual bits is listed below in table 3-3. @vindex GSS_S_... @verbatim Table 3-1 Calling Errors Name Value in field Meaning ---- -------------- ------- GSS_S_CALL_INACCESSIBLE_READ 1 A required input parameter could not be read GSS_S_CALL_INACCESSIBLE_WRITE 2 A required output parameter could not be written. GSS_S_CALL_BAD_STRUCTURE 3 A parameter was malformed @end verbatim @verbatim Table 3-2 Routine Errors Name Value in field Meaning ---- -------------- ------- GSS_S_BAD_MECH 1 An unsupported mechanism was requested GSS_S_BAD_NAME 2 An invalid name was supplied GSS_S_BAD_NAMETYPE 3 A supplied name was of an unsupported type GSS_S_BAD_BINDINGS 4 Incorrect channel bindings were supplied GSS_S_BAD_STATUS 5 An invalid status code was supplied GSS_S_BAD_MIC GSS_S_BAD_SIG 6 A token had an invalid MIC GSS_S_NO_CRED 7 No credentials were supplied, or the credentials were unavailable or inaccessible. GSS_S_NO_CONTEXT 8 No context has been established GSS_S_DEFECTIVE_TOKEN 9 A token was invalid GSS_S_DEFECTIVE_CREDENTIAL 10 A credential was invalid GSS_S_CREDENTIALS_EXPIRED 11 The referenced credentials have expired GSS_S_CONTEXT_EXPIRED 12 The context has expired GSS_S_FAILURE 13 Miscellaneous failure (see text) GSS_S_BAD_QOP 14 The quality-of-protection requested could not be provided GSS_S_UNAUTHORIZED 15 The operation is forbidden by local security policy GSS_S_UNAVAILABLE 16 The operation or option is unavailable GSS_S_DUPLICATE_ELEMENT 17 The requested credential element already exists GSS_S_NAME_NOT_MN 18 The provided name was not a mechanism name @end verbatim @verbatim Table 3-3 Supplementary Status Bits Name Bit Number Meaning ---- ---------- ------- GSS_S_CONTINUE_NEEDED 0 (LSB) Returned only by gss_init_sec_context or gss_accept_sec_context. The routine must be called again to complete its function. See routine documentation for detailed description GSS_S_DUPLICATE_TOKEN 1 The token was a duplicate of an earlier token GSS_S_OLD_TOKEN 2 The token's validity period has expired GSS_S_UNSEQ_TOKEN 3 A later token has already been processed GSS_S_GAP_TOKEN 4 An expected per-message token was not received @end verbatim The routine documentation also uses the name GSS_S_COMPLETE, which is a zero value, to indicate an absence of any API errors or supplementary information bits. @findex GSS_CALLING_ERROR @findex GSS_ROUTINE_ERROR @findex GSS_SUPPLEMENTARY_INFO @findex GSS_ERROR All GSS_S_xxx symbols equate to complete @code{OM_uint32} status codes, rather than to bitfield values. For example, the actual value of the symbol @code{GSS_S_BAD_NAMETYPE} (value 3 in the routine error field) is 3<<16. The macros @code{GSS_CALLING_ERROR}, @code{GSS_ROUTINE_ERROR} and @code{GSS_SUPPLEMENTARY_INFO} are provided, each of which takes a GSS status code and removes all but the relevant field. For example, the value obtained by applying @code{GSS_ROUTINE_ERROR} to a status code removes the calling errors and supplementary info fields, leaving only the routine errors field. The values delivered by these macros may be directly compared with a @code{GSS_S_xxx} symbol of the appropriate type. The macro @code{GSS_ERROR} is also provided, which when applied to a GSS status code returns a non-zero value if the status code indicated a calling or routine error, and a zero value otherwise. All macros defined by GSS-API evaluate their argument(s) exactly once. A GSS-API implementation may choose to signal calling errors in a platform-specific manner instead of, or in addition to the routine value; routine errors and supplementary info should be returned via major status values only. The GSS major status code @code{GSS_S_FAILURE} is used to indicate that the underlying mechanism detected an error for which no specific GSS status code is defined. The mechanism-specific status code will provide more details about the error. In addition to the explicit major status codes for each API function, the code @code{GSS_S_FAILURE} may be returned by any routine, indicating an implementation-specific or mechanism-specific error condition, further details of which are reported via the @code{minor_status} parameter. @subsection Mechanism-specific status codes GSS-API routines return a minor_status parameter, which is used to indicate specialized errors from the underlying security mechanism. This parameter may contain a single mechanism-specific error, indicated by a @code{OM_uint32} value. The minor_status parameter will always be set by a GSS-API routine, even if it returns a calling error or one of the generic API errors indicated above as fatal, although most other output parameters may remain unset in such cases. However, output parameters that are expected to return pointers to storage allocated by a routine must always be set by the routine, even in the event of an error, although in such cases the GSS-API routine may elect to set the returned parameter value to NULL to indicate that no storage was actually allocated. Any length field associated with such pointers (as in a @code{gss_buffer_desc} structure) should also be set to zero in such cases. @node Credential Management @section Credential Management @verbatim GSS-API Credential-management Routines Routine Function ------- -------- gss_acquire_cred Assume a global identity; Obtain a GSS-API credential handle for pre-existing credentials. gss_add_cred Construct credentials incrementally. gss_inquire_cred Obtain information about a credential. gss_inquire_cred_by_mech Obtain per-mechanism information about a credential. gss_release_cred Discard a credential handle. @end verbatim @include texi/gss_acquire_cred.texi @include texi/gss_add_cred.texi @include texi/gss_inquire_cred.texi @include texi/gss_inquire_cred_by_mech.texi @include texi/gss_release_cred.texi @node Context-Level Routines @section Context-Level Routines @verbatim GSS-API Context-Level Routines Routine Function ------- -------- gss_init_sec_context Initiate a security context with a peer application. gss_accept_sec_context Accept a security context initiated by a peer application. gss_delete_sec_context Discard a security context. gss_process_context_token Process a token on a security context from a peer application. gss_context_time Determine for how long a context will remain valid. gss_inquire_context Obtain information about a security context. gss_wrap_size_limit Determine token-size limit for gss_wrap on a context. gss_export_sec_context Transfer a security context to another process. gss_import_sec_context Import a transferred context. @end verbatim @include texi/gss_init_sec_context.texi @include texi/gss_accept_sec_context.texi @include texi/gss_delete_sec_context.texi @include texi/gss_process_context_token.texi @include texi/gss_context_time.texi @include texi/gss_inquire_context.texi @include texi/gss_wrap_size_limit.texi @include texi/gss_export_sec_context.texi @include texi/gss_import_sec_context.texi @node Per-Message Routines @section Per-Message Routines @verbatim GSS-API Per-message Routines Routine Function ------- -------- gss_get_mic Calculate a cryptographic message integrity code (MIC) for a message; integrity service. gss_verify_mic Check a MIC against a message; verify integrity of a received message. gss_wrap Attach a MIC to a message, and optionally encrypt the message content. confidentiality service gss_unwrap Verify a message with attached MIC, and decrypt message content if necessary. @end verbatim @include texi/gss_get_mic.texi @include texi/gss_verify_mic.texi @include texi/gss_wrap.texi @include texi/gss_unwrap.texi @node Name Manipulation @section Name Manipulation @verbatim GSS-API Name manipulation Routines Routine Function ------- -------- gss_import_name Convert a contiguous string name to internal-form. gss_display_name Convert internal-form name to text. gss_compare_name Compare two internal-form names. gss_release_name Discard an internal-form name. gss_inquire_names_for_mech List the name-types supported by. the specified mechanism. gss_inquire_mechs_for_name List mechanisms that support the specified name-type. gss_canonicalize_name Convert an internal name to an MN. gss_export_name Convert an MN to export form. gss_duplicate_name Create a copy of an internal name. @end verbatim @include texi/gss_import_name.texi @include texi/gss_display_name.texi @include texi/gss_compare_name.texi @include texi/gss_release_name.texi @include texi/gss_inquire_names_for_mech.texi @include texi/gss_inquire_mechs_for_name.texi @include texi/gss_canonicalize_name.texi @include texi/gss_export_name.texi @include texi/gss_duplicate_name.texi @node Miscellaneous Routines @section Miscellaneous Routines @verbatim GSS-API Miscellaneous Routines Routine Function ------- -------- gss_add_oid_set_member Add an object identifier to a set. gss_display_status Convert a GSS-API status code to text. gss_indicate_mechs Determine available underlying authentication mechanisms. gss_release_buffer Discard a buffer. gss_release_oid_set Discard a set of object identifiers. gss_create_empty_oid_set Create a set containing no object identifiers. gss_test_oid_set_member Determines whether an object identifier is a member of a set. gss_encapsulate_token Encapsulate a context token. gss_decapsulate_token Decapsulate a context token. gss_oid_equal Compare two OIDs for equality. @end verbatim @include texi/gss_add_oid_set_member.texi @include texi/gss_display_status.texi @include texi/gss_indicate_mechs.texi @include texi/gss_release_buffer.texi @include texi/gss_release_oid_set.texi @include texi/gss_create_empty_oid_set.texi @include texi/gss_test_oid_set_member.texi @include texi/gss_encapsulate_token.texi @include texi/gss_decapsulate_token.texi @include texi/gss_oid_equal.texi @node SASL GS2 Routines @section SASL GS2 Routines @include texi/gss_inquire_mech_for_saslname.texi @include texi/gss_inquire_saslname_for_mech.texi @c ********************************************************** @c ************** Generic Security Services **************** @c ********************************************************** @node Extended GSS API @chapter Extended GSS API None of the following functions are standard GSS API functions. As such, they are not declared in @file{gss/api.h}, but rather in @file{gss/ext.h} (which is included from @file{gss.h}). @xref{Header}. @include texi/gss_check_version.texi @include texi/gss_userok.texi @c ********************************************************** @c ********************* Invoking gss ********************* @c ********************************************************** @node Invoking gss @chapter Invoking gss @pindex gss @cindex invoking @command{gss} @cindex command line @majorheading Name GNU GSS (gss) -- Command line interface to the GSS Library. @majorheading Description @code{gss} is the main program of GNU GSS. Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. @majorheading Commands @code{gss} recognizes these commands: @verbatim -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. @end verbatim @majorheading Other Options These are some standard parameters. @verbatim -h, --help Print help and exit -V, --version Print version and exit -q, --quiet Silent operation (default=off) @end verbatim @majorheading Examples @verbatim -h, --help Print help and exit -V, --version Print version and exit -q, --quiet Silent operation (default=off) @end verbatim @c ********************************************************** @c ******************* Acknowledgements ******************* @c ********************************************************** @node Acknowledgements @chapter Acknowledgements This manual borrows text from RFC 2743 and RFC 2744 that describe GSS API formally. @c ********************************************************** @c ******************* Appendices ************************* @c ********************************************************** @node Criticism of GSS @appendix Criticism of GSS The author has doubts whether GSS is the best solution for free software projects looking for a implementation agnostic security framework. We express these doubts in this section, so that the reader can judge for herself if any of the potential problems discussed here are relevant for their project, or if the benefit outweigh the problems. We are aware that some of the opinions are highly subjective, but we offer them in the hope they can serve as anecdotal evidence. GSS can be criticized on several levels. We start with the actual implementation. GSS does not appear to be designed by experienced C programmers. While generally this may be a good thing (C is not the best language), but since they defined the API in C, it is unfortunate. The primary evidence of this is the major_status and minor_status error code solution. It is a complicated way to describe error conditions, but what makes matters worse, the error condition is separated; half of the error condition is in the function return value and the other half is in the first argument to the function, which is always a pointer to an integer. (The pointer is not even allowed to be @code{NULL}, if the application doesn't care about the minor error code.) This makes the API unreadable, and difficult to use. A better solutions would be to return a struct containing the entire error condition, which can be accessed using macros, although we acknowledge that the C language used at the time GSS was designed may not have allowed this (this may in fact be the reason the awkward solution was chosen). Instead, the return value could have been passed back to callers using a pointer to a struct, accessible using various macros, and the function could have a void prototype. The fact that minor_status is placed first in the parameter list increases the pain it is to use the API. Important parameters should be placed first. A better place for minor_status (if it must be present at all) would have been last in the prototypes. Another evidence of the C inexperience are the memory management issues; GSS provides functions to deallocate data stored within, e.g., @code{gss_buffer_t} but the caller is responsible of deallocating the structure pointed at by the @code{gss_buffer_t} (i.e., the @code{gss_buffer_desc}) itself. Memory management issues are error prone, and this division easily leads to memory leaks (or worse). Instead, the API should be the sole owner of all @code{gss_ctx_id_t}, @code{gss_cred_id_t}, and @code{gss_buffer_t} structures: they should be allocated by the library, and deallocated (using the utility functions defined for this purpose) by the library. TBA: specification is unclear how memory for OIDs are managed. For example, who is responsible for deallocate potentially newly allocated OIDs returned as @code{actual_mechs} in @code{gss_acquire_cred}? Further, are OIDs deeply copied into OID sets? In other words, if I add an OID into an OID set, and modify the original OID, will the OID in the OID set be modified too? Another illustrating example is the sample GSS header file given in the RFC, which contains: @example /* * We have included the xom.h header file. Verify that OM_uint32 * is defined correctly. */ #if sizeof(gss_uint32) != sizeof(OM_uint32) #error Incompatible definition of OM_uint32 from xom.h #endif @end example The C pre-processor does not know about the @code{sizeof} function, so it is treated as an identifier, which maps to 0. Thus, the expression does not check that the size of @code{OM_uint32} is correct. It checks whether the expression @code{0 != 0} holds. TBA: thread issues TBA: multiple mechanisms in a GSS library TBA: high-level design criticism. TBA: no credential forwarding. TBA: internationalization TBA: dynamically generated OIDs and memory deallocation issue. I.e., should gss_import_name or gss_duplicate_name allocate memory and copy the OID provided, or simply copy the pointer? If the former, who would deallocate that memory? If the latter, the application may deallocate or modify the OID, which seem unwanted. TBA: krb5: no way to access authorization-data TBA: krb5: firewall/pre-IP: iakerb status? TBA: krb5: single-DES only TBA: the API may block, unusable in select() based servers. Especially if the servers contacted is decided by the, yet unauthenticated, remote client. TBA: krb5: no support for GSS_C_PROT_READY_FLAG. We support it anyway, though. TBA: krb5: gssapi-cfx differ from rfc 1964 in the reply token in that the latter require presence of sequence numbers whereas the former doesn't. Finally we note that few free security applications uses GSS, perhaps the only major exception to this are Kerberos 5 implementations. While not substantial evidence, this do suggest that the GSS may not be the simplest solution available to solve actual problems, since otherwise more projects would have chosen to take advantage of the work that went into GSS instead of using another framework (or designing their own solution). Our conclusion is that free software projects that are looking for a security framework should evaluate carefully whether GSS actually is the best solution before using it. In particular it is recommended to compare GSS with the Simple Authentication and Security Layer (SASL) framework, which in several situations provide the same feature as GSS does. The most compelling argument for SASL over GSS is, as its acronym suggest, Simple, whereas GSS is far from it. However, that said, for free software projects that wants to support Kerberos 5, we do acknowledge that no other framework provides a more portable and interoperable interface into the Kerberos 5 system. If your project needs to use Kerberos 5 specifically, we do recommend you to use GSS instead of the Kerberos 5 implementation specific APIs. @node Copying Information @appendix Copying Information @menu * GNU Free Documentation License:: License for copying this manual. * GNU GPL:: License for copying the programs. @end menu @node GNU Free Documentation License @appendixsec GNU Free Documentation License @cindex FDL, GNU Free Documentation License @include fdl-1.3.texi @node GNU GPL @appendixsec GNU General Public License @cindex GPL, GNU General Public License @cindex License, GNU GPL @include gpl-3.0.texi @node Concept Index @unnumbered Concept Index @printindex cp @node API Index @unnumbered API Index @printindex fn @bye gss-1.0.2/doc/gss.10000644000000000000000000000270611663555006010634 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.38.2. .TH GSS "1" "November 2011" "gss 1.0.2" "User Commands" .SH NAME gss \- Generic Security Service command line interface .SH SYNOPSIS .B gss \fIOPTIONS\fR... .SH DESCRIPTION Command line interface to GSS, used to explain error codes. .PP Mandatory arguments to long options are mandatory for short options too. .TP \fB\-h\fR, \fB\-\-help\fR Print help and exit. .TP \fB\-V\fR, \fB\-\-version\fR Print version and exit. .TP \fB\-l\fR, \fB\-\-list\-mechanisms\fR List information about supported mechanisms in a human readable format. .TP \fB\-m\fR, \fB\-\-major\fR=\fILONG\fR Describe a `major status' error code value. .TP \fB\-q\fR, \fB\-\-quiet\fR Silent operation (default=off). .SH AUTHOR Written by Simon Josefsson. .SH "REPORTING BUGS" Report bugs to: bug\-gss@gnu.org .br GNU Generic Security Service home page: .br General help using GNU software: .SH COPYRIGHT Copyright \(co 2011 Simon Josefsson. License GPLv3+: GNU GPL version 3 or later . .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.2/doc/gss.ps0000644000000000000000000267702111663555056011135 00000000000000%!PS-Adobe-2.0 %%Creator: dvips(k) 5.98 Copyright 2009 Radical Eye Software %%Title: gss.dvi %%CreationDate: Fri Nov 25 00:58:38 2011 %%Pages: 86 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%DocumentFonts: CMBX12 CMR10 CMSY10 CMMI12 CMMI10 CMTT10 CMSS10 CMSL10 %%+ CMSLTT10 CMTT9 CMR9 CMMI9 %%DocumentPaperSizes: a4 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o gss.ps gss.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2011.11.25:0058 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMMI9 %!PS-AdobeFont-1.0: CMMI9 003.002 %%Title: CMMI9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI9 known{/CMMI9 findfont dup/UniqueID known{dup /UniqueID get 5087384 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI9 def /FontBBox {-29 -250 1075 750 }readonly def /UniqueID 5087384 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI9.) readonly def /FullName (CMMI9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBD07FC5A8862A8DB 7E2B90C16137614CDAFB584A32E50C0935109679E31306B8BDD29F1756946A67 7A7C2D9BA6FAB9B20A424AA0E6F4BA64C2801C2FB5A1156CBEED0ACB95F697B8 BC2A6E6AA7EB1F9FD8E3C9B1A16697EE1F0E7400421A7765AB218FC837A49365 82DC6B2C877A7DA84A81E6126EE96DB25C17A207D3020A045DCDAA064360DFFC E3CD50E21ED239D2A6450D04F879A26443ADEB6A20ACC504989876476C7D1A74 91564FEA1F4CC2C8C8FDF666DB537F315AE1886C73CB5B00E67E7B398A6C018E 540EAEE98BB8136C4F044EDD63C33431D2CF9740F051DF365A4045D9D8782112 7BB5D494D9235BA98CF2F30CB119F5A904C32AD04C960C43FC1F5FD8DA7D90D8 93AFB59F3FF4F796481AE2A7548F948FECFC6C127C4D3F159B08F206AE8C296D EE470DB2F879EA79475E029D22D7A8535C09A18689DB0609CC233E5199C02756 972CC9C94D9FCE264DEE5D75C8D651E4E2D1189AD9588CB815722BB5EE3C379A 6F31C2E6AE1AE4CCEB29766190AFA20EA937114978752189F1A9F42B39483149 796FCFA123BA9CCD1D9BE28289660BCAE16C40B5B504058D55CFCBFB4F4E3D94 DDBF39F157E63946534DA81C018B1C01B9F10DDB55E0A5C2B3985ED1977C039B D6755EA42CD09E27751E159C30B93F376DBE61CD3AED34BA36A768F232EB3B80 E3E6B77C4A48D408217818E398B83D995AB6BC871F20991DF57313D6EB0C793D 0F28088EBDB7F38DAF7E01AAB3476EC24D7BB38A9889A7D3038D930FF4289B83 F54A7BE1E2D98A3822098D2E4D067A0D400C20C0B2B4BBD74C13ED1B827490F9 ECF48F8C3994C1C5AAC9CF783BFA4F307528F51EAB55F961808A42ED53F00C97 72A432EAEDCFCFB622389BDA707B6ACC9433B065CF29EBFE93AD14B8ECD5F47F F073F11822C49B8BE924CDFA6348C3A75E9BB9BF3F31C41716B34794B28CDAC9 4DB8B087E180A9B3B17680F73D9C12C8D86A922C948093629F5D7F542ED882A1 692F4F6696865E53E3E2DD43B2D5E8C989CFAA5CA5C4C5999045E170BDE9921C BACD6F2863F5553EAB2BA2D4A9034729EC0C4201DE90DA89B0A27C5A5C974109 4E37BFB3F46B3A506169FB0C68E1CAFC844419A8D261A1FD86A3BB78E33D5FB1 CFC687A5975987CE45155E5FDFAF0CC5FD5568CB1C26212F92E88255F0549F59 41B33125946DE43436BEC00804063FBF03EC796E3361B1C852EC3038D107F80A 9198968265D5488B26D7670B22C2D75EDFFD1B7B4AAFA36DFD94640C9D0E2D20 5BCA18683EFB91834A3939AB8EB60E2F09655BE003582634C52770DA9668C292 2E02929D812EE2B0CC65F020064AD5BDAC5F5693B30508F40ED8E20E87149BD5 8DD41AFF83FD1944804017DC5A04512E593549FFFAE501131CE2FDB65EFD0B8B 33809CBAEE411B3941C241550B9C30DD28088708F1C0CC3125CBEDCD985EAD28 03313741F67DB5744A87B381147D5BA70AE1145C27F794854628D87D6C1ECCA1 749E3465B950175D3C3F40E344297BD92D3190041A4392033A79BEAEAABB8DBE CC14E39612F43721CFAE6F79074429221CA588AA2501DE520A464DE157A03AFE 3C082FAE7628FC0C57FFC61D0330AE6332D20FDBB09BF36848FE05E782D6379F 64F9C82C45402481B0A35989027F9756BF5A79DA2D96E10F39167ADB4305578F 90B509B6891338FA1D67DCFD61804AA6621526B2EE4769589A2646581712AC05 DA6E98D16494F07D612743058F54FEE516BD89A8EC3E03F9D7F905175D3412C8 F7329077FD6EB25213F3CAC94BA0C3363B759401B6EF7548C7D709F3241D030D 4EB46A1AE81863C412BDDAEA6084C37143A4C5E41BC646315B1CD09F934186CF 49D1D8239E363A435307030BD79536B50B723A39DD763DB539F24A10DDA12BD4 E467339D2D6DB177D6FC539FA77D2DE4118EBAC161E928749F7C753ADEF86117 58619F1155C563DF2E11ACA8347908B98113AED58FCD0394150EEC94B7F986EE 88BF7171D208D8F1774B1DD478F0C2958AE372D257E7EDF0F6B5D6059CC4D5D3 B00FCBD2E9CBE79235B9A5A3E943CC27AABB58728C95C7DBD4F4A1F8A4DA99AE 7377B0CC0BFBD454794398AE0D5F7281771FFE87B25A819F36E692286A42D776 01794A43CA9BB30FB8FFDAAF014F909A369E34C2F6C75B7D4EB9DB0580E33F46 19654443AFF8384B95600B86FF8E41FEFD032355626D60C7507C058EF832DF41 194B48A36F11082D1DCF4723E21401E0C7447AABFAB4639B26E3D2730E348F55 53EBFF39CDD03E06E2FA5FB379603C879EDB7E1A10F89695C9C47DEEE52BE0A3 F446F187AB9D7E93E6F9387F21129034F36DF40605D28FD526AF82CA9D232BE4 412567F06B38ECCD496EF40A7B243E46C9FEBA4F1BF4B1ECA029C5EC239353D6 C0B100BF7E7DB33BD1277DE104F15AA19F37340A777741AD1AD693BC76DA48CC C6F83CD84591ECFEE375979972B0FAC4C10B625E4BFB261B9FFFA83C31DA0108 4FFB6377466E9739E0EB64424BD9FC7239C7DD834EC6788A0F97FE714AF92831 E1BA36A8A9E24739F1DC82DC26CC3CE28C210AA7C569B19E1784D663A0CA4E81 AFF43E86D6F5F63778847700072CEB77A4EB946DC1F23DBC00BCE773203F76DF 00F0B085F31420672974DDC642D885E95BA6BBE43E1CA8ABF464D9881CDECC7A E98E31B9754C9B72A8BD5CF6D4D214DBC3BA7A0CDF6635953F5AC1E7639C4A91 C7AECE4C75CA3389C348F656FC2CC96C84C85A926237B6504DB51937C9CFCDAC B75C31ED570D180757884E27757783DB2D5F35ECC48C496CDA342D49AA947BF8 2FDAD2F19DFE8CD1C76A8FA08F33681F3E12E229D7DAB45BE3A3F258B5ED4980 F15340CF20D965252843E026803E8AEE736EC41CCA82167401977AB719AA2F50 0B791EEAA82027B3C712D2EB9D14BF8F94FBDE2227609BCAC41EC08DE2BAC023 28352F913F7DF08D4E1C66E83F764578B22B4EB7191E852B91ADCCB1BCFDB1F4 E63DFD152E86FA9DE9BC8908130EFDE29CC4401339C05B5B9764CF8EFF14951A C6C13AF979546996BF22F2B96D3D585B90CD27DADEC78914DA48432C6ACBDD42 20EF583FD41F2F6D6D10C3DF7DD077304B5940BB0462656E306CBD91EB9B756B 7014B1884A36201EC582FC9345C386043DD2818FC301EF78791C1D7854F8FACE 5DE9801DE9F59D5B4271E003AB897B2EF49501589D681D59CFFD9B03F722EEF4 74ABD29997515DA3591496B62666744EA76DCA45504F8075C0652D6779DBEAE4 90430C2945FBD60AD53B51DDBEFC7ED703C418B4B244C8FFA5A3C1B7600C5A55 3EBDB93C16AC191C3A28EB2279BD3F0D67C826BC6A73D3C0AD02262368AB4621 98A1605F2887BC5880E1AF2780330E0FD01D7CAACBB0F008A42C427F38236066 54799594E515B289044BAC4DADF8B3686B4372C5110201221FDA923F131E07E7 93C44BAD406838BA4D1C277EF74098B8C0EDC41EEDD58C195D7DFF5FEDBF96FC 19CEBC6C3006DD2CBF76916B4298BB915663C2F61AFD7747E03A03BD7280197A 9DA590E3D081C6F53DBF94E8D6FDDDD910A70AB18A0F6D48A590FFAB314D6CFD E3FB20C1F3C91063F00726A2C13A3D48323F9854839405E5A29D66A43E6E2B84 A8B3765F1D817071D4D6FF42BC785C2D11AB2B9452F141696CE19C6AFB9777DB 107D6E22D8CC6C26440BC48248AD8805C4329D46BF433741CB519B21663392DA 5DC7FC9BF37E5BC396BFADD7263D09F6B4D69594AB386B7BDFCF3BACB97A0E08 22013E716E642592A20136CF9CFD61D4E515D80E06A4CB4FC9D9B916C93CEA95 B83B98C48CF36C1D02291D4F5C0419338D64E33C90C90EDD2BA3B96D70FAFE0D 403A060CFF448D3E28A9B1E3916018465E86095BAAB4706CF7ED350D7C554789 D7F4FE5F180767DE8739259E68CF142040BE1E2E8C6152DE3417C1FAEA7584B6 20781DC4A9796431EE713DAC4E713C839D7A4FDC8AB6BFEFFE767AFD8B67FDA6 943AD387E5D3BCB09039ADB64ECC2BE2620C6EC269E708DD06C311F450099E33 AF46AEC644222E7DC4DBB9371EE12CFBC4F9B27AB46AD1DA96CE006E1DF8291F A550A93026CBFFC1087B134EC6EA76F5E109CDA58FF47338A0039A786A575F70 B8A03A4F9C8D07A4C856C77D9BCC8E3EAA740172D0C2D0A15BA35C9E5717D7FA 2691774DDE730BB9D7C70D7AE103DB8D35F3728470C76EBA0E670634E1A0BA84 2FA102BAD7271DF2680D86A4CA6FC353869987700E5E3FD778165456033D624F E9B3E80EBF431ACC934AA0357E824B8AD73E222B510DE8445C55C07C8E5DE46D E478F832BDDECAF2EBB11941DCF84CCD887043FAED9AA90D12BC8CA9A0C8D94F 8D3BF1F80B14B6CAE6BB1C6AA405AA64BB94D5A82CFEA548BA070796A02F9642 87326D066101435AB9EB40BA9EA9E61B363F5F5E3B924369796E8B78DE3414A4 2B79C6A13ECB2F34E6299658D07D2B3DEF3D4383CE009A927F0EF5C196652842 D96B857AB5E905201E7E8BA21A5EBED1FC6863BA9A1A6E5390407F75055E2EEC 512FBDB3E82CEA13663F1A1944DA072C765D8CED06AB461470C5723BDC1271D4 4D1D049D3EB131743F1EC9A6ADDAA038ACA2C41D139DC6A84EC3C61AC7F1E559 6155CC2F49171F6E07CF56D721D9728E87FC7DCBCAC46455A3694C765FE807E9 9CBC2D304AF37E0F28CCB22F239541B53A4D24D09C662559267467EA487BD33A 0BEFD4899B581D20582930703A868655C31BE935364CA6A95FBCB22CB714C040 9718824DFE97929D0482430726CCB5A5307957DD2432A9B6271E849148DEB76B FAA290FF6D0B18DC5B76407852E81C105EC6CFAB0F620C6DC9DA555A33C167B1 430A8BC338BFC7D75B7099CC906AD923FA107C74D3FBB719D77A4E5A685FF9D8 56424EE4AA074434B809D894ED50F6A60A035C5223EA25DD8983B9B34210DABE 718D7B2BEB293FF1B63CFB1CBDAFC69552963D90F5E3FF533A3FDBB626E9FAA3 F3C119E5E01C7BFF832A033C3515BF049E29558B1DAD652F2888E339E67D15AE 95F9BD14E3253DFE9072B24C0E7E85025B71096AF51C86AECB2921126A43156B EC812B32B1164BD9B2B947D503C015616DBF2024F5C8CB3236C1DCA653D661FE 6B1C19A22D272A176B7F1B7F9E67AF40DB0EFD4940E58B2A050249CA4E55CAF7 6ACFD84FB46FEF952D18552B3972D79D808B4C263B8C7E1BB647A2D03E102867 630D5C3F2C917F765A4F6FB8106BA6A9D0093E27A4CB6049C2371287D94B5111 6E7020776EBD744C6C920464BBBC0AC206033E8240017F8CCB112596ECD7CAFA 89950CF43FD87ACA750C03A778A37FBCE9C82C2F5ABB135BB02DA8E8C0D24475 3BEA9D79372D0022FF1ABD378C151417DBC69FE5C9CA38D23A3900E34BF924A2 90777ACDC37930B67DD44A2E76DDBD9B89598D5F626BFD325A978D277265DA47 38CFAF16E7FF1946E15F41CA73F7B4B02E5AE8FC4C37B115BC567E4EEEFEFC34 EC8974B1465AE57759EDDA28DD38A9210871D35D331AE1BE6097C3EC21C770C9 B25D040B2ECCC3AEB1EA1BF99E0C2C0F192C13BB9152CFCF75332E03F9CEC376 9B8C285A35F53655BE38713E09AE34BA2DA9C06FA42A6FD2D00CBF2AFD2BADB9 1571629C65DA38A431710CF5B01FCA68E8B8569922FBC3F9B64A5509B6F677AF 1B97E91FFFEB6308AB68AC58F9BA43DB5E764021E75B56170EB44C2C0A7DB86C 62B8982256D3621EBE3DB3994DBF5C5A14CF34B4AF3BD5697F8E3203085DE9D5 84B0598169760B925463E93DC87CE70AF4C2DF0F4287D2F2069847BCCF7A37A2 AD451D5ACE4DBCCB2E14D5DF38B226952E7446BF87BEC736EF3D5AE793304618 D66D3299AB9F9CA1D13F134FAEDF36750046E27706C7CBD8E0877BB6276E5196 BC2A355D109C0253644918E1CC11B717DE6FBDA201E769812752888CD66268F6 4ACF4A9449378F9F9923D584BA1B51F33663BE7A306887BC14A37E3C5A4654E6 531D6EB63DE3946BD8BA95CFB037991174F36D61D842071E6625605CAA350A24 FE551025D10871FE0E2599A63900C8520EF4911C53A03897C8BEE152451708E2 43FCF4E700C583A5E8DBCC03BF9CAB864DBD19E1760945DEA0EC0BA38BEA8256 D3A8D4F70F6685A99C6BD2BA8B412A26C002D76138CFCC7DF6802931E5D97BA6 0151F6A4C572235B4196B22B7B2D14B32886DF0D2CA8A277ABAAC53B63F64CE4 E4C088192AAB674497E8AF81961359C389B51F4A257373D907C615030BFBEF53 DBD99058FD06E352450B658478C10454AC8FC0232B70D5CB916981978053E358 99D322A07294748BA427FFD1E45C909171017B52B7C742FD77A8560852D819DD 8DD53211A14D7B2FD11E42941722FD3985D627FDAF87EB57326A0D290B5077D1 8A4230BEB40523A8565F95E0D44F036A571DB698EDD9D94FEC9512369E5E5E73 A3CA5C142617944F4F99C0697ED088ACAC007FCE06E5A6EDE7D0E03A3399DCE5 362271BC31533866BA79FD1FB3F608B22CCD4111FFB1BA35D920A23AD157C6B3 C3DAE11069D5E46DEDA7158C6478D8B8C0D9DC237CDF0CC6633911673C43FB79 E4F9B7F27495201E5ADE66255BC2CBE9D9F237DECB62A19D62CB41A1C92432D2 07F0629E913A71B3F1AAF8B8C5AC66D3C8605A48F8913E39C859E163DB1DBC8F 0ACFEE80A40B6172032E95A76B752B873FB4DF23CF3A655AF1A1B88C8DC156C6 190DE72973950565454C0A188A33395FD3D529A88F2B578356DE8EBBC12F04C4 5B899F667D9E6F3A4EC6DD8DE71FD4C2E2B6D56823EE4E0526679D71FF1B868D F261489F06F97B010CCBE640E2F57BA3DC3332B329F7958394BA9777D833AB50 005E8E9232547104065ACE33396772B0E0BD66D2C6CC54DEDD071E444D8C95F8 6F88B31E20FDB80F77C83151B7E25BD3736B4F9BDC52EE78C41E9475E5A6D94C D348AB42F5E36B4F167D29EBDFBD43B03F77EB296B06A36880FF17D412E77EA9 F2E7C25FD05E16BEC6732681EA21AC3FF6893B93FC09316A370CDDB86D9E6087 F6042C3F9ECD742778389170F5F041329782FB9F9702F7533E51F355F71825AE 2BF4F8FE50D413AC9A20C41B42537FDBE8DDC5A5C793D3760C1EE13716068752 F0AF10812250BEDFB4D7133FD58F4587BACD572505C84A7D3802D27443175FE0 0D89C3398B55176D8642AFBAB5CBCDFD6220C8488564B4306D74A58CD2921AAD 73CF803C754DAC2F30A5324886E273064FA51781D5BC596BFEDDCE3982EA1AA2 62CA7BAA1B16C6EBB99B2AAC4E6C9CEFB3D10F19987045C4918DB239E6E63D79 5F44B9D097118D081153AFF96E5EB39CBFBB99A3BE30909F614869031358EB98 F07A97EA78AE50375941B2474DB46AF3305F2B208D45921F93743A6CB8AC584F 6BEBE25ECAADD5A789EF60C9F54446687E7B030DA3E5243189F02BA46BFD28B7 DC14822E136AC7E40CE20458DDBF356488045C95907363864CD6943643BF0109 EE027A3091C11EA392EA91320EBFEA3B857370AD8EB86D73F035A476F7058222 E8CDE78CA1AA9EA69A8AA6EBFF3E67324C567B914134DE042D6F8F18A9373107 536E8D90189917D343F5299024239E2EC1D2D177D82DC8E344A7CF2AC71AEC18 36F139E7A4EB59A67192BCA9ED0EB25DE13032F6FEAFC3B1F4FC81BB0EDC41DF B9EB92618667C59EA499B788CD26C2137D70F1B0AF793AF5AD0D0941F2E746E3 F5A7F0288BC1EE11E982EAAE763CA422D72FBBC0D754AD58FBF92629DC8866A0 431213513744DB48E52EFC89C83FEB082588E4F30D7DA77BB598E51CAE7E4900 5CD570C914EFBA426BAFF7A56FC775ECF5BE13F2C42E51EF96784E5201C0B64C 074AC229FF0BFDF71E6D5E08D8755D2C12B770B6466A9C9C61C15582DCD2FF78 E9E74DC2B1CAA344EC0339EBFF92CD2CC1D62E2FA8FF15E7459A83C6CFA58A77 2F1A40BD276E76B675FD6834052B33BF9190F04DF6AA5FA3BB7D77A88DD5B600 324C5E28216F47682EC29EABF35BA842BA2294A3D72B126EBB852AB741186C9F FC84B12DC4A6CEC08F2D03EE61B65C845841EE17F1B765649A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR9 %!PS-AdobeFont-1.0: CMR9 003.002 %%Title: CMR9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup /UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR9 def /FontBBox {-39 -250 1036 750 }readonly def /UniqueID 5000792 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR9.) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 44 /comma put dup 45 /hyphen put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 88 /X put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D 2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA 700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C 4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F 291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB 2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E 2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D 9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B 42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D 07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A 31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E 44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E 24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E 75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE 53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F 7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD 866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B 40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B 14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B 9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F 289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE 67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF 2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D 064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF 1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF 01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C 40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C 72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC 4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F 852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C 3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD 855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE 1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C 1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C 552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D 744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 5D2579DAAEE12528C23ED8A1A2F34CAD1CE8BA67D0B660E9281F247EC10F816B FBD6B9E8AAAA1DFCC4C9FF1C6AD05C0D776DBF675838C2629826D5337EED815F 4268604A4EED01A2C7842FCAED2E37F7F39F980866DC5BCACA8616749FFE946C A0AB0475DA734C00D99912C544BD31F8A69367D068F0A18EE79FBD4D5385B8C1 DEB92502ACB3B657A54C9BF786D7DC1ACABDF29591D77ACE1D4FE00E935D2858 3733656C79DD1C174C26DD97D462B4323F33B410DEB64244095927C572FA90C6 4C8B709C5B7E4386AEB936C2656B59AAFB74F9E40E680D890903458CB1B2AB8E 6E629F88B51546877F7799B99DECDC13638E2765343988DE2ED33279DEC3FF0E 2255A734F5925608991F068274CB1E5301C5B8623C5878851857B3E665490A7F FCE5A8DC0FFCF3D56BF55E4AB2ACC6743F52B59C1343A1C25BD46A6A3722957E 24A6F4B970A594F67A09BADB6A7B4BEAD3FF97D0734470750FCE29807D315EFE F93BE16F39C0B59D107D1834FDDFD520D8A429FCDCA408C79DEB580081191B43 20650B5375AECFC2DC500E3CA934AFA3D241FE7988892CEA42C8677DE18C43FA C3094F8DCB1D070DE0D32B69E2E1ECB4A82AD9E38D889D05418DF4E3C398FEA7 BFE9B364A389B13BE713F5B2553ACD16C14AAE521B63E8A7DD0258EFFB95646C 18226B01D916D41DDB322F6E83C3E3717FC113BF7D7AFDA2CC03B8175BD7DCD2 AEC82FB156E051F2D87B9F12F81E1F43E822EE27219758B3E237AD772E7B1DB0 19ABCE7BE6A2FC3C7DA0766FB82CEDBAFC19F7EB19C7448C1719C88FE99BCB73 F7DEA427FBFCDF4F00E0FDACD080AF068F7A1CDE18315BD694C60B1DC71DAF1D 1009AFC847156F96D9CD38A764D0EA70E5E9B6E19A2A0B80ECBB84CA44C137F1 4925EF5766F00C22F967FEED8115BFB080B2E13010E6D0C16FE49DB5DD70B6F2 B2BBCDF710370A14E4B419371CF255F11783A875497398D5059866AC5A8D42F8 C864CC60067A997A808F2F607F0A2A7E468B2E8E763415D55A92E543151A94C7 EFE9FC9B719148E7F754B8404895FCCE83EC50163DBAA27B9819D4C64D1888EE 16D4507B3BB0F9DC7CE31CAD5B84A02CEDB67BE34032A62C6A84D9BA4DEA5C65 1DD36643371D0BAEBEC7D1A1F920D15628C16E6793780FCADB1DF5527B597FD3 FAD5DD7FE9B65B35C7207A5F9A501ECBA1C6E908275A2F1490C4465D71D4E654 E34E33A8879E6E1E1C2D2C0CED0282D058E2997B621F6D796CC9385ADE2F08C9 BD32C9A448773697E3B916313BB4C7B4F880CFCE823CA5968AE062DA5102690A 59E5AB473675F8DB599319665AEAB7B258021C87C157A07AAD095647EB850426 B0C23C49395CDC48DBB13D76932D63B667CF035120BAD91EEA82A5E5858A463D 1D1546B67ABB40632DD64D12C7D9BB515E7526B5AAE5D7E6344DA0AD7947C1BA 2A9A504B2A0A92D648CB77B08184D56DEFCA72130213E9E9386A9041FB958F9B FFD5618983399D0C9F7CE2061903FA8E88D69B4ADF316B992FD40ED5B195E4AE 88B845F7FEC3D90C2C0D1E8CF78EBE55ABDB3BE802B2AE8F89259944B1272B12 59D760D7B237396DE813A41D27D4E2D6E2102C7FB130B8642096B3D28A95476C E58B1AB973D053D8D326F5791F6820B9D0571393A637BD2EF39360711B7BE93F BA3A396FE9CAC91C9BFFF791C452F098730BF46E36C97EBC06E01D63B18E4C06 758C2B1AF6E37CD04BDDCE1EA76FC1212E6BC289D87F1E8867FEAEE5D80E1316 0318EC6F8845C3751A10FE6C3304EEA131CBDB934C09C1251375ABD7EFDC5589 40CC9121FBC90D8BF6EAA19B4AE92A79516C2BFD8D17DFF19057BCDC87EDF896 0260F22A1C20D8A223A6725C9DC9B7EDDFBE35B4D7972899349AD8BEF0181E93 79C2A1E2F06106524F2C46C953E4BF7F8AA47863F6B47A88AAEF32F1AF02287A 44190D8CF1B2A6E1396BB46CB40194F980D0C6409788E3925D4810B3484D458C 5FFDFA02A61D28475F515B0DC938D9103424D049ACF1D82297BEDC0670B1F871 F98366F2FB38596340CB8387218CD94E7A3DCF37A7928DC30C37BFB09CDF6547 ED9CF46EE6DC5B5208F7F6E96BBA0C4F03A44E9C2280CA2D663CB06A29B7BE32 75B64C93AD9EE5E71EBBD22E602F38CC16B5DF771D52B18A41C484CC16E40E2C C9F1EDC70BD7843A3754B08F4D403CD694F8409C3C62FD6905D1FD5E059624DC 028D183288214810106DE9470F037FDD15E6113A181DCB5104577F6255528E6E 2C07E9AD472351050F942D4323A5ED11D9378E9227FAE260AB5109DB147FD724 4018F9B4B87C9013FAA1FBA84BF4FE1A22CFF901CEAD1600AE4045696A667C45 8C7EDA46DF040D45D1E7FAD11510C1BBFC895513091C9B89611F16782459C931 DF7312CFB64FC6960F53FDB47066E706833F4AE63F4970CFCC6D2CCE1475D2E3 B44891AEF195AB239219B07306974AD878CED91BDC26AA18C977745938C14F8F 8D31B1B2C3D7D953667210078B00E1CE0582D42FF74F69655F8DBE930FA1B658 C337BDFCA6A408E5D88BE127DF83324C12F0E912C8058DCA329FC6D345DD0D66 FD343C8630DB56DE77DC6C788B8647B03BCB60B33A8A2C4A0DF7D8F8C7ECF046 84EF05E565441D9BE7E935E0B80DDB2072D78E1B8D9383E1D9E34140CDCCC084 D643479D574E42A849C517542856C40069B5533342E66140866DC0E68EF2DF11 A4C2F423C43F880E25E6917667A4E60CCD06A70EE237471F73DE500676EE2693 6A87031668908DDB0D6EB35F45E0DD047AE9B8B438292A4B46A2F8AE21B0C003 3C96C268E521CC3AB6A7D7C2B7B4EB7AD9CCE6812D749F1445878EB2F790DF4C 8A761DDA323E4065084FE742764F95CE140A8E6BFEAF34C7EFC62A27FAAB38B5 CC1E1314FC643C41F0159F8F8AA0EDE8F9E97D0E7E0EAB677E48D5309874E42D D1631C96973EE0166A46509E3379A0E1387C5AB28E107D66295E99C3EA9504BA DEAD9D3DF5826CBF4D50651FFED6B8584224CD65C636100842E77BC7758A0C83 54260DD59665861AD0AB90BB5CB6E4E259FA29C8EDA86F53F6EC2BA552E909B8 CE94515E699ACA13610309633CB2F9FFC7C75E65CCA84C2982C8F006C4E992C6 F18BF2228C3E5976922461397BF82F5E0E8201E8110BDF9F291E5872E1B491B8 E1036CABBA0643074D05B42C64EFF1CF0DC40BD64CD6D198E7D78143CDB09AE9 F6194F5DFDA67A30B2D13F69CC348CC8F8ED95AC06C63C315535265D187A855B 2C9B9321D20B82B3A8E52D6882C516AE249B0F54298C45BD433384CF186B0EFC E23A142BF2456B2641B2FD85902615BA7500270C823665D2B4491E2F19BAE0E5 E912AF44B028A47D98A48B2EA2943ED5F86205630DB78953E582DA869D727439 9B115B636F1DEC5AB2DADCE2951532CD0910C8BFA3C261C08EC214B03677DBF7 94DFC2FC300A2D2306CCA833DF9F1E872973C9D3066E05BFC838D412225B69B3 A9B39695AC4C2085E63191B42D02B1B888302AB1FAF3A156729225504FFCB32C 66B92698BA15D76EA3407F159510DE0E4C4EBD301393BA4CB5DC9F092DF5886B 4585B1C3EBB8F640127AA41F50C73AA7CBEB106B30741F8C732C61ABC34BF467 6B059E918DC9103DED83DBC99A9A8739A2193C8391313133F3D1F40C46665A74 F901D02B31ACEEE15D3770D379C0E2792DED4719E878C1E449853FA9B6694F5C 3720458745886350F6A106EE57E30F7DA0782DEA54D3C84AC2B9105B4CF01BED ED879DC1A2753A54B36F598256D8F10BC43CA90E88C228D3FC435DD52650BFC0 6CC3DDD8F9328828049064BB713667FE3F49DA4A7007A44FCA8D1F9E7162D8B9 6D2152FC911203E0D1C645FD1D0D501CBCC9BD980281FD89D3AB10984D0F3476 F8311A44DD6E4C54B8E77BB293BA49B899B2D3046164FE5A1EFD37CAA1EE1530 B3D507B1397E32E2D63C35A7184987C45292314D252220AFFB9566231C63832B 3103794D59AF0424995A28585DFFD3705D46D3B7A0EB6AB82831E0BE23857D43 E199018044E08618B131430110463DE01F0F8136BBF6829BD7BFD6DD03A32052 314BEE0BC1436A6BFE7BE9E7E1365A67D14C4F689B67E3235B998B5BF235E86D AB7966CF71C09877B42A7F36AD2605F3D3AB2B7406448510FCE10A1C9AAD2838 09A980673DC2F691000E95033D25D4E86911E558C794393920E87277A70C8E10 03D37226653D8C7F5341B04268E88D7C0626A9FA0C52498A3C09CD84CD4A9EDE 3E21D5B67D650CF75E1D1339BF0E534E10FCCA22B079BEFC5DA10F4BA6D0B44F 56F4330C34F352D119CAA3F1A37F0BD9E74FA882FC7D9B20A36F971AEDE3149B 00B8C6DA1BDD7F96D6C928728272F64C9DF84128BD461832DE08772D75BD184A 248AD93C070F748DCD4B9DF57602684498B8F3F9941662E6E0CBAF855EAF7FB0 3C3B74C9FCC271DF42EBC4183CC4145308AE2833D63C4A7C31FF46B931A904B6 16E780EC19DD0C1EFAC488BA5C7768D7CECB995468E5B466948B4D6F7AE911F0 A647C5AD30BE5BB966B2ABC2DF01D1AEA67A0191C0316EF9911A9E71ED7858C7 185E20048AD0827748A23057C88719DBAE181346B20AB9759EA1FC68AC295639 27A76836DCCC3EB068AF236D7D52DD54CED1D9DD37D483D8905546ED44B2A0B1 10F338449D18501A94A35313C18F6AC5BBCB9FBA2BFA67306C1B7734A6C80FD5 A28444CD1EC8848E0C448B6B35C06ABA61024908D697C9A5935A3891F405A014 A077662F44C9BF8FF45AE6A2D7D395137F60C62C9742D8F18E18CF454A15DE0D A4D046A725A765CD21D870EFE380A093729A3AA10151ABA5E604CC5AE32D588F 51715481185BDFB456143D3F6435A866CE66370F1692713548792898540E1C3D 1F204065AC56CA691D5B13B40512B7A213BDF4B55A15FA1313133D437B12FCB5 D561A428D6D9FFEDC446BD7D8BB03CC918A96EE832AD6B714E2B480B4A7FCD5A FDA78AB2D0581AE72D8F65A86D17AED8B7D3958ECC5DD9CAC6A1281C1F3024D3 948E617A5D2CC1AB908A3FD29AE6854F20F6683C16D0ECCA06E2E2F68CCBA1E2 E093FE089991A4EBC5472F9EC97BB3D3D0EC3C7EB7450AA2BCC6380147BACE0D 8C37D4429CB67AACD384464FAAAC4391074774D73B832D908B040A736CC71F2A 67298D8EB3FA5639CC2E2CEF25F673C48CC84F8084C53B39CA73D17F789F2E3B 72AA059EA4AECC617453238CF238DA50FF5187A4AB7A781EEBA57928767066F0 00391C189F08D072B84741EF85F229D829C55D7DC651A1C0AD3ECFB9711C3F19 26BBC798B664994364307A0B8942537E35386A12B9B430374912C87C5C61B1A2 CE0AD02B58EA4EE582F7E24DA3BD6741EB30035DFA07DC821CDAC4FD74918BB1 8C3F297A928E3447B95449E8049775AFD61BA35FBFE1141BF65201E85600299E E0ECFE5A31378F4BC50507F87F9626E292C57B7DE9461FC1F9C8BAE71BF9A571 361B3EA5642EC09E5797CC68839A93FAFEE40454C16F12452F36D2F5045749C4 647D2AEA8ADAAE0800BA072A824F23B32E47E5ECDDB3DAFDBE1EBF6B4EBEF514 6A687E26DA02755284A872947E06ABDE6BD002DDC4672CA57720FAC335FBFCEE E7A43E0E2F486A6BEA918E9FF2FE993ECD146E8219B44E1FE6F17FFC181CA004 2E22BF7EA28BC9CAC943117C0364FB1561A10E891E3699E233D2BEEA94ED7B76 F8C2CA092AC326BABDA72E39066CFE57907EC4D8CC0C81E1CC38F57DE8A85F92 951BD076FC72A6EB54BB895DDF9A17455D9E39C84DCE7B6BCB13BB0FDC1B9416 EF67335685F5038DDEF067B58AF3FCF43EA8B9A5B7950771A975C3AC64D117B5 51310909AE772E0A565D422493C3E2B5187E69940FEE51457C0F4DEE3BD19855 7D28F4DA9B40290874C703E04009856C478282BF324540231C3462CE04374DDE BAD203202C9729299E4F52F0A0B9592F5E4F4BDB6F6B9280F4CFB4B7A328584D 153002B810AAAD7C47CF446440DB90EC35C1774788A1D408704AF898414DA4E5 F4606C79B512D7319F3A1FA6F2EFFDDEAF19F29DA7A70E91B98F310FB0A894F0 8D7774109BC2A86B0ED87907A8AA112EB2C57F7F0690EC279E8EE6F5B0A69096 9B108A4623761E3BF94D9DF32EAF425075AFEF7E338A4D92CAABA3F45AA5E397 6E6797A2F1EF72E7623D370013E0AC0AAC4011170FD5B419B0F07539AD53F261 C216DB044609AC114D43424662B60C3A36BB4A7DFCBBCB6CEBBE1BAD972FD44C 30814D0B88323556BC8C9B248912346A8C20B2BDAF4739787A3E4B26FE6F4C96 B4A8048F83A881405EBBFBDCDD8EEFCAA90ECB2B7C29897041F4F417975242C0 01DD1CAE267B4BF09E7D80C7224B8AF30D0B51C7D8EA069FD4227AD496CCF52C 8FDFF0585B16103DBC0AA5C9EE95C4086A079E7F73C733F95174245E5B08AC9A D958188E395B9848C33F113CDFF0EC03E89789840A5620C8DDF516C43A860C67 E550EB1FCCD9EECACD5CFB92E6FBF7B9F779A3A9C81E8ED736C5B18DF821A463 CFEAB8F3EB625ACDD926907A931D0BF9299AF7D760D60D4DE6C348A6D54638CE 8D523918B58C09BD36D500453BFE425B7C86A9D44F4320F8FDF892470D09C478 29B81CBBB3D78E3851D0F9E1E8BE6DD822DB5ADE3E342407DE9525D8756661A3 B0F8A34BCD806B6B7E798CD4439D9CF5B3368636E865DFCF0DE8D4A82DC3CEA8 8BC85FCE58510F4DB686798DF1615DB887072EB7AA92404A6CB773A1D41C38AE B2F0E89A37C4B825295D2F1E3B95D9A87F3A949291357C24C70DA005ADD22499 E94D7EC59D09982F1751A3AA091168215D61A50FEEE4E6D289A8A3552DFDEF2E 7A4030BB2484323211F45CC2CA0D8382A7F157A7554221AEC495235586CD1D86 D709C75F342D3A6D12F220C6159D267E03D14DDCD43AD7C518DD0DE20D92D5CF 4A99B86FDFA77EB468BDA5E9155C38FC3C37E466070D07467E706C0031A83162 401AEC25E206C127465CD74D9CB7092C89A2E8AA6A9433272C99C572D18FE988 237A7B6B2D8FA5563C77C982B3BF82C733B23FB96AEF5782333FABC4A72B6A07 446E56998E644D6C38AEA46D23AF95147649A68D74FF8138C7AC5C7AB9D013C7 F712B8450DE638DD777287725B44B507396ECBF8081631FC5A35E9B59D2F41CE C394F613A02DF33EFEF8B170770BF63E4BFB3DE5FE37B58495FA0CD01D35002D E605E8278355DE31AE1869A33C02AD0C13E2E21ACE426C472BFD2B6D230EB1DE 1F5CB9794C7CFCEC864A2036491DC59AE25502B605871C8891BCB1C98A8D3D8B FD63F4339B21113B83FAEF54536990A08E5DB2D8CCF551CE091BCC73EE4EDCE9 60F7A55806AA8CD3C05924D7EA95BFAB996C5B8C016F63AE09B4BE30BF1C06B6 05F6B780DCD74B121354F7577FC5A97553471B682C133865063771A1A39E3891 AD1A8DA6443B519D9F37642230E4DE1884D783C1E204B344D83D1CE7EA7AF0E4 5BA48C46CCEFC274A3FD636A4681D45D22956E610CF47DC5758C06251E59821C AD3840294402F57EDA60865F18F24F825CBCF9F2EDA4760A6CAD84F1194B7DEF F3782C2CBA6541ECD92E79F1E2484EEFAF628883F867B24BAB7CEAF7C0AD799B 20EE4C2877CF070B19A4FB722B0D46D70A119770167DAE0315F4DF8C5B42614B A427557C23279E303798BF50E9C7E64B334272310F93AE16CD83AA19B621CE0C 166061CDA3AC1755B640B2C34CB4B9372F4C7B90AAF344C39898B58877D80242 EDAB48D0A5AF8610220FA62EF4DB9F3022E843FBAB429684E28192FAE629DB16 C2FBB5960D7B6893D493641B1634CAF68818FE79D8FA335C97C5076C8C7B0DB1 33244D1BDC11C4A26CBFF6CD40349796340603B1F3D4333D8927D4304D89DB64 6CF452B1658FF099EE65B7917B2D35072A5D9813A313077127D59B2723D8EF5F 03E5F63D738AE6FA4A2608432A89C988C7BAAA9347488B0D136AE3D2D63A6CB9 92D3B1743535238126FDE906898BB39033B27BC86DE476F8588CF3FA8DECA8D0 00776A14FA0B6A715485E233A642DF7E50D79853BE23923FCB44E8269CDC11F0 B61B497F4AC77B3BDB3AD3DD69F344DF7A7A30F61BCA2B16B2EEDA69D601999B B3CE72FB87345B1E5C20E4B7FA05DB54DB39F157ADDA78D83B50E7D9878EA31D 9144E642EF2EC36DBF981A9386E9E9D00F3B48C32CD5040D3A7C1F4EFA0AA0E4 1EF985C14E08F82F534BAE9C26C63FD893B25F0A7759A54575937C1766748187 22231525983627FAE4D6C271D5C394A333026DBE59DD607BD251815EA80F30F3 EDEFA6F029694726D6EC45FA94B7353435092B30A9EC2BAC7F7C3A9805EEF1B0 2C5B63E331D1ECA5472BD90948B2CEF4FFD44345978C8CB9A642A55289CEF6A8 9D5633340C27FF137AA356DB35072295DA1E1E393C102FED3AB0BEFC13A597F3 3CFE7A1A3F4882C299A1C230A720516ED8954CF9EFCD949132DC9B1EF60BB4E8 0DE5199C6B2068C60CFC3818491D2626E1C17ED9BA5F0058DAA124461D95C94C 0EBF9EE02C607C154BC513FD5F6FD7D43D9134ABD9BFA9AD7CC4BB6F7142AF82 5DFD75368D27705FC100878CE91DED6773465DC85D92D08DF511843DE81FC1B9 89B16CC0A6CC23D5B27A7C3E246BB41DE6EB509918A670F9748F880C9FCF40E7 E8AF251371C069262F5C134C91468BF4133472B3CCFF72BFD5897D878C00D68B 2D0D580EC387CD55E95014FB61935AE9DA210F01FBB4363175F6895D52F4A8AF C6B98683B98C3EFD7EE504549D4B5B453AFA537AAFB45E6A2C757A1ABA391E96 FEF9B1839F9C461F912493B1BC6A7EEE4E2A6416C7C8E9115F16580751100863 F227244179A61B86BD97FA8828C41C86D74E46759B6123CF3958548BF22EAA23 86971344C7F8E92600D0BA1187E79FFEFCA24E4F705A0CCACC5CC87C263E14E7 718C0ECED2A48B18A47515A0B3142BDBB5FA5B1B0F3661278BC593FAD639A69C 1A966D458122FDDAD4A083C99C193A7776DCA8708508F7536F69E4C3E50E4336 749E31E2BBF774E8E8A658C9DF91EFBE869AF1DC7D60D8BAB38B6E3B164418D5 1FA58E0C540E13C183A4AF3E6B5EAD5D518E3C98860E4A15315C595522223FD7 D60ABF07B81BE54931C2BCAFF4D241B5DBEA9B0B11E27304CB6C01F2706794F8 83B65AF2A7279CEFB624D23DFD1E8DA18A97D3FC6F535B60B0D3027A4BFFFBF3 4FF6E25D0BF5D92E4F6EBB8C8F307FA68AD64DF34F6E80B5B84E9915E4D8ECFF 4F7F58F87B3BDA6639CEF02DD76A8D97B22FA4BB63DBCB6E1D1975DDDFA4D2D0 04B5FE8AD6446CE559C85E89A94073FA7884781A274759915B345956D04213C9 1543ECB0C495912096AE8D7770DC537E9ACC34B487AF9F623E5F821383189B14 5956F83E24C5885CB74AF47EE673C8F117F48F3655889CFACE67235EFF50DC4C EA0780CF2F9D75DC31ADCB52B299C70222E68954532629016AEFC29082CB66A7 FEF76478153AD1F255AAA0E0C2C1AE8C57319EE6AF4700DCCFFBD466996461C3 4AA1C92C3106D72590C137E382B54990353477C335A394916D70AA0B1220467D DBE753D073F2C1C4830451DD212242A5FBDAE47D2348A0AC0E2347A465C17A7C 42FCFE2E2D660275BCDB6450FE2B0289404F77C150D4DD77C484BAB86EBA0FC5 F6D3AF4DE34340E353EE7ED652CBEB293753AA2A01A204BF5A9C06B8895F6A5E 3987640CE4E6ABB22584310AD714FA605CDBB7DDDA2E640F890DDC8331CC725E 36E8294DDA35DC051B8B741609B88F35EFFEBAD853BDBA583326E3FDCF7D711D AC82860F74773F6FC2895FA40FE7D7E8FDEB34259F0091A294CE9894E3124EDE 867D21A3688BFB611162165FC9BA4CE81699D37327239D248C1AE27C5925E767 59BC1E675B428DD544EBD2DD9259F0D11884CA890348446B739F3D57EBC10930 6D83E66B6287B940F1D571E8848AA11BEA0391CABF893A246A2E3C4FEAC7C587 75C26A2ACA4D93C35703341295B2D219C9ED7FD783290055098B23BB466BCD60 1AF0206D93660CAF21A22E28732C229CE743D2C665A5BC17CF97A52F2DDD4CED 02B9D8CCD04DE347E31DC0CDCD3CE2B6FF6C2A35326F09D396425DA080F074A5 57459E0BB588FC51335C53794F2C46917141993322C73AF806B60AC565EE1BBD 3DD16320F3AF4C175913A0759234C157BD0670C87E6B4C2D2E4294D4647723BE FC16FE7C1D58D3227B010BB082947398D733361C6976CCA9B17B818468C1D16D 07B117F9574B9BED29D0748079A7B5F2B7EDF5BF5EDE066665C013E252A776A6 E4DC20D3ACBD65511B678BE7D815B45D41326BF5F3B7C6AE70E3520E6F513E01 59E17A56DD18136F8B879034A11002E75E360F2D33E9F0CB71EA8AE7328E78AA E43D568DE7DFCB490C04ABDFF6B465070838639A1573544CCDF1D044E1C62D55 F54369451480E901200DD55DB675033D80BDE8FFEA852129AE472CF6A443416D 2256510180C44D95A80A9E96348644CFE5C0A6C7A941C813B2D03130FAD25E0B 4E998ACAC484E17F4D877111A7507FB6F654F9FC8D783FEE2E17AED3D0EEABA4 1D22A86E322580A50DBAB9753795078B70EB3397EB5455B1B1EB9AAE392338F1 6A15A109CDD9AA01C72354052D77A4D8354BE9D1FA5962A66EDC9C275421B241 5611DD5CE12E2CBF8D5BCA0D6B7FFAB09F5791D5CD9FC921B32AEC5F8276A854 8AFD7D6D4AC084926057B77C7D33C4B88296BCECF7E31C15952AD6BBF55E865D EDD33E6C7BB7E2822B1BC15091A612E1DFC30872CA93F001916D69E932200AD6 D5ADE0291CBBE5996CFE8A7A31C1AE4A3253F3062952F374DD845B942B4C3B39 7DEFDC683A049597365893CB5E39B035E8A498B1E509B50D534D518F49EFE24C 5C632FFAE449AF1787E505652947272FA356978B892E86C61310E59B3EE2355B D4D042B7D0B9193B9EBEA78B7C2ED7861F668986DAB7CE44E65A3F02C857FD09 D87BE1E0C49E6DDDCF8D64F78D9F62359A32818C729FD89C7F681861543CFD11 36BABD668D8C008433952B698525619DE68440476900EA6AA4A7340F46B002E2 7A61C07DA0252B8AFDC9016CC0A2CE3BBBA2A27114E8CF2D75C0D1812FB81419 6472CE342E2E79DFFA1A2DEE15E936ABCD755B182840931FA235AA417EE54562 C5B6EE80658993BECB9095036087C668DCF2F19583948608EB4244BE5EBC8BED F67FFF26A991DC7DB31F3EE537791731AF99BDBDCC41FF7FA1359D8F3707CD06 BE93AB5D49CE66DE3D996A98928404163ED3643301DD9410F1A640C58A99F955 045C12D6518C5A70D8171CFDE6198931B5B19C52E4A23691B733815C460B0175 726A84D7DC5C9E3627A832C699A405FB58B6B76030BC109E960FFED50B435CCD 819C5B306B99463FDD5A7E00D0A6656DF0F45EFB0269FBC92D9820B06836026E CBC7B7E7AD4DCB16E900A34F29A0C322443719FCD4099A7F0292B1B54A243617 AE98FDFCAFE210BB33BE50315234EB18E8CF42CEAD32ABC4E5FF1B436848321B F8FB649C7AAFF78E7EFC909228AA31415B24354D0609D6588605D0C408F88B04 07A197F574F0982747CE5E04BA543F40AAAA77FFAFF598D559660C5BDB168044 919150671CFFBE6B9D5C4EA33611164F276B8DDD296D05B9024BD04809C49896 E189AF67E41E572B1B1B34C41113E0BF14CBE3139771DCD4306452FD3AE11413 EC9233D4EB04B3C2F6914D39E4E388B777ADE3C4E33EA65FC02A0F3120A99B3D 9ADF199B7182D9E0D0A2FB3564D618DB9E4BF7326014090C36353981044B89D0 C861C286B99BBA9B93FC624FDB9347C10AA5CFE369A6C5C5D5D6B6149BD4562E 7E0AD5786F0F2BEF4A9603EDEECF02A6FA8C83E4AD433C08EE35FDD002CEB156 D3920DA840F65F862CAA1990942C3E39238F1DD230FC92A7A0E2C8DD99819459 8344EDF1891ECC380CCA616732BA726FA3C7248594917ACD3BC463D2D2D7918C B511D8852F8EB43D3B041FA363E275F2EE459950A7634E97F350369A3C357C33 BAFD48FD9FBEC71FE46F0E63A4412B3407ECE19393688B1DDB7F1F058F25A249 11528D12A5BDA64E8E580E8F5FC4383CC0B6B1BE90A56EFB166F0D3FC8D55C1F 1D485224952B34813325D367793E1918720760F58A613435EA4AF864168A2873 2632726F199781C6A1EDDCBDF18EEF379086CF14A65E37D4DFD0FBCCC37964AE 9732073741224D6F74F37C7DF0858E7E063444AE94EFD9C05B8D32EEBD647ADA F3B96D275346C2BFF95DF3FBC9878D86DCEE7A26E2DE175D470DF259B3AC7905 5A14E1A2080368487BD65436CCAA1559D1843853218B6CDF4D6DC0CA2A98790D 3F3D963DCC9A2B37143EE628A9A050F5854B0EEB8EB3362CE191B76772969953 3C2EFDDCFB89E1F2016A251B4C75EE55D046A00781AD548969983AFA20AC12D2 1D872B58BF45017DACA2005A38861A01E91641E643F1E149F827421753BC0C5F 55E5DD9CC4EAB4E073EFBA0205F8F310DA8B6B0FFDDCFB288CAE132925220E3A 8D9BC6CC4B6B30DBF35FCB920BED967CD5EF6FAA6FF5341ADC97B6224FB40874 E9D27C1C67CD39AB2589BF09A2EC693F1D9A2E7AF0CD2BDF0429E829CB9F3EDA 601DCF41B1AFB569B8191183317952C3C6DBC808423455032104E3E435043FE0 3050ACDEE662436FAF0A4241CD9CECDB3B836D12EC1625A682525AFEA8705DFB 51357A737AA90E5E5FE28CF2D3FE6052EF60F364B96961E085A2A2711A5EF45B 01598ABEBE206F900568CF6E79E9B186584B1FECA91FD309DCB85584BC304713 D3E9F3219F4E5AF0D13F6FCFA5F9CE51E99EC6CE2CE07225DB38B3F27DFAD8C6 FCACDC88CC9530C69ED55F0C27C45CEA53B34D915C6AFE236A2CEB33E7884BA6 590F333C00541DF68BCD419BFE7E5F410A8B54FDFBCCE40872F1216648897F2B 42621B68400E91259DA4D7CF94E98D2596D9D8D2D92A262942574818D8E2E330 46788DB160E8FB25DE3D311E053BD704323EAF8FDD929FD7B3DA8EF9C6F97AD0 AC2B90722184C0FE6B75E11B85C79ED97562708747F00727A93BDF07F0ACCFFD 6FF186793BFB752F24B34343DD9ED33F4A0B9A26156609246E9C1A2C7C2C6584 CA50771CD9A1C108F72D7B24EA95C7E7841769F9F4011DDFE85E296BAAEC1C8E D1C42A4CCF792B132E3F706B30584C9F07B7BFC52C4FB206CEBBF249FC2B2520 43B90458408A4DEF2C2052F0D4583B1EFFAFAFDEA8AA14DE5332BBB6FB6CAD36 560D4567875BDA4BB9E99048B4C21E3191D363E492D88BF160743DA7E618E22D A306BCD9B9EDF1E0E8DB6D7252344F7D380C3249533C529D9D2D86A01FDBBAB6 57E77F120B0B25A3F4776FF579FBB48F4DBD655276A7D8F6108079E68460E973 92F8BC1A9BD3230290ABC5AF7B8DDF9E92CF8B599BD0997BBD082E13A4180F50 445F58010B35F1D9DB0C0EDDC8204BBE7F9F67E32EA0377F8B05C933F3DAAC32 DB66BEB7C7A66E90462202FC8869105D0CEE0ED08AF4566AAF97EA6964CD7BAE B6D4F159C99A8134019A1D2FA36F074FAF6E107F7767B1186417503CCC8193F3 9548CB704592E1EFF92979C6824E45BF418FFD22ED0405BBCFEB7349681CCE8F 0C2C2A2440221A2F3A446968ACA7F86A54C0D9AE3EC0AEE96728C8DEFBCDAB71 56878E891FD2CFF4B053D720C0A2E54C2839D5BC9FB4DD4B521F937A458AC6DA 7C7A423128612CBDAD9724987B49B3A4C95C8DF60AE935B6ECC48DC33282B85A 5600D0ED49ED36D9DF07EB8252C890E470BEE74B058445BF075803C22C632259 3EC4B9321712C02AC67339ED0F1B4A05DC2D434F1DA82004CF872C4FEBE98B03 DF82ECD21DB053B3A88E7C987612B72CDE387AF95D8E53B2648FC16BE593FD82 81F270C046D931EC75E04793E31B336C8821AC13770706234DC36FE15F0F589B 4E8302EFBFD496BFF8754CCB507D7E44F9D65382D1D1262CD7F2E1543E4E366A 781A35D6CBC44471833E188BE6C3FE55C2B5B5A995E9BE8702E84E9B486ADFB4 306D577B80DACF4EE0E6E53704CE412A663F5128F3D9198E42D3727F015F8746 FA59999F8B23F13E7F5577D8B87DBBF845C9BB364640B0430BB45CE589C832FB CC8581FEB9998D732581ED44E4C9343E75DE7152CBB1A82A7901985700BB4F18 3D2BCCD607F7727FB0C3F9FBD24BF54CF5C0B8526DB691AD4C5F6D58873917A1 6284C83784611F6425137F7352A6B28518D47EBD8AE8742621CCD15A7FB22081 6783F6F3C6DEBA05E706F6D7DC924AA486214C2BD0527D2DE6224366BA1C3EFC 7B332AFE476F09DFC2339B0FD1C4FC2F89B4EC6D2BAAA906DD632B7B8DF16F17 6E7D3D48E08383575DC8DF90EA5A535B988DE6D9FF1A7FB6F3ACB2391C028076 DF1B20239C3BE9FDCBAB3F3829263502B2D0645E92A9B210CFB6A48B9520D8B8 558EE5AEC79E810C716A7D226421C6164C6D430C26D99F98DECF4CB6B0C8B538 E59E0CEC1CADFC8904579AECFC27B844E67EE69F7E33D6BFA7A55D8ACD95C940 DF71D0F73A580295F227FB62D963EB3BA0535FA588A146797B98E0CD78DFC07D 4A1A7DFF79F026BC36D6655BAEECFD0135930E9BAB7E3886C50E125D389A0486 1665B29C6C4DAF45978E057008C48A43B9D056F4242553FC15D412866C3B686F 7FF6A1F5E3848E5CB47D05B3AF480D7CC9F0EF27CDC9C9A65B4C6CCD67DB4952 57D1D498A0D9CFADD2CF08A979D5927A76513650814E6107BD02FB8AA27714CB 3E03664DD4F4AF7ED6EEFB0D0AF1646774700DEF8B3233695E593E16F8746BC4 1FFCD34E277592D3209C1EA874517B7147C6051CE074549965387D4F2257C76F 67758F60A5BE309D5D926AE5644AC9A1ACFE3244339006E5BA863A0B31302C97 475E63BA6C82030D4181CF34AC1FB341B91D873B66BAE1C9F772459A03819B04 B14010F3B937C053B178470D00612DDFDE6C11DAD4D72C59DAB482A0A4A7E5E2 13316D0B8A76423DB3B57D04D988D07DDA44580F866CB90F37B4BC8AB7EE8327 54603AE171B6873B65B7C36424130840FF9B748E406F12359B69823DB43341AA 37BFE2A3D53B2F8C9FBAD19E959A76561CB51A6DD9A5F33FD8B6755C466C2583 4EBA369177B9B99D90277B8D4527FC9344C671E47160C75AB2A6602F6C621542 D56A7EEDEFFEF1835B95F259598DEDF99D5A68533BD3D76D75B6B44634509595 3EF3C7B9AD3DD363466860AF4A29C50F08B2374BF293F1C96A99E02030AF6BE9 2EA085B7434408E867EF3835191A9E6D182ACBEAC4B4F0005F00D855CC85CAAE 93561F199BE810710E25D27BF0C62078738798630F1BA33405699B6745BA524D 9CA410E989AE78431BE54C17B45A78C317A5DA7AD120BE04D8CD34F613E2B7C0 127BC773F89767660FA7F235A8DE4133D7BFB71E9D757593634840C593DE53E5 C0743FA8156B352B55A30C3258B7A1BDBC3E4602B098FFEAAD47796F977770B1 D2C94E56530FF57B34A7C0FAAB546C63BCB93632158935DCA4FD62E6C5A02619 92FFD8D1B3AE29E0D1D59CAB8DD1DE7DD1C7E6B51F8A908332222EF7F5DE5710 BB7FE41C7561998568D133DAA3471DF99C72DE5EAD568EC41B1C3C1E8E547AA1 45FE39DA7EBA28B564F361C830CD5B0F06BD7C148CA8BB639F1D7D0D0B727EA7 91A503CDE2662919E4FAFE13C31EE4434E5C7D6E86F0227BB8F5777B311FEE31 3B7E242FED9E8986972E6FFFEC9BE6681C7985A0DDFB05146C0E541D74994BC9 B657DDAF7AF5BA2C9078541C5C2F79CE171A6BFDDA22EE66EB694B5240DF5BEE 54209404CFB67EAE7982BD8C94AF63BC4198F55FF03C9485E8BBD86C34F22370 1FDD388E13E93AA12FB42E2D31DA46BE0B73C48D9152DF6B37B92D8AF5A03AA8 5798DFC78DE82085D19BA666C61C5E0DFDF0C4F315F71FA060F6D549553EE4F7 1FAEA87205A1E8E71F6C5D849A34A76E3E3E2F249DAE06DAC365A32E8273EDD8 29393A19EC92D2FCE7492C64FA353EFEDB7B93760DAA33B00E93A6CB3631DD77 5F435ED013A71685CD8C8CC5CFB8F102934717C04378905789E5BBD9E63FC70F 533C4191054C35932F12AEFDE3D51964BE846C59775DB89EB2C286C5518814E5 F0CDF9EB59A446F15EF2DE50C224A17FC9839CEEA6FF6B56D4BAFFA53A94610C 8A51D5BF6D4167CD811F3318D70DA0B6CC2C2241F9CE181DB5F1CD1371D64D53 8C20ADBE2B06018E2A1018F72951EF8784C11076E4DBC8333122239D0572B916 74137B70DC398FF7E478691375995FFC20EC314BEF2E89E7A0CFBC291902D2DB A1BE8F683BD58755DA2B2D511AB0EF92D42DA2418F5BD70961BABB65056FEE1C 735ACA14DF80063D7B7BD3B8414095AC752987EC3F42925A4A34F66BFC081B7D BDBF818C719D7F6F63DB11FC6184CE4182E1B15AE572EA360E341092E1F92020 FB688660B96E62246C19D2BC095B814682483F77D99DB38859E0A9E3F190B278 D56DF3D3779DAF1614072CA52F9462C5C391D4A1159CE17C7BABF9E38CF413EC 2B13BB9AAE22B01EB2945D215C18461D1B5435C8D289FC41AA3332D76DD9750F 6FE3FB5B1B75BB089F445648C01C22EC7E57E43DE31ADEB573D1963F579D1DB2 F851D5FE73E6847627FE685A93F17244F1773995A27E1DC0AE60B51E33B77F8B CD980FE252785E422090B754047736DAFE682880CA677B5273FF7F14401B162E 2379FB30F05D33CA2822E2EEB91DEE86B5986B120D8DE39248D3C5543B71A081 7E0CBE1F78EF0888C4649F8914DFFF38F2B8D3BB694B54ABB34C77F428D84023 0FC2468D0EF96F84DFFDDEEED398A1EE0BCF9CDB2D037A0004DDC2E19288576B B420B38E27BF24CCBBFBD15CAB466AAC4C042772BA31E8C5A51B8D059F342B50 0EBE1AC36FA8B328A3A42EC1FDF11EC8AC7F913F5FF962CDB99F73734D71D548 72020495456C55E06B4813BE0BE76993D24134C381C19C505946CD0A4F532B26 7A7E545BF87A49E6667C4F6EEB40BC0E0E1658D9FB7268E239D61332D3376A1F 10B30CEECEE00AEA79AB2251FEF0E7130B3B13B111E11466C37C91E2796BE327 01C4794B56D387E830FA6D9644F3D152A7DD38D32C47B645C265E75589534AD2 810AB9950862E5EA4841CD6F112C0BDF94849CB10EEA4FF92EA985049BF052D6 5FF9E40FBB17D60D65BAFB0C54F9466173FBE1580862082AD9A0D61438A50D58 1D54C8BD14D14F14081619F1FB11BD896AD5D200BA3172C313DF30642E283816 7B747A5BB049B86A3F4D8763770ED4796168E2E464838AF8ACC381B83C1B254F AAD52335B506D410A261A2AFB1993605BF0E0E8ACED59DC6F51F6A1325CAB3A2 E2E61D7880C87EBA0D5A25 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSLTT10 %!PS-AdobeFont-1.0: CMSLTT10 003.002 %%Title: CMSLTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSLTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup /UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSLTT10 def /FontBBox {-20 -233 617 696 }readonly def /UniqueID 5000800 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSLTT10.) readonly def /FullName (CMSLTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 39 /quoteright put dup 46 /period put dup 49 /one put dup 50 /two put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA 3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC 6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F 3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C 4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D 107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C 2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F 55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB 69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE 67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD 802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E 20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC 4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B 4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D 45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA 997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A 2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D 4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E 425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F 2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA 22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D 200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA 9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB 57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B 2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC 39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F 79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA 1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA 0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F 9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F 7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D 78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC 7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC 6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE 5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB 42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F 14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A 6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C 9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE 7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D 4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0 56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8 46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40 52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA 19477F075ACF608CD94CE466C1FC3EDAEA3ED25C96FE89A7CBFE528A33C4E84D 465FE6FB031B48D904C5120D428D6B51F3232847CB0B7521E5CEA887FFC56F02 0882B3BB7F5B0B954E7078DE3E31D8AE65F9EA55F4C169DB7C35DB9645617AFE 078E03BF9A1BCE4E489AC9495A1E6CC7D1FFDCC03CEC1A32490186FE8B53B09B DBA7F0E23C8F5E5270D039B409D504203A458EEF12C035039A8AA12C719C0339 F766BE6275511D585F82E9D4AC9B5424312755C4B74383FD094BBB24817D6525 EE62456392E5DCAD0A0157A4A033E440AA014D5682606312F72248E13C43EC3F BBC9B4A2CF19A4AC6ED7F561EC37127BD0D3662E05BA4DE5509060B1D607170F C8460BF557910870B904BFFD042752C0B839FF9E5E90361BBA35589BACDEAAFE C68C5831BD0F19419A684DD99D772D60BFF26CF80783E4368C5C13299DD502FE D5C4F8531E38EF4CDB97BC705E96485E6D35BC2603CD9EE98FCF9B0FDA17BB84 3142E3FF4FFC6659855C63098409C680B968E62B3C844B47A888865DFA5ED6E4 C1FA4A0FB50571B5D725646B993DEB64F9ABE617FA701894926718C5FCAB8889 190FB155B0B6A3C6FDBAA665A33A6D22EBE767BCD2A98221D32B55298FCD3921 0018A599CC3D72152B326F9F5612818E9EE4260DEEF61834E553F1C10866325A 130611B42CEA11F10CC0C2C84D5743C1484EABC364094D7D49FB8F6CB8FCE075 CBBCEA619CE9A8C31CA0DC344F7ED0A6719192518E2CAFFF5C19DDA9E938D96A B367A2E6CC7A4D0500600EF95430374F6CEB552EE089DE06733E4953CE47AEA4 4FD36A11B09B153B39E3E2ED30087ECC11857EB450592284FA772F14B13F4514 1E253535A513A1B610D1AB6508555064010A3D545262B2A44F78D9D897AABEFB 8DD45C63BAC6F4D7CA4BF8EC641CE15451E2F46BEAB7C59B574FB2CD194288D4 81130000E27672A5850924B8B44BACAE2F9D2EF108F5CD551CF6C7D43D2A500E F340544CB8B0A13AB598BBC44EB21ECDACD4BA1FCD6EDB199D78980F0304FEB0 6B5D35DF816E2B7ACC7AD6ADA1DB05EF0D0E2C3D2299F44F41F27A5E93E24ED2 3AE21C9DB2049689F4C46A6E7B2DF0182846A283D16FE34A0BADA8E761220989 A51F8BF11DE3B6345F17D3F952B8D3979AD9ECC91E7500D85B52CBA870448FD7 84115D8AECD65BEA2A04DB773F4D2DE30B80633B7EB2481400568DDC5509AEF1 3BF73598EC800EFCD6E4E37E7AFED084B8BD45943BE0BF48F96D5920DA4DD44F E4FDEE6653CAA667358A1D0D17E6BEF8E906B3689AEE2426A01AA9816479810F 87284CF4DBFF167E6A2DC37EF41D85DF3551D246DC3A6D69579353E784F7272E 68E55C312885D72743CC16E8FF4E9C10CC806FB5C6EAFD53758CACA81CEB9EC8 F21B30F02A8F944C34BB88DB09FE9A90EFB86AF527D493F6F5C3CCA26716E0C8 325762809FDA5F035FBB91643A4AEA86D9E74E5C4663177AF96FD89614E1FB69 F6CB7A217DBAC25524CD1FB71F629BE07E72576C2BB8B7313B91153ED2089D51 674FCDF756644679771E0F877E4B15F8D1A1633E1E8204BA67BEBE717063CF75 9490F34EC00445B7653AC03EA8ADBDF1F03EA824CB6063846F1650FD12864770 15FCEF0BDD3F27F3CA70511E82D59F87EDA20D7D6EE1ED520CE65E88F9644F03 96C4166968621427B016CC1A385134D4C995F14200E2C84AEBB1E1E3CD711F70 D566C218CA27D2E2CDDB3C6F72FD60D477DA9736C90A16AEC35EA32A4B970853 E51F7EE489D2CA3D854AB49D3B41FA220B8C70D71F24D6F169A286A7D3FE2479 E49458EB61C06DF17B97389E5A17AAF32E72DFF7BE115CBEF9AA511F0D16BFA0 B0024BA859C4668A7EAC57D01828EBA271172DC56C673D12783EED20EB728AD7 CBFBE0B4DE71F41F28A1E20FCFD7B9BB4E3B1DCEE9C6F522C4807C3CD52481FC 0A03D6B9306ABD6958A3E1FB61E65300789A036BB83BEC589F40310E4FC9F4F5 3411A2CC93E86C6FD298B8DBB8BE6CA79680D76A0A7F4B88B6B6232B85D53DCD DA54DE59EB6E54F9D4904176FE24777FB24DE1B935CF5ABAD0420F5AB66C7A79 9E701389A40FE86DF13E7C8343F5A7514067447B5354A9E6B659C6048E7E04DD 695FE0EDE55E9CA99A15C6D1BFB2874BBA19FE19DFBD3A335CF81B2175F5460B E746201AFDF0C0CE4D6A1A6984239B9186A91715D3F7D463ACBD72E92EC41D7D 24275684DDA3C79A14C7A2EF291C8F534DCD893CA1F6A29EAF79D49D0FBDB4FE 76719A7A9526E492876E68ED4E81A025CE9E6F9B48A26B418192781CF710FCBA 180D4B5D70BDECDEC81E6B85980B89A1CCE4CAD2C0A6DC833DF190CFA5D56F42 0F3C1A87A67FA3BB1AAF4BD63DCDE51B1357028BDC3971E09A4BAEB5256C65D4 8868ECF3ADDE1DE0447E55C2565805A7C5D547F73BBEA934E018D186CED57CF1 81ED97CB4C142AAAB22F7D2D11154CB95ABBD3EF64EE07FFC5DB8427CF561186 5EC95E4F7C4B3F0F06EFE4B0765F351837FFEB91BF4F7AF871314B81E942F14C 8BAF602903948E5BE163488EFDDD4B239967483E3C40E08EB3CEC848FA942CF1 E59D51440702617B130D5FAE8E1D47B2A4680AEAD4569AEA56352E5F7F993BCC 6E404E38973A9A8D148E742901865A2ED73C7B07C201D9F44E713D1B360D6F4F 9596C31506744D9ACFCC95EF30101D86EFE92BD94CDCF8DDDB79E27515335D12 1A6D2FEB5C76E2F4793908F3C1AA834A3F751F90A566F52A999E6B24C65C38A0 4D8FB603879F9F6000B21C399466CAD352D6058C7AA7E2C7C3FA44E6C6AB4273 8417B98F3658A3EAC9A54A0DA59DF395885AB97915F75C693268AE2DD2DD4FFC 51206D872C9C9B328609AAF752C7B7AF07DC8BBB6E8B6372C39C3D1DA7E51DAD A19FDAFA24A46CA914409B13FBFAFDDE8856B29A8F0F5CB56559F53260C48DCE 5FCD0CCD31E42ACD2CE555B47B55CCA1E0D26B9EA3011A4EA11874DF2C9AC2AB 7C1739330332F6FB1B8DA848CE88903AD0DC5BD157BACE1D9E9CC4EC716FFC95 A5E8CC98BB8AC7D4AC0679250ADC135430781367387BDFAC77C8006078831C4D 5256069855B689CB9493F74CBB4D0622B2AE0C110C9CB69A31408A436E4EB6DE 9787B549866AC7E9B8D856881BF5110050FB4B7C64B8EF7B3E28AD3367B2694D 6B480EF9B659655DCB785CC11FD2E536151F419BF9B1EFC8DB4F858EFD08FE2D 1F03F6B63510D554B30A7897D77E588018569F67C865E2445457063AEBC794A3 1FB0B22ACE4C9CD1A69A48D0C76D5B004C9A8D9C9AA4807B62ED08AEB580FF3B 53320080B74F87D4197862A1CAAB81C48137DB8FEF4F5766EF8A447BC986EEE6 BF779C3DA3F574DE0D9C30DE8651BD7BC2EBE593983C82D60DBDD4B8800EC8D7 F9783CA41A107AFA3ADC88385B59179318174F6036154E1CF0D2092FA29945B2 9F3FA97DA2DE960B47FF199F70CAB5323CAE1F4E11DBA26A0EA1C5C2A0FA7B5E ED09AA59328B3659F559646513B4E52F7875622DCD99242182F6E4CC0E8E0C4C EED63917C70792ACDE217B053B2963DFC93D02EE6C798EABAFE7F4B0DD39CAA3 EF3A03D4F0E64C3FCDD0CA44B3510B068AA3EF3704B9DE16F2F7CADE104E7C95 86ED85AAD6751AA3C570FE895D5FEF20705E5EABA832DB8B4D8A3A210EE2B638 FA82EE3DD0D7106C6989ACD346F724CB1286D43234CDA1DD3C0815896C918035 BD1774D88E01BCDC09A3A7A315C37C70424812A72E33A74FAB1EF292275988D3 2D227F7C4CA80ADE8FDE259C660C172C9EF36570AE887D860D2C86260D289990 D9BD1F310B9AA22969AC4611B8B0B63EBAB9FA99DE7EC6096C7892F078146C61 1D740BC683E76C06BA162215DD71B2F8E13B2A6EC44A2AD6B9ECD9E729488BAD EF2032DAB367BC1A061247B32B9170B343FFA32057A46490AEB7EF9D74FA58EC B201B66E07A3055D7288271EFE70A0F7695D03FB1E22942571593A2ED466B25A 42E530E25CC91D4F813EB7589D2514D057596AD8DB6F016B90DEE38C95467E15 52CF22D3B4A684FCA80B2DCBC18E5EFE7254FF7BB21420A4D5719A197B3E947F 56B37D7F6D716FEB2D2DF2595959B210D333764681226F1D97F1B6698E229780 3ED996178EC061E854ED1FE2804D49F440F64F57025793A5DB6F4B7D7D9084FF 787E9DEC80C6350C10E9F0AB94CF3ABDA19F17955DD0CB5C9B7DBC4194C52415 F75057E24215F7A63FCD19A1ADA017927936D9FFE3D488C04730D6A8D696A8D6 2AD4418B6DBE7BD4FEF8F513CF3482575A8E2815D3B7FC37901816EA3A57A92C E57A11FAB701CD13FEA0F189F50EEAE2737732A43B634C4E7192D8385D93EACA 9811F0483A6818E9B5F4AF28CD3B4CE2F0009EA4E03228CCE36BD87105D1A309 AE0165523D8EAA82BCF88AD65394CE86E97998489F95D6C57F9B24C10EF8B75B DDF2CFB488E6272C0AEFB8771FCF8EF758DD32B9DF60624348BC751702CB1247 8AC2D2BDD0737C7DA463038FE88BAB5AA295C5784F1DA153B513A289FBBED781 ECAA447F9235F187D34DADC9470E7B7310E04078E8A61B8FC7F223EC315145DA E62C5B273073C7A8F48040CD6D6D6F6320C1F5917249CE6F03EA7B9A5BDCD2A5 8BDC87B179A18A40EE6A5F77C5C65B147C1294176E0D835A573F92E6C2DC1D8E AA5FDF0047CB752555A34876CB1DE27FC05B41DBC9AEDAAF50C09DBE4B03239C D3046CBD02DD97A10DDA8E282AAD4E357DB90C204D9C9D22F16E4018EE306EA3 306B2736675DB3BD795C28DC380DA067D9F2B0A504F0372FCF0854B4372CE434 FF84D247E14312B41459ED8A6AD9842E66DAF3DE953940831347534EF8C97097 C67907FD95156878FA254602E900B939A303EB0895B59A017831D23D41BEE2B3 AC2386652454381FA02A7A09E18E53A06422FB0B5CE164677EB19642FD3AF616 DB2B1BA660BEBE86879410C509356FBB773E6C8EF2814C3C054E08A5582FF2AD BB2EDC033A2F91266FB93CBBC9CA6614724267D3836E8EBE75428E0A6E458A54 1B892C7521622C8F156C74BC10E4E0CD07A822924E17BFA62ADE84DAE96E65F2 E096BC081A21D53CA7C087921E73FEED470D61F50F13FD34D390BDB9E8E61D7F FDE99D37C70F9426AA1DDC997157019D579A234CA0BD9F32377E583434A46C59 34B962DCF18995050CB0C7D3FF28250296175A565627F71FEC04B5C12B40DDF6 E83306C8F2E2ACC7582EC1DAD41FC711DCB1636648DECB1E23613D177ACC0966 7D2CA880324B8D13DEBFB56C867BCEFAEC6C741D302CDA92B45E8C53C72A8CA1 32FC38E22313BAE7116A2D0C2A37F50701E93429FDD26F5CA2C6FA9580C70094 DCE8ED6669AE5F1373C2215D54A11EE8BE5A2F4D4FF4C833B65A4F9CC92A750B A3A42334D1B4E7C26C2A491526E4D277E12829BC4636D435E718C27F14596F08 84E41D143AEE38FAC7FAA6EE1EB3E71DBD076A886797AE06697F89DD72E0EA21 BC075C98E1FEED66523165D82218685BADF1FFCBEAAA93A6CEEA5071A55322C9 FF264AA31E5911F72D15B31DF2C37B0EC0B39A28C22613CA782B06C57135B154 A0927C4D3B490E1D490AA1F91BFC9D066B525AF6AE5ADE96AF1A2ECB7A3951ED 7190E3FC81FB0DAE5EFDE3ED61A104AB648DD9B820C93D90164D75D76C85777B A50AAFB2B9B6ECD861F4658C4600067929F41C92C297BEA5AC623A38A8B03591 2938DF89A85E725DC53EDCC21645FCD875BD9BA170273220F1E0E9CBE9407C93 2B358101B26BB4A18104A9FB733B61FA815232D001FCA63E5F047DD3AC08BA4A 117318033337D23548CACCF9F9129401FF961C4A20C826B2DE6ED85C799BE40E BA0C596E8878C74A9CAD1BF21B7F416182371136205E96B26AE1474DAA732A4B 7A618EC2704A2609475164CB1F18B871C4A49701EE4E1BBBB11ED68CF27CF720 58F3D0757B61CBCF65325E9C3AE52793773FBC591C1C0B1ECA9CF0A235F53549 E9C206E67823D3F7AC293DFE499C99AE4C21F425327089A2A9149E308548A2B4 B4D93316388F30BC63B6EAF3BD7074F7E2911599411F9B7A624EFF0EDB343FD3 7FC4B299E980E11615D99C41E3636AD3B106D4E3BAE335BBFFFD3C873AC64675 BE37FF80B784171A073AF14C082CC073B9A94A071396D71DC80645A5DFBEDC92 D7D4E6D8FCC3B8B79E2F02981CCE8EC97ECFF4CDB057EA5284687DA182B1DB77 7BC75585C8AA1E8FB8778B8C4CEE2AAD392215E24EB49AB4BEACC51605A08851 C8C4E3F809B74D77033145BD800AE0A05AA35063C698EAB6F7C00C1C8E25DFC1 A9332322B63964A31D2B5027B0581B67F41E0C4FF5D417A39F1C92468A75C498 6A9C32CEFA18057948BF37401AB59231C1094CA29FA117ACD2FA3C815F4EF44D D5BA6EEB5695D41F702F0C31873E1C9760F8F7B9AA1A9E40378FA34B168556F3 3533364B7D56496EBDEB22B628315918881F98D461DD00F0DD0710A8FF9AEBAA AAA4F63B70A75EAEA735AB7F112FCFBC8817FA82B22D50049FD83D144B74D758 6FA53E4ED3E36891D8F573DD6339B2B4FB7C81FF03AE1E0D6BD3724948714A2C F7259DF53205022A20214B7067F69F044B6BF7488318ED3283D83C22B19A1C13 9F295ED7AB77C3AF347C64417C9389D36B88B5258A7940114972120D7DCDF4E3 DF1EA9EC57630B356ECF92392DC23FE08F69FBD8577518A2BC5D6257554F0550 F8DCC08DB96E1C976CD7DD0866D62E24F00537B673075398C4F685B0B9F83C5D DA03F8F397CABE0C84497369F138DDE130E4C3BA968EE647B21E0E7B0373D425 42D21728C3025DFCC5BE5E1DA15C4D7671FA1EA5181964CFE9ACD2C16A8EB579 4601733663B231396ACDCADC221B5137FE665F2095AF5B29F8EC0B1E906E91EF 3DFBD9E791B2693D4CB85BCD7C69B53F3BF587476869CBAC6E82F117EE 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT9 %!PS-AdobeFont-1.0: CMTT9 003.002 %%Title: CMTT9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup /UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT9 def /FontBBox {-6 -233 542 698 }readonly def /UniqueID 5000831 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT9.) readonly def /FullName (CMTT9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 49 /one put dup 51 /three put dup 58 /colon put dup 59 /semicolon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 89 /Y put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0 42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259 4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457 689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521 0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA 610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8 3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735 C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933 995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723 2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0 4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014 D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE 510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5 BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF 93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385 45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757 4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47 088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8 9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A 09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988 E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C 0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C 94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741 03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF 409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71 45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95 39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971 58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85 84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A 0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B 3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B 7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D 8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737 712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3 E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC 2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467 757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C 54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981 DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9 08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD 6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2 A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5 336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB 3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627 1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903 FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72 A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6 465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0 3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32 CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF 573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA 9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D 15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5 15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1 64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789 D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8 576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540 ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135 EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC 9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099 3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A 1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598 C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA 4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0 CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7 3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9 BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6 1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D 4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442 C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D 80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6 59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647 3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6 14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59 B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34 F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8 54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588 34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191 825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439 BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54 4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F 66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E 2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A 1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416 37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6 741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1 39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC 887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49 B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD 15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526 5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1 80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839 A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404 BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048 2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598 F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B 9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483 CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91 DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62 6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B 7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7 D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B 9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9 EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12 0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2 1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10 85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0 EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518 E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0 88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842 E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8 01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68 54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A 97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78 B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2 D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9 18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13 1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62 31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5 408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF 1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E 29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33 BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8 0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D 99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE 480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481 FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB 587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51 A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4 48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367 385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56 8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38 4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C 839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C 320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63 7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F 461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449 1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A 3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500 0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77 EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8 F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4 097C4995B2C3BAB2DD04B1A7097DE16DFDD76465E79ADEEBA90489ADD0914EBA 53E11A43ECB11D072C68D2131BE1C7C43CB9DD5FBA0A67BA43D6851AD4CD3BC7 39AE2E22CCC183A56CEB71D4F9F578518E376426E42B6390426A8434B5A83E78 77A5B9963BAECD5FA5521C2A29418764E4EC1A72462B04957F823E2817A7F8D0 1512919889500024B1C42EC107E8B8533C0B314EE4E23313A4C1BDB009A2073F 9BAB479A3F9DA76CCD65629CCEF78015ADBC2D0D124B3BB2D322FC4D209E417D 84BC3C758B6AB64A01E25C9C7B71D741AF90A19A339F99A0BE9FC39622F04C6F 737474CFEC19C890A657BCE192B9DCD8F273CDC5294875DD4507DC5723EBB357 73DB0933927DC21081E67E5DCF4E41FAA6E00E8DF04128F86348FB0718068FA9 918319C4EE9D090CDF348153B6CC48648C55E889B4FFD3D75466F1B50C437546 7DD9CF20980B148F60BB146402DC0732A27F255DCB859CFB6F9D329C12FB14A6 7824D6DE27B03FF85BC59703A5D6C5B7D1CEBCF3C3FCD71D6D6F0311E41BF8BF 0609D23C84720FA9EAC961C9D49C2E962D9618C32BAFBAA8CAB0B2F616E57DA6 8CB44C5595A22D6536036AA3F9E9B278571FBFDF47B2F1F4D97ED2666E9E230B 8500BC2D312B443B447D7433A75519B9722447641DFE4BF141B47C6DA661D20B 45415B8C958B34653799430B787B756781FDF8F5422AFC29E7AB20898B164FE9 70DFFA924B95D897983354C486A1A22BE93DAE2A14CBAB98B31791C7BEDFAC67 703E16141D92C68A02F07A385DD7B76EF0D1340F72BBD79210BE3B8FBD09C4C2 05A4010EBC0F102C6B38B3DC17E5BA390725874C1BDE29231623C8A3C019D5D2 15B70BDB0749CE0F4C1F2D3568F348932B98858944CDE283F180EC73D37EAE71 5D3BA19D22B484E20F27C2BAA27EB7BFA1B28167460D182D253A83CD1DBC4083 BB20F7AD951AFDFD3DCD2DB6BE32EF4F7F53A31C91A0C4C19B79A4CA21444277 659E7608AFBE84D7A5B8293A52795F70D3DCF5F2571A0B1F903928EEB098A751 ABE9EF973D1DD3A10549F11606C34E669E04F243DCD90B04890BAC4490C3FE59 4A16522E9E7A72A04336F4C1C7F0C9EE6E9644747126ED3DAE7E2E6ED523D23D 9934F02D84AF690994614F29184389148F17634435E2D4BF116ED7A53D0FB7A4 EA0734407A777ECA04902B1E59FD621C76AC611F4100D43ED0B1D1DA1E2C09A6 ACA867B8173ECD7AB799E30DD53B8F489F3E6DA7FF18A43CA18E3B437CAD59FD DA469841D33EBA73486FE78694448C3D763F9C32B9396240D95D5216E6AFAD7C 4726B44DD945C2A9312CD49357C249C82DACE64FC0AA67C621BE2C200FD1E9D2 1C8390960420D8FCF9F73F79B2DF86985D1B50BEF1D35D0EBBD513F6AB2A2AFC 7A22275BA534C04388F710A002921B4C4BAD7D6C0D6C945B9852FF6129200F20 512D8030144E351E64D980A49BAE0FC238F6F6340F91973CE884BC62653D4012 7AFDF6CC1D5D5820830BCF6142939EBF9F640D1117B9A298D979DA60B5F67721 883BB28036A6DB5B0DA162B0A5AA48D25CC8BE5BEABB1634580CE58F62740E6F 80E53ACC9DF7D8CD85E49C44F614AB4564FA6232494F829301ACC94BE1C1F5BE 14891AC7A08A9B5B54ABD16EDB9A4FF9A627DC50D843030D8C3C9BCAC702B2F4 63859DD42BE3355B96E04A2785FAC5D69B2F9F96D45D538AFCAFD55ABE81D99B 19FC0985A8FA0ED48E4076A22C69183BB7DA8DA4DB9AA65D76CD4E1BEF1F1157 993049DD482BA35664EC63E767E5C03B48BFB672FBF55A3B0CD8EFA896A9DC59 C5166DEBB533CB6646D3164CE0E99929AF7E840653A77BF7F6528E8E50D1B9EE 0625CF6D0C56C116591B2C0A3E3979316ED66AC5162172240EB639BB995E13BC BE5706CEB69AC3780050529063F156435347CCA6551442E64C8AA23F2C7B0E9F F7A4BE0E7A45F9C76251435BDA52B2D9AAA65F0469FDEA0C17B78C2BB0ED7F85 9DC05B37E9265C0304273048E6AE93B450FD89DF5200BFE67FF2BC2E4CA77300 83CDB0487B8B8E0FFFA26066C7CD27257B47C2E2C1FB2D40493C3BAF3253BFE3 8B3E0D4B73F76CA3061E09F43296BF4891E8A153370472E2B73300A830A178FA F804E489E5028EC8A5AAD264C866B92AC69CA44FB51F1529B9833BA616B135FF 6D94865B11D0E3DC90307A59EF912EC3BF4DB32280E6391A6CFBD4FC466ECB8D DEB94ED3608272C4F16AF8C6E9D8596CB8F577CB4A71A32FBE606E9A34B1F881 2EF33040CCE3F083C3AD020D09829BFD2113796D2A702E2783F06B2ACC01B8F1 EA56EBC3F4108BEAD72421E1F9A552AA5197CC52D1C1801D186CD5200597071C B4F462C83A11AE9011DA65D7FDB19A5DD6B56959087A413650CE3616B19101FD 94988B3667BD73BC869142E7BA6A737F277572D5F54DF2E5AB0D70C2827FC2D4 B17413AA0B84F0B997EF9200830FBF5FA6E92A65C99F98E86E0CC0C6D7932721 866A122EC91A2E3F34B0F55E4A9EBF7326A4948F6FECCACA8E2C1C651A6E9A65 451ADDB5336000476C675F9A8D665D23B2FEC287E2FCAB03C33117AD0983A182 AB392545BEEEDA998656831A04B73C0F6A0A2483964AA976193802C6BED46E96 B77A981869F141AE358DA46F989AF103A4848FE43B6D81B205F4E9FE16362BAB A2EDB5295B4D716F493729F81F221B02A745A890F56F0EB8E89C26B4B7098354 B8C420E84AA0BFDCF37BCFBEB0AE85E40C31060007C8480636481FABE1A50877 2D4873751AFD07EFF433BDEF274B7FFC3629EC480C691A303A84AE09FF5C7902 A2A863FE73CB4338FD42ABDE09327FFFCEBE7623B7B0AA2C4A8258ED0CBA3F87 228303B3FAF80AE2AD1D650160398D18915D912D154A01140EA1E3955ACE8557 DE18DCEAC4261EEBBAEB053E88DCDAA26692171495C19F055414D6BF5E036B05 F85F284BF1FA9B10C1DFA7AE6E3F2757EC5A6BAE15B4540529C34A99B656E659 C41C934CD3082C53D71BC5CDFAC321E4B7086E08672C9DFCB718A8F9B7208F8D BE7A08CE9CA35158260D80CAFAAABD98D6B6FA4C431922F8FFDD6D6AA2CF972C E9BF2E755C7FBCD930905D2478078890B0160D83414C6531A88D8E7DE1D82971 577A51685B86BC9FD8A4314BBF042B1174473A01041F5FE077FC683B3626ED03 D411D00B7EF0EF4BAA075A81C9009775DA55536C2E172E391816C7E2981AB093 23720EE984D7DB92E589B7BFE565CD2BA5A27F3DA582A968D5C9EE227535100B 01A3FD62C3DAE8C9B8C9643696AA0B40582BBA20476B4B60336B6608914920A1 F38608192100768948A75EA6B795D20F7770DF8AACB5B0E3A251403809835DE5 0D55879F94D3D3D73906F36997855738242C68D9DF27D8DDDC65925ECFBC76C7 1B13A737A00B9F86BD8E5AD23C25671F353CB4D4CD9F2FD36083E1765B05F0A9 59B967ACF3AD40080D4757A2FD117DBBE45ADE2017084AF7372C8B40218BC384 9628068C73A5310F78B1EA0C832EF1B2B7751D5132AF9167633B6F3C03CDAF54 EDB1C1F348A4BF211F8C6E0E1E2B5EA4EDC1381026F839F29F8AEBEC66B20411 5C570C42EDF22B5CFE1ADD814EE8BBD842A73D16EB89BDA2C182B1AA6C9F254B 3B77875C7D225023470E667D600BD343B6970DF88E30F2ED183AAA99EB1252AA C888F4D0E19141BAB873F9D0E07E5E1EE04D808CF71C7281AC0E1C46FDB46EF8 319A176109442FB575A74D04FCA6C2E7EE389A04B7192D0EE6B0132CBE087855 16DDCD0B73674D63B715C033F9844352E6812E2853A7214694D09163CC82FF8A 18F7FD70404AC20F2DEF088E130B8B1A7C7B14D28F800BF3C29AB11110C980D7 5FFC06BFBD31F41C4BEA4E5C257F000D541A6F455A258D68ABB01E3DF59D7B3C 4C85CDCBAE5FA28941B53851FDCCF2F882C4693A0C60788247D247CFE07C7BCC 024350BA044029C174A0B61F71B7DD9020D4BD0B9678B07CD4EC89DD10B9F9EE DCA8FBAE47EBD9C805BA7DC130B346D8BF388EB2304C0673FBCDF58BAD19659C E5F2F3AD4E9A1789BBE48AC23491DF92501D726F8623849BCA0F906C5923C491 F8E7C5641DFC63ED68C49119103C67C819A447502CD8BCB82CB9A73E7F6AE74C ABFBFB90F352DE3A8D4D3C12934F3743861EBD0DA37EB242A25AE444B3AFB3F3 77F348D67BB06DA2289639210D280960C8E13A1CDB200C890C81508C61A98C19 6021541206D1C0191639CAE5DD950191B8FD5C399AEA64BE1DA9BB54877F9009 D7817576E3697C8DC34C694B0DEBC152D6B75CBCEA23E7FB04D4AD400EC048C7 9DF03B98FD014842B96FA3F0C6F95D66DD9FFA9B032D4BBCD4E9D4976BD14840 F565AD33D1EA18D1390DB0C271F446FCE1C8A2B83EB00BAAEC0BDCC7CC65D49F 435DE7A7250F9B961BCE40005AA14A46A9D13E13CD866481F389AF6E692B633E B9901042D33A0FCA75814BE7FEE42E6D1E18008722942A756A2D1F5A357D4C99 09F19FF540A85E24EBA7FAA3B3F030C750F9D732C291365F4DD3004FBB9D1F2A 042848E16AB3D8735E53A3BB7D33C48170529F52495721975CC3B5A551D0B697 A32F097638C321F0FE3EFDBE475B807A087C7B43859A0B5467447E0B819DAF90 4EA5571ABA9E5998D77094A4CE21F8D8D5FA59B53C4B753BBF7953CB1851026E 0A9F611D61329150A2CCA40891AFE066E7C1E808364BCA7392D4007EB01C34FB 73850F2A870F096C9CD6E55BCBD0256B0232B3EBFA0A3FBF490F67020755CB3C E739B1C2E9F42B2DF1D69DF8694FDF39BD45BCDFFDACA918D9A55FC16543767B DDA203D35718626D98C8AE31B062807432097102C1BF53C20901F88098B1C8DB BAB1E33D8EC634A0414B91CF491D063D35D580F20E267F4C5862F38255E0BDEE 5E5FF909253F0AB4B653FD5ED819F5DEF800EB343B89701792C364BEE04DB900 B2EAE727146B11C03C92B431842C53A312287BDDBCBA4EA31137FA07C99FA454 4BC2FE1506225AEE5274284971A2EC7E47D33AEC742B115F4FA7FD8EA5C10A70 34D1AA47E2B26067E3CEBAC360FDDC5713B8389F2B73A7D8DD541082A2ECC38B 88041334E82A20CCBE94817C0603355823AE4F57EB128C4B3A3037AC1211FE97 091B6AD63AAB5BFE5B49F6C6065FFDBB38B7A5FB9689624B94A71AB09579E56E 2D537F35290351E65BB30A9F73CA7F6E1129A692B063FBBC81A97DA0EFAAC153 87F49DAED13380B2FB6194676670749E4EA35A86356F4E4414497F741A573253 28AD8E540E0D1A02425CEE08D75ABC646ADA72A0D391A7728D51B18ABAA2DC2E 3DDE1DA83866412B62029D3E332674BD0E239F00B2A62D929407FEE1CE6BB153 828AD1C627F64C42682C1F78BBF5A96DD73FC1BFFA86A938531581E46E51A81C ECD4A7EC233CD6806DBD391E92AE8B85D491DFA9EF92EADA92CFA77CEAA9749E C7C28F3AF45DD63204BFFDD13C30479FB827B71828C45CAB2B984FDFBF856A92 B7C9E086BB419D0C2535D0879824257EE3F9F584E6EFDA425FBA5D8A7210CA8C 19F1CD7E36C7C853A4D16798EA15D791F9E00FC5826106E8D8E6DCF9A3E5A43C E225D520330B4F75B2FB0D5AA6FD8494F877520883DE1341036F158F88C040DB 08E195140BBB8CC812CC02E9515CB73F6639961345E2EC584FF2730CE619E658 E73269DAACB1029B841740998FC384B681B71EB3EA525D7651B8E594D2438F54 0B43F7437A76A41A1C6A54332B3AFEF0664BDF27670862B0B06B7DD064D482BB 6C66B998AFDD353E50429232E7DEA9B7B309078DF72F37A461508BB91CC2DC49 FDE32F6D5FEAD126DB2A43E15A0BBAB95C9F8AB0BC9F8F5BDB213FAB5D77624E E93B7280C428CD8B23B906F123CA81823FD8F75F3183D0FE9C97C2FA8C7F57B9 C4BE093A7259D57882A39D9B09E7F2AEFFB7D9ACA520727636CF810DDE30D4F9 6BB74F5E3F01C46B2A894B2B8D7E9998194A6D215AEFF55B5F9D0C529F6181E6 5E9913A14CA36F5564619A7C774AE8BE362611DB045472337C805E115C8F7B09 3C6D36413C0447FBC4DF24305BC0EFEF05D62F712EB33B78AAE553CF3E2F594D C3A775711B6495405F16D2829EAA46CCBFD7F71AC54BC7FF510041359A12DDA7 F6DE559E13D6DB5ED32466F390CED699AA88A65D61B5302B776F53B930A87FC3 D2F2E813539B2868C96D68C0C90C1712C89AB5610FAF60957AFBDF1E1D8D706F B4E4B6A0525E410D5C0E400C8CE76B5855420F005ADD8173A9951C5896ED3C2C 1BEA10E8D6E2BE910682D18A1CA1F863F7C726A6D5BEA4E9C24CE0DF091A7F34 3EB93C93FD9790CFD0493DCB19F0BBC33AC3A3AB491E93997073A58A82F4C239 2008EBA6017F240CE800762C9AC02A4EDAF49949DFFBC424321696E90B37F87F FBDCFE76E6FEB489B4EEB8C73F064E48CAD8D3AE2E1292BFB337C2BBD5ABF8F6 8A3BF594F84D54B12679FD27C5997504C8F38E66702CCC5F2F0F28F01B45F24B 2B02D053023BCEFD9792CBB5CE52C82BFFB6E0623D7EA88C1D15D729F1B7583A D0ECA5D21BE19C045B479E55706ADE48654DBB38C75C4AF4F573BEC144F31875 787AB84C6CD76E41A5391D6D9A95657B001773CB451F1DBDA073A1A81F8BCEA1 79931B4865CAF49A1C4ACC11127D1E15DE92240C48FEC60E35C47A99165899B5 8EA8608127F480DB722E01B7B749F0A569DC28EC63205C6D61880E95E73D23CC D752D04791790EE19BE1D65915587E726456BA75F85E19CC76EBF6289F37DFC7 D46410B21A8EA32217951145E550FD4A79F75B4799D3AB9ABD8C8C8E6D7527F0 03E63E1F16A84B5A0E61B4A9A4434938672E697E3E1A86EF12D7AC2B7D35B449 F55884186414694155F5DC5C7A9D597A20DDEF01041FE8C7F454CB2C7ECA0D15 2769EAC8E53D156E2AB41F19E97C6355838B93BB80BA393FE8E8585ECEE12E56 07E9102D25448EC144958FBBAB9E30F3CA44E739EF14D4EE7D34561409DD82B0 A240A8F60B2EEAA6CBB832F1C548B0612E369EFEFC2D8519A9077055035D8693 E5E8FC0CC4A1215BFCA0587FDE37B36CC9B7694A3E3B6BDCD60D6CC2144316B9 537C7686D068940C5DB38B505956BCC74731A99A515F3F00EC6DE40CEE140F69 13DA94B3B44003D6359E937CAE20FFB605D47F400E87286E5DE1D780DE8BF634 3EA6D264A626151CD17139F57670FC6517CFF904BA2676AD08791C74F8E5660C B53D563EC8B54DC281C00CCDA8A38EA7DF52F59959B1F9B8E172D8B639781336 608A5E599F656D1FF2A241A32DAFBAE41D38050D08E0767C80BB29831604EF0D 550ADC758FA0382961FE351DE660C7643615CACC9B07BC4E66E470FC874BD05A 67E3856D21C0B65721F69FFABA39738AF12C63E20FC9136D146B6DCA7C206681 141F26FCD53A9B62DFAB110CBEB96903E56B130515C97DF263A8803EDD03E4CE 3E3CB9A7EEA032FCF8A28D3319FFA17039FEAA2B01CB27B859DEC2F1A9D76063 565D506696624CE294120BCBA34E6AC5B68FBD8FCA8FC32D4B5499D212665F95 A5B81530C57A40EC44F40F8207666D8F97B865689C22010DEE6BD0BB9994FCF9 96515D314100673E7E598ED7CF340FA832B361D6E642565926A0BFF46061D4F3 2AACCD4AB35C33855D847CF03A2FAAF66484EC9CA5B95467752D82C8573D7F37 27DB6F16D9575579361DA74EDBB3EBADA1C3840BB74F0C372858A57C39A2D4DC BA2174945A28CE4C50579D66C0BD849BA474AFDBC8CD3907AD5C964D2DE9270E DAA635E5731AE6351B55D698C090EEF5C9FB317CD6D65944C0857BEF19537760 6D5A894F3EDDB739C08B6F60CAA4E52245A1BCAF0F3FA31EB22A5F210FCF8E1E 1AE4090803C6AE935400EBD83FC590AAEC8E8C3D2EE0B07CEEDFDCF366F76895 E48C80F7E111EB0F6EFBA3DE68ACAE50044FECA74BA7CA76562CEFCBD7E8A707 C4DCC7EE5706AF86D1FC1B02E02C51D4F7CE515D8E16F0662AAB1CAED96F2158 DF1C98CBE9EDDFA85A7B7BC58E3B391801CB755B23ACB22C69579712161B794A B0AA257EAA68F8A93914F11680AABF3253AEEE33DD75B51F796FF7845247D7B6 54B250550957ED287C86DC9317B9CDB44D69668C7382802C5D28EDE0EDE32531 32CFB3EB700A4E1072FACC8AF00A29230F79FCAF9505525C4BC1818EF764AE00 F369CE2B5A0A73B38106930149EDE4BCD1149291CBE7634C18FF8BBC845B1CBE 3BF5560A2468C0BF7B8EE8D00F5AAA556B1AF2D7C6E3E114B573F2F5C11871D9 12A9D907C1DCAFB39BA07D9F11F2B1BC59192EBC1F52B1B986C3D67A72133384 867CD1BCFD2594C63F839819AB9EBE10A290CD4FC8E9EF2F94A40B51F27CDA9C 301D5934792805448F4D2C0322808CCF9C622E2AA4FF2660DD46619B047F2274 F24DF22675DAB6BEAC061E1D77AE485D837EF7FF8D9D19B1BF0B0A502027DC62 A762ED055F97E08EDB5873CEECCEFF49EDBB45C64AA42A7A41C7618B5AFF0C49 D8BCD669CFEEEA8A7D3D06321D6DB8D27767A4594FEC7D5BAC1F21FF28456034 7AA22F2C0572EE8AE1F6042AF8D701EFB675847457E209E8AFCB7E2A46701F40 1675810F2AAE65B7B2FB995761F7224D7500BDC6D3C0D85F16DDF6D5D4085F65 BB49875E4F2CFCB4BF8665CA5A147A60C776F97ECFF9DBFB12D4DF0DCEA9673E 97000B547C546C612DA7FDBC35CCDFB986DFE27E324320262D91B5A8C6D83229 07DC801D2A7971E8BA6F81A87C841D5E63E9E24B7553B7022D80B69AD25D1E10 3F95EAEE4531CB04D3A8E4B2671D67BDFEEE88A3CDD2AD80BC4C055DC9C0555A F0D77FEFAA477A6A7F64714723F10F3266874D96CD4DD5A55A5C346119F5512A B40325E03028A9041B4D48BD7AC46D639E72CE55CBBA937F516A1B75F9D830D1 23459C6C0F427A8BA1F791BF5486942B3FD2D30898F7FD71267FE54D18B11D8C 4474E4DE59361B49AB7825CBAB2DB5A6E5C405BD46D0FBE32F6197CB81596457 7AD7A204465E386693A99F613DE87D6EA4080801F9BC7611DC77482E28E86F35 5CEFC7E242FF14334C27691F758938D3DBFBD0D992C796DD60C06BB023B13281 B68C98DF05B13D7D0CE6C96E4FD3A514C9F670AFFCEFEC1D8195070BAD12407F F15658EDAE633A15DFFCA185F26431CA3AB9CCC591312F4A8BE111E15D623B15 F99CBFBCFF9F48B01016C7C810F0CF7343D2F5EDBA5C621F8943DAF7E568CBD8 F33BDCF992B1AAFA269754532B9EEC1C94E7FBDB12A4299F873C16B5F48FB87B 70BD21E6E990706251DDCD61AFEB2E30ACF24E70FF842306ACCFFD5FF8F11E63 7F4274B121AF9F0BC4783F67C8A1660D79D1A6CE07F84EA436C10BF8ED52312D D873E684D60E1A4A878166307B7D624FF4F55A93BC66F4674979443BA7C9E3D8 9BEF9D5A211DFC0D12A988659F3E7D44774DDF9217A5FCB5FEFCFBC06B9BFE7E 116B83AAB1A3FEDF9A7BD7CC3D75511445B323AF41015D634A037278C364D73F 7B274D40FD2B6C69375E9E0BD23C295B9A168DD7DA51D4BAEF75C4428E4DE5C5 7F5A02AB8EFA8DB72CD554577332950C1B01414776FB3BE68652A3A44055870D 6B94892DB39B6106B0A1E7001A2FF91ABA55D5EB7D234BE376028B1BD2AA4FDF 563D80DF6E594ED6F276069D1175D67631E99B67B4D032975425B12782AC3A64 174162A0AD4007805D2A8664CEFD6FEBBC92705956555219F8D165200208815D 1E3AC450FFBEF590E2D698A0C1006A9403ECEC86BCF6A60474194A495EDE0196 6665877043954B5DC8CB96522C443511B081729339E58E1633FE985AB4B8850C DFC1F66428A11030E7989A96D0B2D090D594954C1B3A7F09CA245CF19B6CAFA5 ECBA4E5FA061971B4705B2449EC558D14A4B4615694BB27B6E08C160753B6E2C 8F9A74D0F8F9AEC3C3391413A833FA7204D352907EF3DBAB8293D33A0C75030D 163DFFEE3C9FC2264698C9BED7F5DE341E78DE62DAE77D8A941E40F15CA1ED3A 0C50D5B8DEEBA643BAADF5D494A7E7D01EDA90565ADD22C031A217148BBB7200 66D8FEEBBCABC93E9291DAF4EC51385696738BA7A4B227070EB0CDDF7AFA4A26 5F5B1F90BEAB1FB2630BBC4A4AA7A359CFF55E4360FFB5C75DDDFD53DEC082B0 A3058E790F10EF3D0532D4764AB1350C3D9D8AD29C5544C6E5D977D0E5545C81 5C39D5B3AFE3E7C020680339F335EDE88278D6B1082E18BEA08AE979AE49F726 B8C7B17165C2FB5A05C18284BB10FDDEBE950EC7B9969D22A19475FB763F6BD1 1A8106F20CBAF3799F6ABA171140CCDDC9C92305D1D2F410D3695E0F1CA6D0AE 72AE3BAFFCCCDB0F1E1669E3ADF0E41DAB9FB5946C745EC34310F2372F9D51D7 70429569D773564FE59D5421072D291FFE2DED270C38092502E8F66FE8A20B81 30CF23D1A1A7F8A3F1FCF2B42F8FA68A75EEDB808DCE8E450D62DC4A17AB1127 1BD953D1FDBB7FE08ECE7455EDEA610DA08DC5B043EE9EB1AE5B471D041F42C0 3A5DC90C7FB1231E73806981F3E462E9B94D0790CC02723DF5133E0ADBA5416F F483D8EEBC1CC560F5D3F303ED2D2CBD248A583A69C298FEB1DEE4F477AAB1CA D0D6A2932129CD9F27729FD3BBB2D95A10A486D0DB698C9C89E87EF05E9C5F86 1E7A5F88434DB3696FC2AC415BCB83023DBB861DE294EB3C3A7F837260F3DA44 D35300F366F541E998E508999882E86CC9CF41143C2382DED09548EB8619C387 4D0F7D27F8E7CFF83DE1E8E389D48A153A06C253EB9F269F327B006922FE3291 90C2664B6984D545EA3A24E6F7567CE873A5D46D99F33E77F2A37623414C88CE 507D06EE9541442EB1953CEF377954B4A9624B1FE10371899D0C92539DA4E278 C5C19A4F424B86C98F84F7B70123A269EF311BF48CBE103A5FA2D8F00C3B0D31 9E2B373C89739BA57D425E2756CB2AAAA10F49CA7D2183B36B782CADFE954263 5436ED10BC52FDF2ECDD696ECE36245EEA28BF79F98BB08A64467BBCDA94B6A3 56774C9526089D23CCB7AEBB5D60F081A2A8FCFFB939D582C8608802DC920FEC F10E179E2A0A9C4313BE8273B43E04C472B909A6430C920915855DA5B29C78FC DD6AF0128B23F230173BCAC912C3AF7427D21B4D306A6F1B645A7A798EBF9498 41A43831FB1D7E5D6CECBDD1322BD2E6C256AA22095237C70C039FC05BBB17DE A0488CB0679EA55209BE6C031C7805DE82737ED25427A9F90FB4E87D6AC263FF E18413CF8A7C6F4663EC4BF995EF4A32EFF87E6CF546D97B3DE03874442F3FE5 0999E496A3CB63BA0667C2EFB22BAAE951CF0843AF70AC02052E828D53A2F791 D74233E47F27F59C8A4C7ADC0B9EE91AB155E8EC9BC0F8D413B7BF0152F14F03 254DA486DF9272156B31CBB9625C304707B465DBABC67DE8357163E4A9E84E5A 22FC61C7805D96E03E6B5C593D101836C681567C002C90C5C11DF5004C793FE8 37DBD3E9997BA357B8769A753F70F540B34244273412A02046846C5415AC99A5 D0C2A948A7CB6590D48E9FC5EEDBC6B615555243613365D56FA7B410F7072B11 708F65F58A6033F783E31F476F6E684BDD07EABD3ED62C2785C6F95EEF8C8B01 1E244701FE2E6A9A6EF432186FFC11ED29A955D2B13A1643A5FBD99234EACC08 F98A91764C166FE4E6BDDEE0AA2D689D2D8AC1AEFA2762C1E4CF3114254159D5 C8D894CC50E692CF863E6C347CA86F048C7502DEF2275F3E83CCE897C69DB5C3 E7C4B7CD9DB0E5B777F4CD86E7CF03B35E39BDD525DEA11F632DF68B65D863F3 0ACE081905DE99FEE687964825C1E7F14511981EC483B8897A72E3E4AA3EE892 E66895D8C1857EEABA65D2C33F199C3645346B2C7169EFB7F8C3D490C6DDCB66 B2B212C67BF20BEFF7B471B5AE96E17B920D9343AAB76B109BA92449C6DF6E59 1A1FC48914B2A2602B6AB1B219E30D022050067565FFAFA0F51E923151914AE2 AD6E165CEF966C2FEA85ED68FECB81A5ADE2DB14A9CDF26A1FAFB5D0D67215B4 F5BB068091059A003E46B4F5396B79CAABD872E067F7D67FF6B0492DA600D698 8838734FDE595DEF31B7D767419D18E649E7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /UniqueID 5000798 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 42 /asterisk put dup 44 /comma put dup 49 /one put dup 50 /two put dup 51 /three put dup 68 /D put dup 73 /I put dup 77 /M put dup 79 /O put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B9C9DDBA700AA803F99E12BDCE73F10F769D7C8E1AB0 77431FDD829222D4A00DFFA8E5FC89B8DEC03AA4910C57E6A689EBC39EA345CD 785A2885C8133229160EB3DF0B348DE734E4F78CBFE9340432C21026C5832003 E5688E20806F46ED465309FBCD5D50D1585C981C7430956CB436B883730AEDAC 1E76732CC2F9B08F3950A7B84F0CA9C5B92A11EDC335D079E6ACC69BD64BF071 A2E22CA7B18E275EB0CF680AFAC9DDE4F9B48568A1F4CE85A570530780EEA08A ECBBCF0166876363395FA5F7B4BCC0AFDE2B01C8EBFA7405BA281FFD4EC32B51 FB96AF5652F817C75600D22E6C0CEDBDE0A2974D52A44E36C743DCAE8F110775 372EAEB3AF2D55D68B2C76A1A2814E5E7F1D077FC7E99B3C80C381BEFD906452 8ECB03F297CA32A5F7535AF525A87A942AF4D93144D178477E926EF6943F6FD5 522D9959FF22A0D0F00D5BADB0CE79EEA0B7D8CFDF3BEC5CE672A1A93BB6580D 8795E65F7BE722F86CB07C12BFBC4FA27708E0D3C1061FCC2B24033A40469AE2 EE7C5B44A6FAA1A4E0DE6D3DD355FF9EDAA8A80282DC5E241C6B85ED22EB6F32 A3615DF82B3C97DE1C9377E74B5A4E832FECD74F6712A0EEB26217EDA0A1915C 92C4924989071D2634D615694FCFC25A3EA44735B1B60E08E0F116A3F437F214 712A2290BFD8182A0D35E287C7B6177B201B8D9811F08545ECB8934AB6E4F36F 9970CB8C83EEA9F0D6DE7519672A1EEB889BB5B3AD6FACB079863B702DB447C2 3D945B9D9FCC05EB06DDAD1F8D71F7CCC9523D406CC63AC457D81A407DAA05F1 4FFE6B917BA72140C939A0CA037529A9F2F5910669348796CB8F5CA1A14F521C 8B53F445CDFCCBC6E9A94D32F3FC1C55404E73039A7B10C901E4490DB78E3403 926A936799B256B6A1AD4567DE56E9E1D914AEF0AEF42CA71F8252FEAEC53FD4 1F4E4174B7501E1CDCD4143ECE6AD920458C5E8DF7C39646A95EA56AE08A5BF1 9E09F2C44DC93D76F203637782391C308942D678163D6E22D1363BE248DB1D80 D6000AD8FE52C21374E2D22AAF8414F46DC452567D3FE11093922F0282015616 5D825319A74AF0D0FD88920A63E916FB2CCBE450F27EE6F96343D1826155663F F53474CDA664DB56A0DAD0AC97720AD0BA06BD1D55005E3B767E0C6526C9C347 9E0E072500CE5DA8B16DC70D098834AB9DF05E8FC7DC62AEDE0587D8CB0AB319 C27C340E48E48417FF449941C919F46363462F7291F0C88991276BA1557D8993 EB0D3AD912287A1B2BB68B4731A35392406B3A23E3DF2C1592B7531537C6F613 D93ADABE826A97B1F918DB35AD433512A26648077C3D948FBC064C02EDA1DBBA 66511570E9ED38EBA608EA024616C0FFD0A433D84B5F1A6DC1CFDA01AC9C1ED4 06FF32F731D6485A5DFF8A7726DEFB5D15E930464BE5016B74116233B4DCF8B4 81A33120E2BDBDCBEB57E14E45AE1DBD270B4AC359027F1DC8F6FA67194238ED 37EB6256D4494D11F5CDB715AEA3DF46A15DA03824EAF331CD85843A23E1AA77 BDCB175748F7153ABFE3F05F56F44F903BF31E532AD97271413F97DD0C570453 3B466DB9D0DAC026B02DB37E3E8C4821960694935D58E1F183EECAD27D3EF03A DC19E91C1B628CF5870FA7791B27C3DAE240B68F14A5897FB3EE875B5A21DD95 CAC5071F5BC24BB02C42F3F5F130E625055B855CA412375E413215CD11B008F1 047A80AE2862A35221FDADC03EA74981017FAA5CDBC91B2749BB60B127EDC707 806D23DE8DCC3381A1433BAAC919E1ACD205A00D5C6228AAE1D7205F7E7C35BD A7E46AA9F67DD13E7500F829B36BD2031BA1B0DFCBC0E315087AD90EB064786D 87ECDEB9009AA305785BF7212447EA60D1A2F1622F29F846E34E90D1F7779B2E 08D3A32941FFB67E1AA8A8868237F175F133A15E4BAFCED9CD2193010D63D70F 6DC53B54F0ABB6B89BC7DD6769BDC5CA9A90D006A1A6A33CC22C6F9D16161BAE 6D690AFFE6BDAE4B8BE287DE2D8CA0576D17FBE5DB16F9E385A918F405296DA2 733EF011BBB4BC787D0AB25A7F3CE49FD98B82B12682EB7CE0C2B1ADE33FD146 70C6B6FCA22F1041D4A78818E47015BCCD94AF0BE2B086DFDF762EAF91617225 9E0FF72EC34AEDE14A309898144DA21CFE61059634672750E282262997F3D5D7 9692348605CE10F2CE1242E83E35E9088367CE26568F78981B480F8943CE943E E2BA5E9CA223EBFDB7EF3A9A4C0A85CF2F03F0DF9830EB9795DA2D553A50F34E 6A0105C8BB858261685D13F387D865BE4FCE7156AE29F21D5B413B691E5FFB22 2349B6FF80B48C9C6E157388CF057FAEE6AC1D1EA46831956B221F506D3368B7 633BAD549F50523A1EFE4A54E0D5A3111743A18C2D863A34A18A1ADD98C5CBE8 30D194171CA6938838ECDEDB14CCD18971026C9AA7BAF3256EDDFCE5464D027B 08A7A52BD30821717F51580C8153C0DB6E78CA1D8D521F8F115993B75975BDD7 27946B96C5E0A5DEFB59C07A3D8C2A6BF6205A81435D3A955D8F92DD690468C4 DF2285B1D72D794FCDFA78A0842FE72B365DF34D1FE27BFF4F1A933C83984602 3427042AAD38FC16DE936A2832FE1F3C3FD21ABC508AA4AFEA1083E43873A518 2F14EEBD69F4CD7D6823BDE8FC22256DB660F2EC3A0321CDFF81E8B58F2F29E1 5ECD2962D7F622608643B736D9B445332906800BB453C32F2958B77486F1215F EC8B9431130BB35D0B4560D6FD7D437B3C838C2B94152A4EFB7AAC52FD7DFDD9 5FA07AE14E486144555FFF38D9A5AE2B01A02E265135167D41656FDE7D8102A1 4A6D16DBE6371E1AF2DEF96ADE101C80BF03EEFFA64CA1F2360B3E0A8E29CF74 34EC65CD5B3F317429846C0FE711FC97CF5A7A4B71FB7EF868E8E4AD442C7217 90A3C75CCE061E5678B2A8D493CAF9B05B8A348C71A9B097A32A794F1C46F232 8C58DC3A2E27EC1F40885323BAFC0BDA628F1637B0AD62ACB06A8D31009EC6C3 DC8520B4AA94FC2E3873B14FB9636BCA1B99F504C7FD5053C85B79F22D577993 FCE560C93F3DABE4D399FD6AC06BD8C4AEA70D412C276FED6435967FFFF31780 072CC6B0F5870B8B1ABF1BEDCB6429632C674D4344AA3BEC235AE64B64680711 024D82A7AB55240439474D5C00A729866853401C91522D02A352AE3DE5D771C6 C2BCBF1FDB1BBCECFB4743C63C4F9C601C3009E2CD2D8AAE1D2A77B7908A6215 2E4D0D4351083643C4A389F9EC0A883A1825B5BF56C46A45700A51C284FD134E 0C655E0D4205A8DA61DC248CE4668002E554F0029B6839041BF63BF4F50135B1 F56621CC41E39B0AE8AE99B3CA89C05F0856EC4623ED21E7E175EFF2E0403D94 606021876A781BE404854FDDEE0B536E12FBD27680DA50D31509923CD5497484 09D91933EAC9361CF5AEAAA913A76150692876C4B1708DA51973FE65354B84F7 B92C492BD8F7DA28DECA971B0F70534E217EFCC64A937F8909368B3B59B8F7DE B7C1BBD4D59C69DF532B59C1126BAD4438EB2C009CB12A0F2EEE1414611CAA24 78683EECCC9DA975CE1A1302CE90486053D3C6AB1BB6A7EAD3F2FD5D72F01F00 01F2B8CD1C4F7CAFFA418AE0DF5580814BD4C1034CCE04DA36CA3D4F8D2497C8 36FE73384B7BDB6C2097009690AEEC180AB34B74064B2F5696CBC6778C967500 D3E86038075AF711B69AC17200B5BDC1AE2A8D2805DA150330F9268FD484F48F D10F4D209CCD4E64B0C5B6C5CE08DB708D05D8E80617C5D90A7F13A1C3B34961 0C6A0400D190E5187A0760D68B877E6A4082DEDDCC44E766577268826E348789 E52A68EB38BA4FC1D3EAD381BB82D40A994AEFD1F78EA9C491FDE99AA4EE597A 85495634A8380917962C18EFFC9A558D4A71B4BCE1B5EF02F165A9C5A72ABCFF 558F3EB5436AD0218B1C9B252CD8A465659277CCCB25036968952B4B74D1F94F 5E3D25D766ED2241B806E3757656D84C3CE5F4EDCF8C4F5648570167FA3A4AA5 3928565CFA592C54A428CE1F28C27DE92DB0FCA45C92202949FE6AD6F46B90D0 FCFCDD5D3DF0685AB5081F497C590D19A015E7709E7F78FE593EC85E4247CCCA C603672DF488BF320481B3367DCEF68955848E868AA6F5CCAB080A64A1D5F731 401293B476EAB3FCD7AC94C8DE0BF530A7EEB3073C06492884158D137BE28815 7EFB37B977B6E3582D1ED955E6DFAA6E897EEB5A5D0CE35F5B60DCC59293E3F6 CEA45EACE076D69E54236B778C9E35F1B03108C6DBDA801025E6DD0FE87ED149 95759DCB4B5CD3216F9594956A28D793CCC2D8E9B7C6A23C5E4A1D255B7A37A1 D50CA5B66D78F43CC9C0D885E63C87BCBD846334332C64390CBC29BAC4F31C07 BF9F3407DF53E948742AE32792AD41637311F7B5CD3521CE83C2F359C041F24D ECA3C168EF679C5B6D350E8FD9350BA83ECE1F9723F1457A691171327606ABC5 6F953C9DBE83CBF117FAF4403ED21B71DF86BDBD9E31E40AC1BB581EAF5072DA B8B7AA58A43E35EA1AB1D51CB7DE9C1766DF5C81963DC58EBB0D70D05F42D3E3 713042E26D616A634C56AD884790AFBED234E5F233608FCE643E91ED52649B30 0D961236D21B32C6024F3CD246EED413456AB65703102F5B03C3956EE4AB6FD4 E7054DACA6F5B2F238C176D032DDA74B06B4D9AF1AC9B2A32E9B8CB18F55F049 00000304E7778121D65C0F8B1C2157A5E8C18F8A3782829B0E88EA7925EFBE9E 02C61D74DED66FACE69D9B8C1CFE8585F3926B163E325F4BCB8C83602080B5A3 D1F9578629FEAFE165BEEC490756B4D91FCAFD11B183BF70E245ED0DC4B85FC9 ED13E18C4951C42531E66708DF3EB49026D55C4696A6F2DF429B099713513F8A 4FAA8D51F8A5C72B7133F43648A463AF7CDA767DFFC85B7620F9CC3A71F638DC 01E7D98BBA0B92C0D5F4285F0F7C47FEE06BA3CDFD72DF5D7145E7E5F959CA68 BD0EBF62C046C7C116AB5606B33350811862425934FC9A5384128D7306A92F2B BF85565B71536F3038198E8B7D5F3686A8AEC17FE7BC39AF38DF6DA270F2591C 556A8C0AEF3AC7B7999E1957EA1BD705B605D25808EC640B9264392F0B721FF6 0CF6648A0FB60EB72A0AC683A0D49F348BDD1CD9B943193DE838F722AD2A11C0 8F9B82D2F0EA4D689F4A112451473D0284EF6BC01369EBD30F2273BB7942B23B 0BB651AD27262DE0754F13528916079E48C9B4CB8750EB7DC47071E28800F953 2CFB7B193176D1A5B5F51629257C3DC0A91F7D182F7C152D03B7223FA73E5246 A62CB07CB87766AB18B8A0BB11A005053A0519DBD69C7D03B1C867CFCB9F302B E338FF36AF977C879573BCE4ACD3268ECB7D575701F650095D584C3445C51C8D BA9982C62FA34301899888BAA60B4B1C39DED2A15C8F63398C6B53AA9BBF7056 699F3108683D355FB7529F8ED0943B228789C2A311B343ABB6439AC7F80DA64A D42E8510E0C3D69131D284F8CB7306FE8639029F2EB5900A8A6A0B93FD797F8C D0527DE50DE5D82ABE9055DCBFC983D4B11C3594F0BD375BE0396340094EFC59 66A771B728E224BE955B0EAAE636468D88E2E2FC7C1716EF3F3510BBD4D359E8 2FA2D20B6322C8D29933E6A33F9EE756A12069FFDF2B04F415677D64923E361D 3F590A21EE6DF57C26A58C9FB07FAC142BC9B65B1184A4615C39B35F8036F61D 21E3C297E01D4CA1942A91B3FE9074D98C7D73EFAF5FF9AB3B3B55DF2FB1F580 01A81693A1972D11746FFDA5E5FF657CFDA822E0216F959E2C92431ACD03EF17 F7C1FE1AF19631425E0C93DDFA803CCCF3E144FB1B79CE2C25EF0AF231B0F529 2C764A0BA56F14B9F8B1E8F7AB350778741A3FC4191F013156F7C4ADCC1641C7 4002E1F9C93AE270A5E43597FC4EA5D8BC36986461DE011FC7796795D7A09AC6 4DE84856C18B2FE8249464862E23A1F98BD1C9FA97F73ABCAA684E275323D7D0 443E985704DF3CB952E82E00C70798E41168E050FC09EB0FD231358FABCE07E5 849F1AF59E0A9571E46CCBB3F0E03920A03A95BABE9FB3C9E3B3F05736C48D37 885E887EFBDA8059C968188B83215FA2E4C14EAB3D38F548B6E7F2756E1BA7F4 14CB40349207E7C4D32FD64B656CB6CC5EEC1797D42926A0491F1FDA4933689E BB78C2933EA92E48D5E02F960E9399805763CA8368324C47D7C898D8D6555133 C73D58C1E2E7019904C4D200A8C9FD34C1069D7A8141D25AB538D1D87D1CBA29 DD6BD5A616517FDE17F15FE795EF681F4A151729253ACB20ACECC38B53F3E0B6 710984B40B5D8BF202FD090823290F9260FA3DF4EF656310DE92BB1CCB78E203 FC1DEFB38979F695E623FCED55872C8D388A430F87B0001E6CC3083E822CFF91 3C2DEFBB95FE7ECE9AF67E7FA3C7B37343878D108082516D5B03599740AF3A45 C097014FC505A83B0750A2133C5703BEF3B82AB4626EF61132DD4E52ED14D283 2F50425F4A9056161C74E2F67BA0D41038621B74C086742ED24A03700DCFF6EF 1E60BF825B22DE4611B4E24F835FCB8686EA8242CE73287BD004971C10266C8B B8FBA61614A1947E8FC7E8E060A59C62588572052655CBB185BBB8F8B251F522 DD7A8A2D135D741AA7EB11BE3BF083FFD57A0AB78F83563BE3E7D1271065D670 32E40B8B1BDF47ACD8F7A63EB7558B2F89D8D9293AEB5298CE6D574E33F85A6F B94C0794CB397CC84DC15404A942407D97F60A46BB537BF328806DE2AC02B96C B00BE05169A4E3CB5E7F839DFE392FC155662334272B6889C69F6B0BE85EF015 077F98AFE247850061856EAD97CA46A75CDF761D8C53BA38C622C662C9EB9B15 B5048A8C02E3331B0A0FA98F9FDDBA313B0ABDB1D3FE7FCF34253C45D6AAE735 7A91B9BB3058A62B3021170FD80CBA44E248DE953B8CF7BE8A950E48A4AC46BF 5A0086B58340641F525ACAD86563C1BAAB24B2EB56052F01D31246554DD7759D EE98C52EF9CB7A3480B781D64B6075D35E66FFD476553277E98207503F6A594D A6EB23517E2804B7937C0B1A52CE767E5625F3EB58AD088555AC6CC833530858 E133F17629E9C118263E67380097F56724792A4409FBED492A1079283AFC6FC0 CC576172A429A284A1FB36AE1485D3B126E0156BAF24EAA43D654F8A81EC5C9A 9DCE682992B82A23A91DDFDC0D7FD59EA5625C9AF7B41ADC379BA802B68AF5A8 1208E7D878B77016F51606DA23902061B7231A38F2BD361A311CBBB8E4F81837 70983CDB085EE766506B6A0D8ED0661B9199AFB5CB3C11C87439BA6B267FB038 EC994C943D785EC0F82E4C978241DA2013D45CA130B17BE0AFC2E3EB2BC2576F 4CA57C21B66EFFCF47DBD17F04B5D02DA03C9F65BD260D3C0AFD4D0C2F03B0C2 53D8BC7F598A94832DF93E9EC8C885C6BD103DA485FD41F9F1C628889EF49339 3925544FB456C43B142F775672ABA9A56F042060BF6FCBD51215719E9EDE54E9 657298D20A4BB0B09B003AA2BFC1D57EC37C791AF2662D98EBC3EF23959B2322 1D904B6FDCB04392BFD204503E8341EA05A78E26A86B1CF7AD6C11569C549E27 BE7D0EC70265B19DE068E1B33700C083F783FD73E0B162D73F14AF68FF4DBF0D 13FA45367F212DE52A693A93201D1E73085778A70B0D9211B1888367627D382B 813666EDC3035C2F35F4A22CF1B072B94C4A7BC789019E1806D0F9B8C058E6D6 7A6A9A9331D8F8D85F3B8A9FDDDE80809FBB0BC34EFFEEFEC90DA48D529924DD CBC74E41E66EC7234F0C71A73C6C9FEAE12A60A090E7A08EC3AA483AEFB99019 49C56F2C30CAA788030EFDA0267D69122357A169A65A63131A11B55D0506170B 18C49B1308F4D21C234C2FC7568DBB6A103162A2B783918FC520B4805BC074AE 2C18AA5DBE694B3C18B76446F9163010BA7521D6318C3D2DC785A6475B38B5E2 EE6AA7725813A49C74E93E9A2FD2CB03C5CD75ED028D07B245991A36AC72E355 B9FC5F35E826A7BF1F83E4DB5F1A9A1DBA23C05679D26868894BC5448A59D8F9 D2DD70601FD3613C72BC09EEFAD398A486289954999C7385F09AF30823BC50B6 EF36D6559A0248780989986D17B5924856AAD8677F98BE47D15F74B2B69E0216 15FA82A0960BE381DAA43ED33D08372C30CFC84402E34CEC934F99C14E5C658E 466D2B6787F68B3792D3ECC2364A6C76269FED6F6CF014305D05614A67B878E5 B8368BD56D833E764295DDC35B5EEADD161425C88CB6D8F81579F1F97C5A31C9 FE55CC44603105B72FC69F01D07F350A1FF0B943E70235DAF07E6EF960183611 0C81A9AB28A9CDE69874B4A70C2C53A799C9520C13DFDAC2C8488CEC702C7734 39A7FF456A41F48EB8D9A3EDDBAC21FACBE014B1F558DB9A5449608324737456 D9932C34C9B18CB8D8DE213024A4078E63B1BA1B491DE961F815410BAEBB5489 B80CDB5C2FAAE282C0512546355907CB0D77E8DFF5A0CD5522EDE5CFE3911566 3F70E33B2D41EAE2C2B86F0D203DA2A072F1BC75DCAB0C56132836290769EF39 16220CC505DD5FE9DB8ED071C5F81DF6A41BCF2A0608B5208ECA0F86EAB89539 4DFD77CC2F798496E5F5998430054EB5EF7BF5E9AC085F57948854365BC2D2CA 4EC3CFAEA580E280FCE5392666111DA2084D0DB310D29001DCAD0C35A33C499F CD77A1422556D0C71CBA2FF7900968B90FBD64B570F58550D2383DB7B67046A0 7E2D5F6F01ADAB704D51C110CA04DD30BB91969A0DC4A0CBA62B94148E0F774C 9F78EB6A8EFA538947DD17A141DA8E0E9F5D4A1A38042601831EBF77D7A1FFCC C34F8FCB2D5C39D6BF6B726C16F38D87EEB3DB9BEC665C397E11271A8C04BB66 84EBA2C6E9FE2A05CAB1712862AA4F6834830E881B86B93CB1772F27D1FC21ED BF827BDCC7B6D798B71BEE0A1DBEF5C74BB5154AE4421D831DA29AA308859345 F77565ACD19E4300610B07B0F47AA1497A0D0A39E6F0A86741E34774BB65FE96 F0421081D0CB24279A28E45890A13F79341FFFC9EC4DB0F5373763060D7EEECC 184928F854D2CE679631CDE95B057C10D255728641438CB48B10768BFB910966 E3AE93DF9E703E2990D0A6B7345E22AFBD16C6957F0A90CC8047BB879D8DBC2C 9EC306C1139B3D3CB2EE734720DEB37C33D267F57B8AD84ECFFFEA0EE5E1CE46 8A5E75906FB6EDCAFDD02DF68084D649289E46005285822B68E434B2E8FAAAD6 BCEB687FA607F2ABE98DCAEAF00D33428C87DEDB95B0905A55918FA2AA10B20C D9B32E188CF120B9488AE836E4532DCDAC3B77A7349B2714D2928E9EB26AFBE7 E5E13F51364CC3DE4CE6BFA27F2AFC4DAE7CB0CA8FE4D4E8906C287DAEC59FF5 F1D9582847A43EBE9933AE3B3053ABA7535213D772C1E4A23623832E3ABB11F4 332E4E64A94ECCE3D53598E523311535072C61814EEED0C8155492F100C01737 D0D9922AA9781AF7B0AE340CE82F92788DA2F01F6E9130F2597A28F00A554C7B 6B0A5DA3D8A4B4980736ABEA80D288565525B1442F333F7260B8F99C6B70ED5A CB9AC9B87BE619E905745D36F5DF9377889CB39AC77C4F6B0BFFC68F5C830F50 D0BF1A5A554A83529E79111CE041AC95D9A2B0DA99226207DB782A36509B9F64 231CF815E5EFCEF221101BE1A49B1A824E3F754FD4935E48B244CB9C0640587A 9C146FE80CD26326D94B4274C5E8B2B90388374D2E7BBDBA974D7EFD79A17891 CCF4F6AFDDB91515DC6290542DD387966D227F44A9E0B9822992EEF63B5A42C4 D85BCF30DCCED3BBD426F1E39C07105C233085233A45C398DF878542A0F8A0B9 40BE14D770099CFEF8784A8EBB0C0C4E71ADEC358E82A021F59D6BAE17F2C414 E6F1EA531BE498AE9E1C9858F88D1491050233C754709F137E7D29EC3AFAE1D8 A7FC946818E7E0DAEF6D5C7FA4AB8E2561ACA45E2C76D3F427080D2FB50984FB 5FB1CC0045C2DBCD70888B9D3A2038D91F478CAB43C93EB35D7335BD83847130 EAE208416AFB970C3A11B058C7F8CEEA67C138B132ABE519D3B8328ADB091F09 1948D00BD316A9456168B5B8B15CFD0828B4FD46C4ECEFCD50996F1AB5528E32 8E1DD5450BC16B40EB8D41B8B564CD7E4F4161A5377E6FD7CA4F33F8A3E63392 1DF81689F032C4E4056F29D055EAB09BD617EDAFF678C33E321440B17033E08C 1154F5B979BFC063A12EBCE9A4A42CA9223B0A4174CE6F26022737F652A14DA4 046F0E166C7FA258B79AB0D1E0E73DE9DAF2C73F53F3E292B0A5C672CC4DE949 4038C8C4146D026116DD4BB7F8B389F098D2BA39E313D2EA96BDD85E5FC0406C AFDE5CAC26A5787BB4D9A7F8AB1276AF7295723CBE193FF6F6CFD5BEAB6BAEAB 998CCEFCEB6E689B79F3F82ABBC2A75769FDE3DA891F73D3C041769DA7D4F445 2FB5AA348DCBB3CAF0E0DD39257C1971E5CB6CC6D5C9D10836384E96B4E90132 9B558AFF10F0956045A3287CCD6BA9D705F7980543AAEB9F1AAD87C3A8A3A012 1F981F34791543F910D0BE003D76DF7E471F41B9981573A0EE427AC26E9D0D09 0A9F9DCD0D61881C48508853F56EA96DC9B26D2CEB9039C32A7154124E8DC6C0 04599CD1B653DDCB2384E17AA673648856208B697F3E0BB7780632CC7DC57F39 73B05FB23A63322473558824BD8C1904A05FDDDD23C7CCC54F14B7896834C57C 600DF23635E0264604969D2EEA7EB3DED268085A0B16CF733FF6EDDB75E07A7E 804DF86174D41F9D81EEED917D7E0E5C3C7BF4B533E9B54F42D63C8D7C5830F9 48B2276D6EF7FC08D561B94144C968A0682F2CAC2C775B6964AE26F11A1CA592 0F58CC076A015E2DAE560DDBC136343E05CF1F098732AFFD2F2402327D7894D0 9D69267154C79E7DFED19D0F2821F9490DAC54B3A93D8F896D7C11A74F799B57 93A20549A6BD5CA1F2DA98241F3EC3BBCD6BD3ED4DD2E2F16DF519B2AD42378A 130A1E8E9F134336B2453B8F6F81124F4082ABD7AF6B6A67D3A44F553827F1BA 9FFE657A0A28CCFCE919FA09422AD2415D7F33E86DDD2C5E4029E78E6907CC97 92398874A6DE3910A374A6D5A53585FF5BCCDBF5A6AE5CC5FCB5BDF2897B6D2B C459B7E0457A6B4C9B4CF557866176621AAB6A35230F3298517860F4AF3D4346 F79C4CC2A3C02056E11427D39743060D79DC3EE65ED6081A620A007D730A0BE1 4DADDD06A6DB7CC8BB6F6C044AAA42D37C48C6844AAA15FC796D3B50158729FF 6D6E7B19D27E71C31D7BDDB315A8331AA60707345C3E5B3D1E6CE79D367C1FA3 43B0BC63B8E85A2773E6591DF30061B10210BDA17FA74263B3EA84A5B77F741D B1B5CB1BE3E5B42292C182ED6CF27F9AA2792C08EAE963E83271E07F9EE0E728 64589BF980E1E524160E5F15B0D87A7840CA4F4326475C46461106795FCDE982 0DA22A6FA88ABD1C1DA3B1452246 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSS10 %!PS-AdobeFont-1.0: CMSS10 003.002 %%Title: CMSS10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSS10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup /UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS10 def /FontBBox {-61 -250 999 759 }readonly def /UniqueID 5000803 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSS10.) readonly def /FullName (CMSS10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48 63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3 274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F 388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4 154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B 4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200 29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5 CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5 C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16 131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682 302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575 F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378 AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49 28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18 121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D 8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7 69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7 BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960 C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92 B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8 8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01 161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565 F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14 0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674 D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169 B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434 DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5 261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2 64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038 F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29 AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3 CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF 5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091 73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5 A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F 1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6 D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C 13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7 C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8 08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220 B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3 23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA 56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788 2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE 3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D 5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D 9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5 2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7 F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB 73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5 B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007 11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7 03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7 5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1 60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7 622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5 C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16 8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474 1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647 F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE 257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA 7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315 611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4 246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97 E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698 AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1 EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68 0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A 94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120 73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680 AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443 8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070 5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE 6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28 B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378 129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB 8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6 753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4 93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE 207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433 3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26 7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80 D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825 09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C 5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105 B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29 E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26 C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90 F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9 7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989 99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A 96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982 1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B 48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F 4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A 45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3 D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81 838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794 5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200 DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240 5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5 46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D 491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318 F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B 0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287 EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298 E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0 0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D 8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C 8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741 A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447 4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1 AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C 2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780 14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A 647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E 6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6 4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36 D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD 60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627 4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289 BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0 1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194 6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE 65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7 6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9 85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC 7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853 BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4 9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440 6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3 2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A 374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336 39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6 AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F 1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8 E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6 AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684 CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF 9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3 DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441 670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD 99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B 8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900 E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1 DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2 99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF 51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A 40E84014F5BF40948F05E8562C9CA9DDD71F89021BE238E74781A92D64E5F9E5 AD6C0D954C6686C714BF189E78EE47F1530CDB8376E52631A1A26E3021FAB977 DBF01167266AD68A779C0180E034A90CB77B86747395BE885E484BE4028B4093 8BE191D58D0BF85308C72E6384292A2E1CD06130A091F8AF9DC6C3E12B1E4BA2 BB2C37AB4AAFC0CCC7964C06B9EC1C7E3BDCB6BA265288D9C8625EBA35BD2A49 BC50472D7AE262237FF1EA8D9DEA3C0DBCF7C3B2DF5AFB1F31E46B48E096517A 0CEDD60F43DDB684BC6E4C3F6F3D70BD58AAB5052936EC4ED7140EDE795223D0 4E3B95161D16B0402EB45FE97ADAFA0433FCAF55E22BD7E4AD2030D9DC86F55A 8D7EA00901EB1351EE8A0F1BFE75CE46DA4165D78043F8F0741D4D9DE0CCA00E 5F7D89A849AD0F0CEBBCB948613028CFC39617FE9184753372C375A9896F5F1C 7E24255FD49D2109CFF9ADD9A118CA47CF58975A9CD3A960A8A08A078B98A50E 4DE619C8B2D3E15938C879D785539445AC468AABD6A6576AF0E8ED368A9350EC 717B7D3BB55AF58941B47FF639CA2946028CDDFDB84FF0060D330DCDEDF13BE1 FB1F743317C15C7A9F34408F5FF7CD9745217D9B809DACDDF7DAF9D821C06B37 25738F0D20F4A86A079EDF71583A9640173B3EC529B98899601F0EBDFE45BEF0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /UniqueID 5000832 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 92 /backslash put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025 46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49 2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C C4A879C0C7596E61997B972E8A55E57B17F802C738E5C7A8FBF6424F8B131B23 CEE3EA3747DB066246C250EAD335A76FA166ABF75120CECB59076AB31A51F176 57176CBE8C802A97B0542A5CFD6D5E6D7EC848B923012E45D9F065BFFA0D03E6 788B68BA4DE51DA37994948F859D41C28BA939C3A82BFDB44DA585AE80B8CD7B A6EEA79B70BFB4864E06F06A9751BD2D2A209D150D7135E0A25D67263EDD2A7C C63B5B76ADB05D44BD5BC0BB3EBCE2E74E1AE5F7DE07A59D90C932DAA2553505 27F2AFC05F7CEB39E1C7E54F69FB0BBB069959F2FBD11709F8E81F6E7CA06DBA 1CBDD8E7A78487462596DA288B50B295E46F4C3D9BA862688C68859734B232A7 4B371D2BD786924F186524765E789EEAA30B20C069322D42C893A30BF1BD2C46 F8F3732DDFE80B8FC1789239345944D8B457824FD80D11184E73FBA30EB80A9F 2FD466826D4E666E3A835B98A1D4AE5D17053A6A648E26E77BD08F9A3E02956A AE82C4929E9666F539079846527D0E326FE7CBBF86E3722BA3E53F8A5121080B ACF8D3C67A2A1DF624B9DB92105D3C833F5A6ECEC108E026E1D3D968967A1447 15CEFDD09123D56606134BC3449404ADAB1330C9238DE48F3CDFBC91EB86D7B3 8B85B5BA97376A0673E434DBFF19798EA90BFBD94493E2D21976F8106FC0C276 C81C9B9885F7A063D99B451BFD666E82909A1D8257272FE1D422DC5B6D2629ED 8A93225B7A50361D743D9CAFC3B054F4DB65684D6CD4AEA47C3FA13A6E7805CF AA4A0794AC016409EBD90B0E23678322EBA23081CB878B4619BE05CF8B9128DD 71CD833ED502C5E084783A5B4E64B9536C3ECCADDC8A013BEBF58058F65CF340 E43A7EA1495801B2A653FF57A78F54FEB6EF07418184B93D084429BBC6703546 24C31C68A7AE969455F4F303CB1D43978B1B064CA979CD7BB29C37D0E9262BBB 55C96AC1596DFCD5940FB75B0BFB3A2D301EF97A217A1CBE5F047EE68288BFBD 0F115453084448547D85FF2FDFD5E35764D09E1995B982450EEF4D1102CA1D44 6D95674836F18A3A1CB8A85877A99E2E7B0F7E6FBCDFA20A253F0C369CAEE40E EDF6588A320C483D7F115E637AA56E4BE0FF069DD38912A98A634190E9BDF3F0 0159C0AECD0B0C93B6508CF9AFA3BC3CDCB01B1CDC99FD86A83C0FB059C1AC93 5B62E9E58477426945F4383020829462604E0C0F4AA22629FC1A003859F382E1 89BCA593C95F42C6CCAA8281D85408835CA33861E640A1BFB8817CEBB6072BA8 57413323BC8250901DE5A87CB9C42D6B6CBC2426D341BF6984D90593170598C4 E94B5A824F39C7893D07EE7D9EBB4B412140835472E69F598D00F410A7E6E2EE 83A718BFC83445EC95D6B59D20D56A1AF89782A6B454893AC1860D8C9613AFDF E10B3B1DF0DCC3424389D10F8008633BCACB1FF8C62185471D220AA648F5E0E4 31F5745C5BCFE6571958DCAABB93524A33AB072B17C975B875A2AAE505935906 A3F382ACA7B4667704107304FD0A456ABFCF03293409601BAE9048AC2E1265B5 B05C531CB96F1D8A2CEA2111F06336C394289E4763F61FD0CAE9DDB70662BB91 45402C3D4184CFE66E4C75F90B9F4A9E56F33F5224C40CD458FFCE01B00377E7 A2C132EBA267362CC9FA700CAD34E125F582D350773E040312AA0240DAE7E9DC 7566DF1E02BF6E5037F37D757AB27636723A3D319225C3C8EE4E5270E29D66E6 01908A101027FD08EC9C500F754F00ECA9A4693DF0370A9804AE51C1EB36BDB7 62C7896AC6646AD3B2930BFB1D34B257F666D26BA31AEDED9A2A1841400C3A12 E720D8078517696443853A97912E7A58D1CC858BC7B4D76940D49B2C7FD9A30D 9E8FFA6DEE15F14583074C4AD29962F8203CA2590BF80484EFBF74859197831E CF5056018D10C6698B028783A0CDD8728C0C717C1F9D25C94AAB1F71EDB16B1E C17403B22A37A1896B97443C692249430BFCBD229B02BA38D99F9A0A3B3FE662 D6408C006F302CB1578B0EDD5DEC1169F6528EE862FF17A34790A7867FC5903B C35C08E4CB031695DDDD28D8ECB34302DF9C9D4CF6632404047C91637E104E6E 8E228854A2A9530A29786616C618A04CEC0F3A909C9E8EC4F2F371E86206D78D 05B29615AA6A0FB93AA2A62E556433EA3ED527C12EBA31479C7175C0A7E0AC89 7AE05761B5334EC76474E2637C297111BAF676A32C9FEC87113CCE04F91B54A0 6D57CA54137F685ECBC86A5ECF1706A74143A283F5DE4895846D034082F1A84C CD34430F91B297578C0D126509EBA53AA70B901CD5D2C491C47500A260116A76 3E959E889718509A171F8B340312939F66900A73028F25132450F9540D78D510 FEEBA8792AD3C87BC779081577CE1ABE416B7B9BE2DAF7E2B66EE0D1D8FE5639 2710BFC35873FB0E18AFC68372B75AF9B3BCF9275F027D92A0AFDDC4852663D5 6BAE0BF64D386BBFE01AD0CA8F7C209BBB365B9C04596C8FED28F07755AFBEC9 2B04F359CB44732509954BE1911E4DE05E1E31B4B71D32404CFAF40EDA07278D A541BF3B7F6FA3E714F7C2A423A60D129B57DC384054531198CDAA0EB710EBEC CEC5B24B93A548AE056AA2B7755C4BCE15B185CBF6F362C146A2D5C6DCEBCEAE 0BC6723E560B0F26A5086577792BA250A88E770CAF5C02D3DE41ABEF822B8DBE 79801B1770AA335A906E068C3FB06031BC9B8FF39084FE1117958D8BEB74C002 F5A3F02A460E3BB0F8733801E4BBA165DB560BFA91ED654B70ACD4B999FB07D4 2C6626F4AE7F314E91CF29E496AD0D561147CF31A5BDFB4AE28B9F1A787EFD86 5C054EC02FDAFABC4FDD73F861FC84D09D35E7E88B2E3556845797BDB8C2F50C 4E8BD6037D0712BB92DE482C8FB5537B24DAEE4E7A13DCC2DED74AF56EC177FD 764B5F60E1AAC9308D1B9509AEF753D417AE044D0DD0EE884995A03226C7E81B 2503002121E71A063DEF1404AB28C4CAE164433BB3192FA0ECAD5D35300533FD A11730BD7EA27D916E0D98F44524D7CAA7F0D7939E4276B7B3E8B0182F75F913 214D0ABCF9F0FA64A3650BC1C062368E00BB0591CD56879C4BDC972E785EA579 A8D085F14DE63891723AF3778A22112B91E630F8828E4A6EFD1D15316FF759A2 69D677F5CCF1CEEE6356AFED0E49BA445FF958E4CA093789730F38786972B600 F19D452C21DCFD8B708CDADBA263D30CAFD2579E9D65EE858616902D1EECBA41 F9A09825A51AE8E9B98975BFB58DE98F22F36175328099DBF6E7057F8948001D A7BA1C1D854D497B84048CC315FD58574C984816DFF2D949AFB89B1F5DD8B21A 2598997249656618FC81B2FEAD4AC9842AAA8FEB35A4342512A5AD8D3E549604 1C220707E87C78CA60BEC4E0B3C08E327CDBAEF2EBAC073F37B49D4A482E4C0C 5B441E6D7CA7FADFEE72FB8B53A06D842F175BC45A18934FF5377710DE625BE2 34EDCF0511E54A807294833CA3F6F7DDAC38DC59551FC0B03A83DD69EC1100C6 D68BE34727132340A9D431DF875A36D6ABB48996B72500D9133AACE1F466F948 FE89F1AC768D822857B78FB8549072DB59362210962B3400AEA9AE865B64B972 FD45AE84AF73BE9DBA41DE61FAAC62898AADEAA3EDE18C7B899E56E58FADC821 EF99C749AE61C14525FB68441502E1581D32673351B7E408FAD7E158142DD70B 0E1E3257C679127E1A9679929909BD8EA8CAC83A4E615629A80900580F160337 6F3E43726A6086D2C4E95EB58859B0E41309CC59E177918249E3003B29AB718C 6E523A99B340ABC5D1348DA71AFFC583754BD934CB93B2816B70068AD8BAAA90 1752F2F5C60BFBB038274C8D02C55097BFFE7BBC274004FF9A53D0B5320944E8 FAFDFFD834D562080F9AC57F9C22099F7B2668B569007A84C14A806C8B5B8AC7 79F592F194CC43EC7AFF53EB4364B3B40A27394B7F9FCAC530023B9864583B14 B74797999086F338B2B2145A8C8DEE1937381B191F0B23A63BF46A02A202EDA3 A441DA9FE8B1C7BE8BF194448C8D29FE92835019C97653A8087F9959DBA04740 3FEFCFDEC618AFCE503AD02609CEB17A95CC167FE8798862824FE01BED7FC7D2 A78DB08183183ADC2DB4EB58F91D02ADBE6F76898C93125F1DFEFC0E6B4CAC90 D83E857514A383B35AE1FB69E4B24453C173D2890471A48AAABDBD2BF5C6D077 9226E53B46DB56C9B53AFBC2008EB74F21571A08A944039254F537F1F5E72E77 6420DCB1300EF81106AEB151D8D72A335DBDD9F6916DACD8F89FB680A29320D5 244CA1F368F1B16BCC12AA3BD3CF4FED46E88F5FDD77EA054F8E539A981D77FB 9556F731D2D0AC1912BAD4CC07364306799CAA232AE22F6E773D2D6468368696 0886CC2ED5EB7892BF067B0F20163DB8EC89A214E3A9DD746078C642BC9571D5 58544DDB94392890D2464A99D0DBDA32BA0CDCFAEB8BD0E0CBFECA5110830737 E7B850DD1DBC47C14D6D0FA6A87FA413BECF0F2423C2904D31952EC214B99970 2C6AC75D351BF7DBC78DF1DBD02FDE1CDC9E6C0840F78DA49005FC1489C9C7B6 FF082FDA07E717EFD0D6E0C775FBA3FA82D3F258938476B1FE68D059F0EF6381 C14BD17FD82384C3B8FB5115C6212C823FDF2D5E8B7D73E0AB9048D45017CAB8 09074C26AC29825B2175C8A4755CA6A03D24A40349FC7085DBFE70D3141D0EB0 78ED7DD6108081454DD4943E1709C63864051DACA00CF0F959CC853A12857EF6 A941B082878AC4BE094F7652341876C09B07F3EEC80A453097021AF62464AFD8 BA8993D128D1524829F87251223435C3763C34D715AF7AE7E0384627FEA980B0 1536348AA60EA2A2D553A9C68480A9C96CBA1E6677E6E2B35C58847F36B87BCE 4FDEDA106A8D05BD4A6743CE4FD027C864CAAE5A6406680139FA45E378E809E6 A36BDCDF9901D1917121376DAB00887464AB7C1BE1753802E3A4029CEC1B4026 8E27B78C536190052FCCF18264B008089C6AE0D2C62329A19C7078CE54DB4079 D818A8B4EA49ADC4A5DA5B841084826428969394126BADC762B3C588E18C72B2 F5C2431A555CE505023812F36973F343706E6C1A3930B5DD308C14B9731BFA84 08A74E2C40DAB0DA1697A498B899728BAB2228A2079EB49FA0706630ADE9B782 52D5C62A409AF1057E6EF2D9EF0D3E514DCCCFB8891E3F02DC6A1AA8BABB4D73 8B14ED4D4EE09CFC1ADEADC2C2200E21A13893E8B5CDC63AF1F33FBCD75A5F01 5329773BB0B431038D34852FBAA764B87141E21E409CE0EBC254D4C25F6DE6F4 8CB111399FF004ACBC181D6930A96C790C727CFB513FB161FDCEDE6E49C0BFAC AD69CD3E1648DA2D5A628958D0965FEBD6240956E7982FB45F9E73676B32F247 5D5FFDC98B309E1C1ADCC54DD5371CF8A464E911BA5CCD10FAAB4431A11ACBA9 C9A0B3B90D98A819922B294470F8663C2DF17D8AFC3006F66A44268200279614 F32CB80C7768DD389429A2C4B880B04744FC2B1410242C0415CF7816242C6FDE 13BA2AB8EE83500C2C31E57EF3BA571F7959901F6CFB631738F7E8691D5F19DE 52B338024CBC7E80075035F80945030352042C666F8878AEAED2ADF066A79B40 29DD4306A6D50BEC20C16CAA6AA175A38EE517731953C4E216EC7527AE72D26D A968952EA9CF9072FBE1F009B3BF91E9519B038C618FB4F71FD9C3A63E225526 49743D641EB98C62EAE7026F82FC07F201D0A1A86A61683E6CCC89ACF2A1DC22 23E0F3FB6D97CE9A4867AF4882C68F4DCB9000F400C0B9667A5D3C5D211BC2C2 1953E11F4998671962342A1B6A067EE8B44F031A1779DBAC2CB634CB61EABC03 19BF694DBE2F07E8F0A879549CA69DF426397F8A8DA7395DE2F6968669C162A5 F45AA0B4F633660C909C70B0970F95EE2907BF71A39EF59C9E97907C05572A8E B76C09CF5BCE9F0F486B1E5DC08ED418DE025AD19638EA7010CA5CF814DB309D DE9B173FE32FDFE0E15959A9396AFDBCE5E3FBC0719BD61D38D3D1F4E3604F8B 5899F52F6D1022018A72E4C31B6CE7CD72DD6E625BE7973782F981364A55F7F8 366123A1C24DC33591A5E1A634B5B20C8C664C6F732F6D1ED4E73ED86DD062FD 2ECDDC839CFF32F95AF612AC7BA5B485CA63D6151B9F833730E587C200F3A159 C5C00517602D98DA85987B6E839DF5C61611745A91E670282616F3D8CBE605EF FBB948A3530C0FB5699E9BB834EEE2E9F41A6641D779A7FFAA037F38A408F3A2 ABE61D11E80AAC8079572166D37423BCF950D6B6D103E4F92A4445CB2B17E2E7 0B854F4038A69E43D924B0F3FB2E03D071F45A7D8D4F480FB133F3436D3796BD 043C827CB3D96C7623B23908A97A501C9B1D76D0A6E75C5BD75553EBA4ABA41A 558801F875920B3373F620DEDC6E41E6C4AEF2CE72154D67FEFE429FBC41291A 132EAA2723A818578EB60F4F2C97E109D2AE4BD8B25652A359EA264E53269353 6CD8B94D8E57619D398D4AE5FD5EC140850282D239D31BD1BB0921C9B410E3EA 9AAC981E33BEFD029B907A6BC7D2C9DDB65DFCE9B1B826574CC22477CA196065 4A50A2D7343804309E3D96A276BC8C98484007468309CBEC7838D1F5766F4DD2 EB18FCECC24276DAB9E4294184B4598EC42776E391F0E384B8D1EAC64BBF10F5 88B1285C40E8C8AC46CA8A570921F8E3C4B268FB9865CB808D54F0A461DF3D3D 79C4F094EA84AA659B9316FDE1102A13305C2358E1D0601F1D3F50BE54537DA2 22CAC0049AAEDD12D985C9304F0735F757C6BFBFFFF1305DBCF26411C5A0BAD6 D888E50E003F653E613E4C06F53ECC2BF7DB31C56C90B3683F277FBFE9BC7B7F 14D367440896A753B513A289FBBED7FD9D4A4A4BA7FF19A2A5B11A86BA4DABEC F49169780C0FD20EBAB216B3A05B9036D745EDECFC78BB88494C9C793D8F47B3 54E82E843AB1CBAE275620F3838781975437FDA1B2169FB062429CA4F308F78E E42F1090B30124EF69FD73F2A777A1EB5BAFEC0625EED86532EA4CE4287C5E91 01596F968344A468898BCBF1D4017B958010DDCF601A3B3D100EC7F4580DEBFC D8E1CB63C256053918FAF4420E9A7C95631B3E16D49DADCDE79F67BC19321F1C FFCAA39A9C6C06B38C2258E4706D4FF1FCC545C9BB5469860246DF419A620D0D F44BBFAF494970B92B6D1A9A9EC92A40006AD1FD1A35C35217DF63D6A26B8425 AFAC1C61CC76E70F6220376A7FBAC64AF327D212FA258701F574BF575EB00BEE D0B4D5AAB7218D609614131EEA9A4B9F2BBC4BFC258139C5F0FD4A2A13ED5D48 47434DB23F89BA6667F0848D219A8C4BB5DC2DAF1FA3C7A8F6670B4FCAEF1F45 525D67ABA897A84D1349283383136E3B65EF3D10A3D4775681A80255DC91AB40 8101F60D6F56E5BB183F651E2E35FD12DE3AC2496EC9B161253BBAA98B14E5E2 F7D3B8955FAFDA7FFFBC478924B9F11EEB6C812557D48D43EBC58C2D9ACDDD10 EFDEC51CCA4735436DBBF25FF8F710898D2613AAEB1D5BC9ECC68828AB1EFAAC 21463E45CC76EA65AE89753A51CC3D676E57E765AC6CB47C270777082A133738 032D065346555606D1F0B5397EBE47B2AE68EA46274C2F98F4DC136EA18FFE77 D023F9606F97F3E77601110C4FA64E951DE5865F1F877C104A26A29C3900B60C CCD804338BC2578C8E2363B48DAEB44FBF43DA642973028EE763A570C9AEF4AF 7D8BB9A5BDED8920A21E23DBC240E6CBA5ADF51CC5B67196B10F57CD66D37E77 15504ACA17481900FF6EDD0C97AC887AD0F4ED9A606C0C5916E18F8C085D5961 E07ED1777C4F88057FF2710E286F18DE16E50BF8009B579A1D28DEF3BD1AE8F7 50B1E4B53F659ACF5D04191A42618FA7EFC0839E814869333E4F711E33DE19B1 EC5F417A54CC4BA649BB1DB6C8CB9FB7749DE522EC506E0DA50938EA9AD3007B 2430C27F2DC85049A2CF01D7C28A839309E92BFDEF4E7C7EEAA863E9CC116FBB E516F45F154EFFB79BAD807F3FD5D519E5E76E60665D8121953085496A4090B2 40B0E6AE5291274AE7E1E16F3BD61F5DF0A74A9327E7A8B27B305E343411466B 32BDEB3B0620E3C483EAAC168160C3C5642783F9DF90488A802C5635632A441E 06A487753C7404F66910CD436A2C9E34200687C99E4022E675866C34FB806406 2853443D00141179F7185B13C595422AEC1574305A639E20138FB1738A49E621 238E6B7E08D5F970BC4E62CCFB4C5CE5663CB474161F12A35C028E905D80C5E0 81E75D154A242C933B2AEB1ADC358797696E033FA1DB76D491C5519D297F8F78 884787709694B7B0160CAD730021A1857E6990D7FFE062415E97D5AD741C1FCF B897E834D81079BDEDAE74FDA37715CD354DA836DAB5C5C36ECC97FFE9DF85E3 D19F67956CF0C5955BA0B4C5C2F92E63E298102BB63BEE58EFA109BE3160F2C7 BF878E4C3B90B94D3B8B7818EC5D98A34FE8BFCB8142ACCACDD12B9B8DFE1CE7 E5BABC23CF1BB0BBFC27716419D3A8B5EA02CD10C4EA1B5F44281581BBA89929 5D425053D8843453161DC288B707B7A5D261F47C466599829F9737623D3AFE82 F0BBDC604F45954ABD2018A8D886D0FB2B5623868B499FE824C378E2C63E501E 467C31FE29A63603A87C50CF119AE32E4B3584DDBD03B38D3BBA85F48DD4DF7C FEB083CA72876B4692CBCBA915A945E130DC16C91678F4FA008FF4D44276177F E46F18FD0D192FD463E2F153BDD406467D15846D5E9C1A2B2F01053335786CC1 23E523A028C3397B93C1B87492B02FF4ECEEC1932AAE520EE2CCC5C5299769BF 8A3C4756F3C27A8FC22A87A24D0CC74E0911C96D1D20735673D0542410FAEF83 10BA7AFED2426CC39B026864B4C1DDFF1BD7866B82207A9A5F0F995A31263948 3696DBE301EF83EB63A7819CF038150DA47D107E9ECD73F3360DB1E164E18969 13C01945361C96FD633A2AC26F4CC80389E388E94BA3E3CE4126FA0DF41CA974 19C9DF917A530DC5C8EB5CEFC616CEEC7B9664ACACF32990B114A4BFAA4F9987 B7E1E14CBDD9B62474D44B5FF7010C93C652B744AEC543FA1D5F88646DEEFCF1 E7815EE58D2437E8B07D3B13EE1FC95818CF36847130CA44BC4A89BEE8B5EBD1 7BF220B302D314D659A76DB45BE6C423D4094C57AB1101D01AC2926E600A7E73 E831323939203C7BAF988AFF64079E985A377CBE3D1A66962448B48574B1820D B33CA8B93F5A4E1FABA7ED7674C5142BC1E8A5C155B23012D02A4C473800CD32 8B332F06CB1D40BD1B6D633C9E7860810F317BC193D4B7016B315FB277A29E8D F2B04B387298B06A513ADFB7704064A9ACEB876584C1C7EBF0191523EB517570 62F0C1500A51E0BB521447CA3179D827682FE77D9041677CF2444C2D036FF628 57F42CA827B5ED36C1F03789FE6C80FE9653A5AA5628636F02B39AA69BAE31AD B6D6CEA603ACBC0B9B0C777ACD0210BD1CD6A29CB469475845716CD2717AA85D 25B746555F3DF86234AD2494BCBC1FC435AA41028B0FAFA38966D18FA87F7474 ABBF123B6B4ED5A82665BDE53F4618DF0894D248C9E97A07DEF5E5799870570B D1617572C554EBC3BAA6AEADB35847742DCBDE4118FC48B5879C391040E52B89 7ABC4E60C135574259E98503DF6F11FE4F014B1C04B47ED2A30F9CDE995E063D 8BC1439EA0A721F35D940CA8C7A679F45DDA9CA108486FB8712CED4C57FA261A EE426E32F93A7BF194F413CFAF7DD523D8E7E412F2BF2CBE36751EC745289142 8226FA81B449A8004141E4728FA127E430F2AB982F9F5D9DA847304B337C1AE6 9A50C6E89AEFC884AE26ED3BE8E62A751007F4F229752479E31CDDAD069EB992 7BF70510523C04CDDA57D45F2D3E94103F4A8BF8C2B2F0572F965A405D720CF0 C1EE46911454AFA33874CF803F165D1F750BAFC7E591E0A7C2E71E89E59E198F 407BFD8583B7A5E3E934867E5AD017356F6B4D9041346DC2BE1C370FF718E4CF E1D346BB02CE8450C76F21774A3C2EECDBB81EC689E9BA23B636DEC931E87FE7 71F60C5E081D48047DED128D6CD481D3812225EA5E56A69B10E72523C3B1BD06 9FE3C2D4861E37FD3B37C591647241449FD1DCC6BA755AAFC1FEDC2FA463DC5B B8E9C991905A8A4F29BAFF75A18012BFD80376A821D815B4EBEECB8661740106 386974740E161BFAA0BA16E4079AEA640F496D83D4007283B8E89BFD728716AD 10EA2D0300D50325321CD34E86C0ACB8FBDA3FB503C2B0AB3A81403D953E89D4 647FEC38D8CF40F2485F2E5EB07A26800379E33A0FEE6B3653D271FBE16FE7BC E0C09E689F43D9AF112D05A0EBC0E8BC63DD44F9BC2B2511F941DC4197BFCDDE C378F2C30C80AFB675C0EDD917ABA5CB3DA636D9212A99228454B91F69961B67 045DE7660EB23ADC41C77F03338BC2403A6C3CC21C18A06D0EC709DDED7EF970 EE88BAC637D95B7056B4FC21262EF206EA40D64FA0E75A402A26F8F2D5E6C407 ADED717DC703D21D1230C91FB78EBAFA3A9B3BEC43AB57C2D265878A1053C506 6F82B98C696730A5DA7034E02B486D53E9013165F60C2561EA8C3543B31D0201 979FB4ABE9C9D0F7376FC6CC54423F462E421E0ECCCCB2779D86D45CB330E070 5D9F40D0732262E1070D5DFFF31EF906C23AC5D12E0B9AD833F33A0E00562944 073AEFA54C256E49AC5106A4082BE51237DB6E5AE7E301EBB3B7508A8632ED20 7639012EA2371452E230408E50C0C880DCB34AF59958F76F400DBA32A287BCA3 B2CF6807E29D7D1AA30FE99B45C45E634389214B283F6F55B10BCC9D91C96A07 9F4C2B39DFB6A570991B6756DF55033150EA4DA851E5E6288AA0692AB57C4AD0 8754F7AEA79A236F55AF6FBCD9AFD7DE10CC280BC7FD83E0947691B0B95BDF15 763B703BD5E2839E5674EAC89B9DEFC6113FBE730B3651686F703C58FC23C75A 2269F26D209DD88DC9B84371E02A3D2C02A72CC5CA6896B46641428808F40B62 CD2DB6D7C64C709C6F0D92C460EB218B32B2EA3C523C32C69E40D0F639771A01 2089F578DF8D79A806D350EB6E022072EDA5A5CA5C65611CB11A26E1F155E3BA 114EAF9065C8DA1C4FF855EA417C7B56810EA405FC09C1C810643F7953004B2E C784D63E864F926B9E59FC7249BEA1B9DE87CB0E398E5E193B86B050F28D5DB3 0596BFB5CF77052462465372239AB609D9D18D2B683E8F1F71A943C852F50779 83BB5CDDF7536E33D5CF8BC591774B6DF460B4D8BF788FD3C1E2684F64D092B0 9FEF1E8801B29B65316BF6D512997059A329855874D1C9E19DE9A881DF68A692 128785AC9F6B399F05766ACF01F744C7F27F8793A568B7F38E44FF593C530B00 78970C139C99D9E543311DBCEC902EC2C573C8210EA73F50C47193C34E96F0F4 2233865C7B77A30162F80998CFBEA90CE88E3B71CCB90BD7ABA618D9D50F6E28 430D3D37D5004436AC394C78D77D8FAA6CD3BCC8FA5E96E6CC042CA0D96A253B C505F4BC7C3D8B167F47C217471EF7ADB010458F0E40D05C9DA085BBCDD2CE34 AF35EF50BC1851FAD639FECE551A4B333111E0266ADEC30288271A2FF867EAD9 2DD48EC29C72E617FD641775AB91AFE69CFA03208E023C4F16061326D32EF7FB 2E56D34AF1269B8185B4BF8299A93ED8CACC6BF44296AB0444DF8F29A5511038 C20B6E0B093EE1E1C9AC1FB15F88C977DDCEF7FB1687A5086704356600792BCC 1241653FC72611723FECB742AF9AB4EBE2E9818C5C299DC1AAB24616EFA13B87 58151A4629A9602B4A42D23606AEEC853D2B0840E040DD490793152E7449142D E103B7D3BC1E2E2F511D78A88E248887E8EDAD3D1DC7E2CBB77CF9AE3F18E60A 1550D9FD7780EFE04FA0FAB685640F44AF281D3EEABA27CCBEAA22A48493BCF0 4B6E58EE242F5D57CEDE8D8720A80DB999D9361548B8CE62E93553959EDBA5E0 406189CA9B20C7531F1F6E397F64DEAC5CCBA9D58B4ADA6A6435ECF587C1BD47 162211D4BE49824598CB6FFFF8EB1F0E7D18F02719DFCBBBCBC4777CA4834656 C8A8B298768E113990EDA15522F2E543F2C4779DAE2CFAAF3F4CBDCC37360F48 40CF64A6FC7D65F0BF5219FF73E880D6EBB5855F7D581FFE17B4E0CAE644FFFC 8DD92A60D38ABD0ECDBDDB8583B25823CC88FBA4F83D58F26B57280A9FA07CBD 3C268FCBB35B407150A79E362938E372B98DCE9CE8922F4AF7C05A189FCE3A21 11B1C0B4FFAD057AAF2BFF3AA99E6D320B1DD7D20FF34212A692BB34C00FEDC6 06A0FED3B831C7414BED938CAC0FE4E4EA258BA1C04299FD43A40291FED4EFC1 2C110A15CBD54706ADC4B9426A010B069FBBA5A45BF4EBA6D98BD8D6E9F20712 265D5140770624FD5A078CF1E84AD37E047D9BDBF3D646A7DBC6F73B68570D07 05CD35418D243121DBC64B1651CEF73D9030A8263F2C85B1E420344624C89A1A 958AD45C76C5B3284809A199EB29EF3DA12107C0AC9FA706CB78928ABF842822 C3DDA14E2489A2553E867BFB71E0B0E0ADD2F65857AD75BD707540A049AF60C8 60AA9D2E5045FB0D212E60F25DA8C6C1381BDD208F783FEB1D21D0254EA4F405 5990D295DCE2F4D0DA09A21E60BDC7D7FEE2288C84EDC3999FA3D5BCD2317BE4 39FB11408529BD3CE89C76D653876E9949C3DD8759AEFC0B4D05C85BA52A4A1D A780D2AF6212767DB0ED1DA9E7829815CF9C7F16372EBD964A96CDE3BABB25EC CDC923F3189014956BC57A404BD95C766EC62EB1CC34FA40A21A1CBFAB5AB8F3 1B5C366BCF5C499DA3DB4E7336A389DD8C3D78D9A01C0BFF9240EBA6DB1089C3 88656D882B4A68298B04C0B5173AF9995B4B519428E769E185E68EE67BE8B7C0 511324903DDEEFABEBB5AA61997F6B223B7A5E2011E19431448A337D981CD66E 8255536CB110E4DA773FDA668A0E32093CBC52B8EDE2E10CDD330F540F54E10B 2874725B02F812A9C75F3E4104EE3EA40371045E9F500DA26A73E01BDA076587 60C071C489EA98676E6FE8ABBE0809F8E80067E2B930B2D8F7FB878E02431A4D F2754712F89640577BF8B62C49D896D9A973BD9ACF49288A7304AFDDF88F35E1 5AE435F0A7F76EEC2A9257211E876A2CE411462A802B4635136B3E1C451F8938 9593E415E4E6243A6596DD597E1F7C696E10ACA0E4562EB29AC33990B410A47A 7525F73C7F85AAD33E1AA0278DC2B1E6D60F4DA58ECCADD0FFDEFE37030A60D9 28E22A0F552016E478F440DFB117B08AB8B7F9B1CB9CF8D24671475FD4ADD5C5 D2766DCF52FF25EADD3FB72CFBFE9EE71EB2462068D3D2A90E1BDD747D8C9F2D BDC299EA45BBAE2F2A4DCC629C545DC3B58125DF69276526D1C207B78874F722 EE3E76BDB1CC0265E54A27D880410D8143E8D9E3A17BBC7E72AFFDD4EC7EF555 CC7B3AD73703FD5B48F9912EDDCC658CE720800B567466240E3A5918DF8F8CD3 CAC80FD7583C437FFB7E1F1910A8313A4001089B62E11D2767C1DF94F04C2ECD 6BC2FF3A5DAA9F45BAAD25A34DE2CAD65712832FFDD5A4418AC80338F46204CE EE86754F00928C3DA4B0FD45BDD15D4830488A0C040E4A4A7C6ECF8BB49F0633 B9FF3CCA815E70EA14FC066429BB0F4FFD50989EB7CE1FEC9D317BBDD6D9FD95 6308547EB06A34D2F66DAD4FF2B789D0F2BC18C76D5A00B587C0EB9B3027B566 8D8094FFB19A22B107F9DF55FEA6D86A1ABFE4BACF8DEEF7A2458B7E07B80DEA AE82BADFB0F703FB6AD5E008D67520FA21ABA0821FE0325528D191A869E89A23 58439E9F3B910350A2AB64A95F4F8AD42704B4192803426A532287218A09E82E EB995B835D28A8F347AB957D502DAE5522FF7A32F1FCD6C3A401277D841266BD 6D9E13D2F41180B17163B58C9931C0BB70E4AE5399FBFDE96D60C2AD2AF67E91 EC2BE69597558B0011A0F749F36863736552681C1E1ED0C7153E2DAB45E6916F E896E64F8CB9725CE4C9894339DA750419F2115F47683C6A784D4C6EE8114349 2E42C144A2EB69AF312A159EABB3C63F36BB69642C91413603401FE72AD5A62B D2AFE4D7ABF1034A39B5BF9E075BA06AA02DD00BFC25F205158ACE306CDD0BC2 D1C526E898D4A438A5F6A25F583791B37B647CF4848AAAF7EC6A21C3511D930E 5EDE79C61F414C4C20A906BECBC51F4C771BE8FBAFF924872EB0A77EEDAFDD0C 1E74C5133116C2D1B9BAC642350B4B46D2E3F47AF418F453C0ADBDB07227D8A8 27F53D29014005AEF6C0822AFEC0AF3E8EC780D7C27E3FC4BAF4575B2B0DFB06 6B2E55B305DCD4798F05F574CA925543D2E4A0638068EB734B5B41B098CD7A54 17BA65CAF4B368428B0B56E1FACEFEFBA6FEC38F45DFE473B9BE82B788A2ED0A 75CE310577613C26348AAB7C54CE560C3DEBCB0C0DBE2A5AEF882BA322FC0255 1993FB7AD4EE93E9A9C28445D96BC800A9CBE2CDB323F5D9B6157FD04A54E43F 93610D187857E3F43FF46F345CBC03281BAF2013D49B3C813A1771019578A804 6752A18115E78B1AA066558A47EAAE222B1D5502DD80F51D782A2F3497DC09E9 A9C54A425A8A2672907451E01D6D49ADC42C68CA7563D0BC25300FC8AE02B6A5 736FFF9A95C6518179B53CA1D5951D2B9DEF7BBDC80C17A4AD9B4B97F374B98B 535B174855A9D3764694E07F4B4D107FAB5A0BB4655C28FBDFF054BB993F92BD E7746C85844DE26A187FBD813EBF3F4261A2CF7CBEA7E98294F7A930B264E944 778A95D5680B4486CD5551926E9F5AA6AAEFA9D33D9468D22AFAE3F1CA5CAE65 B70AA8096DD593A3B8A49F5382BC9BD00FD6CD2CEE0538F231237E4BF46C17F2 F648922CB5A480463BCC001CB369E07BD9501DF0C01789758FA449C146B135E4 7487EDD11AE52F288DCB8ADA075D62CF95521E037009E4C5C3187F3A1EF6D136 ECCED3F0B80550CFEAD28DF961E9F2438C8062872739A170C4C9ED8B82075269 21F65362384F5CCAA6DD5513E9A5301856F2F568747BA81E706038786214F92C 51B971F6FA30294E628CF258B4BB1FDDBA95441F73AF53425007BD4610C92BB8 FAFD0B87F1313B05DA8960309A86FFE8422CB053E286534C7C685ADEDA70DBC1 BA67A3E05C8EAAB25A062B8193E94757566AD280F8A90F5B0523C045999B2551 C6F01AB561FCB0654FBFDC37C68578E8A57117EA62CCF65744B7FFEA11FCED5D FE2C23A3B5122EC4CD3F965C5B4E345A088FF9A302B88F8096379A4E715307ED AEF30E5328DDA928828944EA65AFA894439D1ED8E4497FF5E20B9BF284D53F43 2106F75A3DFE1C0C71972A7186BAC36ED094BC150F4BF1526F99D8901D4D67D3 27B18BB06D57B6EB9381DEC0F5E93E851B4A67D0623C3D6E7765552BC6C41809 38B9F9140883608625AFBFA7A21C36184700FCDCBDA3BD6CB9AA81ACA57D41A1 065B5C6EA99457BC9A864941DAF60E380859791C87A619A254483164B7643C3B 9237BA720D7565C397C8D28530D5BE827A64B0D847A909F513FBF445165B5E1B BC1D7263DFC33B99CE64342DB37A33606C4FA27CD2CA0E822F7E1ECB92531DAC C05614A0B0E5C47C47F3F8BE3D6F8AEB8BB08C3E286B78477C865372556CB519 EFEB0B16C2B242863479401C4489B2ADA7F2DBC757E5DA38D4B75139E123449B B91DE657AFD7E411A2B6AE1448D27A0AE8AD37367D886857E1EC9F598A94BB18 390697003E71CD6C018C77931904DAA4980DAEA6679608E61EFD89A99F75AF40 E946B1BFF8EAF8360F28BF9F7436398CD64E686C440F30B19DB9BE2F6D421DF4 2C12EA689AEB1DB706B35F6B1365C4715FD45794FB2C5043FC34D52F18B02CBB 3BBD424D6A45E2BCADA20387F59CB7C5CAB59F679DE8EA825E023738F9E88427 A5109F8F08B036DE4601BB4301572D7B73CF6BF2162291B309E09B80EC7AC31C 7B223BC494D03CB1F9EDE68353CD93FF57671B95FF013071106BDB90F335CF73 CE6109C79F65939B07A261E94012FD99344E78F477BBC69FDA6F3EE49AFA4CA7 04BDA1FE40FABCBEDD5869964F01A3A4A5197E977AFEE7EE29DD14892ABA4109 665C5C7396A8EEFFA28FD7B1C1242A21D6AC99592797BF8C687D14AC4D56DE3B 2F2762FF2BA7C0E59BE9AF36F375F33A19F932D2BF7E77340E8324F309F4230A 4D05D3614EB57D8E1478EFF4D8F1E63D0087CABAEBF521F056F61E156550B0FF EFF462F4B8AAB14B6D21E6C61EAAD452DEE958EA44E0962471D073E0A150563F 9458FFED0E20BAD1AA46CBE13E518E5DF56D4A2F0096AB79707835A2B137CCDF 5B28A2FA630480DDFA68FFCCB91B3F4B2ED120A5A9318C09C86A3CB693E8C10D 2A5A941AA8C0C5AA4744AF051DC991C127E0146E1FCB9BA620AD5E87FA125C12 9AC9EAB74C15328CD1DE134163E19472D6A4D5B3213CAD65E6FDDBD5CDDB8458 C60D9E2AD50B20DF08DF39089AD3487FAA1C8887C68E55535BDE3AA8114828D9 44151F31FA69AF5E70667D80C76FFCB90BD6087BB40436204615539325209DE4 DABBD8767E5883690B4C486CDB7DC9B374770B0DB4EE6495BB127EC633063921 A25436B439CD1EE442FB4A43088157234FC4431BED22A9E83B7C851A1C861FAD 5A7ED39FA13442CE9F0A18F5EE7692EBA5817ED0E5A62409A920628919408707 1ED8B4A37A2187BEB90BC0709A49A7EF3CD2AFA06BFD0F9D27F7C8F54CFF9680 29EA5BD6CC3DE6461C461ED60908DDABE570C7226296911030E99AD80E099B44 2E82C0E8F4638533A7DE97DA71D6AA7BF8B3A09038C0EC7A15CDD1263DC983D9 7D79CEA541A76FED8B072FE4BE607942C7276D3D0760802EC74B7A8652BB7618 A78E4CEAE76A3CF2A1D8ABF1243C528A23B37EB7B48578D3BA37FEA818AD299B BAB87E6DC814F0D43DC49B8E2CAEA8C69A9994BBE9A2F2569F58703095C74B2E 9866E0CE2C1778D9840209DC7BA6DB3D71F6CC5C9DDDE54EF055927DD7856693 6C16F6C827DAB77196FA5CFB27024F3257AB2833B1D73229EE0ED4797FCC9918 F0426619FE5F40B4E7CAE74AFEF8399D567FEA8C50CBD0A43DE087B52835612E DF32DF0A4BBD389F0D55AADE0643EE494C1ED2A5A36CA52CFA4F3309C477EADA 6736F6FD653BA24011236DADD168B7F55E54009FDC286657D7D51308433848C4 C0715C4AE2481C31ED38DA1822BC59392738B3AF5D5CA89FCD2691199ABFB6E1 54534D471A9EA3099422358AEFB2D0A56668F09655132C073B9F1BDCE9644AA5 664834A2CFA318D2324BFE4E0FDF96B0D5EABA0BE7F9597B54EB3DEF8A88BE79 13502E5618854F2352F3194680E11CB9E771B7F10C5E3BEC177955C861FDE844 6098B0B7858AE707F1199ACCA98EA6F2A993CDC15A479945E55CC26410F1CB60 E301B438F3682C8BC04B377F921E4303626F73B3F1976F4D3E04A67D7A135A99 7FFF7BD3888B1A4E61F58A6166EF432CC22177A41D7B6173514F72429868E497 9996448BC08C81E359FD33A4D5AAE1CCD2BBE062BF98F15F72523DFE444B73E0 D8741900E195342B9BBE061C3BF82B0AB180BBBD088F1B826CCAF3E8EF861293 9B6F1EF443B09A972731D700CE0538FF89C5963AFD66C6AD3B3C4D659673CEC5 F6E991341A10BA09EA76C3E6F243040264442F31888237AE25871D54BD3432DA 84223EEA53C18C581CB796A8ABCD50382CCA0C7287928F3D897470561DA3EE37 83AA35B9475E586CB2ABC92CF1D1BD2FB2AA4B093BF424794698EB1529630ADE F535522848371B11AED41A055B93CECBB10E21F73DE796760D4AC349E08202FA 61C800C5C0A8FAC2B0FB8F61A5E3FAF5684FB27CA87D87B0C1280BC9C9B999FD D69FE1AB03670F230D9C91CA81351B2D9E3B8779EE9104DDADAD43DA5967FD02 71D279F15CB0211552C375C2FE1369A9682F553D40D1A6E683CBE18AC873C980 D536D1760FC4A2401E784B333C25493BE406562F5E9F4A9D0444E8932179AB27 4C1B5BC5DF7B02D60D89D0680AA1DAE18764C1D985E610FDE94DE164D766FB00 A032465003A5310EA4BF3BA536402A0AD4C89EECF95F5C5987450B4B5EC1ABC4 BED71105C9CC07FE24DE82403A0ACC95A9970E0DE76384C8F2F305D04000431B 55F33705B6A4C94ABCABB3DF371B370994FB5C585FF557EB03795C1FA3AD842D 23968980ABD677F267C047EA6D14E10408F992BD46BA38FC43CA4F59B3F3B81F A58248E447DEBFE32B0462BF6B5DA1F204251A99B1D3D574C9B869B42C50A0EA A22342D61F68A0B0DD7128C1A604664F4F2D17F61ABCB6CB2412B6A44540E6ED 8194F078ABA7C611ADD6452C29B46E0522F087CE48FE0FE3640D95621E6A0D2C 7BE557C81AB7C74797BE370E7ED1B7CC40B7B9D951C601223C6DEDE80C8BC124 F41B4CA6EFD94B6F75D4563FF9A5669DF46FC4A4BDBAB46789ABD4F9274B7CB6 43D8FE6265BBC0DB880385A86AFA145BE23C31C4F43913FA113054DD93440ACA E2BB1CED4F2BC0A75FEFBC42947CF7A39629B19FFBF480EBAE0F31F690D6D43B 21C691D8F070FF6C41CCF6B0EFAC13CF0F3CC209458AD58005BF032A8995838E DF51834809FCC4A6F2520BF5BDB7778EF177E8182C9B4C0226E6A32E82673D75 F04486CC122BDFD986A3F7EE97C30B009A438252FEF10B3BBCF55854E307E6E5 53F6E0D5CE67F91A4B779B84CE5DFE4EB24C2B94F8E26AB295F10E3F6B4770CE 76295F3DF4DDFD27C4B8D5EC7529AF03CEF4B19C04DC872A80667A5879820274 1A1DF891DAF78F775A8601F26A018948310787A32679BF1FC1654075C4B28352 2D2114CF9BDA187327DD8305DE0344773367505BCC67C352A6E88F01BF75AEFD 65E2FA4CD0E313107502D3B4DB50CFD0FABAAA64CCF4BD8EAAE25EF810CA5D97 B3811FF41867539BBE607E81F153830EE243A482B0C80345B0A5069835EE9884 BCE96EE24CB5CFB6C58C11AE2A88A4FC5DD831164EBB6DDD53FD8F9BF2D726A0 942D86DEEBED572A5B78E3407238FF5863DC29AD6A7592AE6D951B598BC65BB0 FB79F3EB81A2FABFC44AF393737A5338AB3C7B24ACC8F3B2EC74F2BE1B92D3D7 87C4FA2AEDC2CFB14DCEEFE4A7070D753F9E5B19CF88BAB17E5552EBBEC6E342 AFA0DFF259E0622F8B840F2B26D6B9FC8A172172EDA17317AFA79B012441D472 5D6E0C8D3011EE1DEA9E61F775053AC456BB438B1622A0CB7876F27693C4D75D 47F1B231754BD9A7FD6505D8CC068BC5E67AA7DA16C3BAE3CE18149070025A12 FCDEE9F1B3B2E7166217C133315C98284DDA4030FA0CB1DB8A3CF970D8FF53FA 9795C4FB304E1146C8CE9BCF6391138908145B523E4B0D95D6B383283AB8E7CE 43FAAEDB6E372CF93FFA8911C16035D464A8660D87B6335304853772AA22F042 2064558703EFB0788FB4D8CFA2A65AC73977911117EA070AD522E7C6F870A089 78624804F4B38AB3CEC430A1DFB965D804DA6E56C3F93D04361560DFB589FFC1 C2E1C07905F16D765BD449646AA5D4BAA08C7E0ACE006E1CDE80081195BC3F46 AD851B9735585A6B33149DC42F0346008131C9B6CE5AEEC7808B40E067412198 C4A0C686FE0FAC2DE9B4D6851CDA5597D09B0DD94F9105F80371FD5B77AE99DC C2084E251536916B9F601DF14A813BED07470239BD770B790ED88EB9CC37C57C 4779C293F54883F68165A4A1CED8B289E80A41FBF97309A0EA2EB660BD5C4315 24289576869D12D9CE4C1362D2EE852743F8F023272CD1DF9F244F5584F1C69C D29225E6A6355771ED4E5181C1525C84A931FFE9B1875D28FDECB1D6C3AA0215 3274C43A0B8013844F45D070304211102BEA68029F4C49F7E71D65B9F6FF5ED6 9267BDA6A47DAE49D28521BA40DA3BB0BF13EE6F47A3C4B0D30D4D96E56858D6 50F3C1646D7EA1087EF2A27F4B3B49BB5386083A06F90041D351B84494B368B7 EF45648763BA34DE37D96318DFCDCBE46B7FD18F22EBCAB2D3D2B037F8D281DF 03B6C8E04645D8ECB7C195833A8B9DEC916A53BD6A2DC941CF36371A520E6C92 400F44316F412558ECC6CB529F3ACF9A35B64D89381227E827358CE4EA713DBC F067B4A17E0115DFD398C98024A1084A3C65DBF278BF69B3DB9A4162464C4FCB 94AA6B9A58A92574D406611C6EA6B95D1F460A9A36FCC3BB8330681E2CD1328C C3AC493DE8C20CF87529175F566EE761F0E0280982C42624A0A7A74CC6497663 C32FAD1753B362DED89E9A7FB79CEFECF10AF74765654406C37132ADCAE507DB 21032D06B424069C9C4288D7C7BD03DE5C86EB921759B043C2B3095E22DACD46 D25F1E9E9CCD3A10BC68057CEED9C02D02A7B264FA895F8C1EC8F14A6A047306 9BDCEC0BC4C15E472E7BE9D980C4E1688314FB963B15BA868379C274A39BBEF9 FE58B4A64216197F9CEFD0A1B6AAC42CF5CAB2861967FFA959106E3747EB14AD 8AF450A38C5ECBF31D04C7620FCF668260AA959CE699A6D2B8E91DA258BEDDC6 18DEF5487B752017B7E02AD77F227F1A2FC6F3FB48826733FD68DD302A1C91D7 61A9591374DA9DA4888E2BB59E0BCC3254ED9671ED164C9132A24E863A2A96AF 89E748422F7B471ED3F3EC337E9416E9B63430416BABF91BA3 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /UniqueID 5000769 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 89 /Y put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD262BE3D172E2F03F564F1325C9F1E050C83C12E0CE3 C7F58270B5C40B46B3F592FB41FFB7F59EBD69B2F489441E398FEF7F84C85055 531D95FD21629B0E509C2FCEE995D025BAD5D3F28CDBA5CD414405ACBD936C3F AA4CB2620D7426002161F983AE95E542EB8553AFF7E57B82E05FDD5FC433E1DB BBCFFB1ED92299DB0291CAB10A84529B7FE279C62628A24A2FC36B01976E13A9 C528A198B8EC8654AD69CCB5C209964A2B25D6DA9BA0FFB366D19D8C69701D7E 8ECBEA88569601C80ACCC2D5487DDBDC27DC463A53A8E59F9EC17D0ECB7D2188 B6CEC6BBCEE631DBB9959A9855B997481B5D88B8BA29995053CF42C5518A3E8C AD21553A0F6BC3483624B013D3537F7C85D7C558A9C772554CFC1C3FE7A70633 318A98AC64AAD6FCA3FE67F556BF1A0E5EC2AD57228AED180E9066DBA176A1D0 570FF3D683019C80D437363E4C9F9CF95BBBA13774D1FA07D508BF3F63141BAB 8477EC3435DCEF398AFE4BD77BEA28E5BF7F598D78B49F7C6DB3DF5EB901726B 2209AF76AF0CFE1D49B5E41B47F4F4C30584FEA44916C770FE8BB731E39CA3E4 A7BBD703B6488F409606DBC3B8696EBF1E8E2EC33AB82122CB2A3BA05AD087D2 85DF7D8A413E56EC2716DA378F9E40BC0F602A10D84C9558E2D9BA1B2E92F34B 4C0474CF3CA51DC95E4FADFAB5557D154CDF925E89DFFBB7551E266B223DCC87 670FF1671A9606C30F0B69C7D2F7AF141E3737B476EB88881C7623D24D18FDDB DEFA9901432DF3D103F049B6FD24730EA7F102E091C9EC6732B385423169BA8A A80782033434A1228ED1F6E2AE750742CE74364B44B7BBCAA7A99BE5D71C8580 1FA1FEAE60E3B1F1E2E669E4FA79B50856C476FBFA10D1BC08E9E663770A4CC1 D46275D7B59AEEC28DFD2B4F67E6AC262529AB43E98A5793A624947A4DBE6577 EEB6AA36C365765EC5D1F83122470C85FD69CFB43AABA031BB854CB2E537E361 EC96097541E5D154AD08786E82A09EBBB131451A7646125FCA044865D0F5380B C547B6E58878509434578A8D3F99D6B92CECD0F0FBC969A4D6577D25A92098FE 23F9A0842B68442904D3F1AAA5A75E89C3044724D1A176275D21FFC43986FA83 BF73775165491117FB6B73BA56CA2D9DFFEEE1522418EF9B795B8F4E1EE369C4 8AA43864CD6652D8455D63A4D3D4F09462132409F4BA217FE430B9A3E92D10FF 6AF70D58A4D7C68F0511D394E16F8CBC1CF3E9F9B403B37150011731D465C505 3A0EBAEED92B5CB6D8A303AD186A5DDBD12CF82006F911C3A6B8BD18D4CDB209 C58F9E722205E0072F8DD9E8BFAB33BD00D53F3FBD24FEFCB0CD2CC99BDB4D1A 45D91D348C89D10544FA5C9645D0D9FDB1B7C9BE0B657B0B9AA6D60E7B912841 0512D60A23AA16313A773A7DA8CD6D2670C62A7645E573C59424FD776ACBF10F A48FD7898828D98D0AFE3D4F16B170EDF91F87D6950D3C99427C6366562C2D63 33B923B14F3A32E7C40FF7FFB573572F47A53DC19184E856BB4C06D306390158 C918596FF4705315B985B64778BEE844EF925B4F3C3FFE543626E8FA9E0906B6 42B05B59E9B86A4AAADF26D4919A70E7FCD7D14695FF294CEA60B53E7A37F7B0 B8413E5736E6ED997007548010B7F2A4AC8F8E1A222881D7BD5D0C7C798F9D15 A00F722D16559124DC606D338763A6222D11273F1E635E0F1663508E2C4F2104 61A17DF138F311491F32FB70103EA3E39B9EB560603683EAF63DD8A4ED549862 621D3DC4DBAC78C5E1ADF9FAA890F3E99243EEA742DE297C830B891978AA9CDF 90561533B856F594ABA7251FC5BC385214897A429969D18D30C1ECC567B23A14 EDED0DCD97D062BF1B8B7BB527CFBE7E0172F0122AE5892D473B15086007C00D 8D8FB1175C9A39942A067C497DCBC23AA4D671BE2215D4385086A45A6FAA9196 6BF27B71B70084D88984E62500940CD2688FFC13169D9EBF94133E4FF7F7B3D6 BFAFB376C0589B07EE1E0DBF25F8DF17D5C7980C554F5F77254D9EC8447B3FA6 B1ACCA5FE52803FF026B69F2F1F9B8786AF83FE4328E0DB1936C76DD20513610 D09DACA7941318E684C3886E85EE846DA24DF473DC78ADAF2CEE720382DAEBF2 C3DBDF0FAF71B6334CA952FFF07EF74A6600AF023116CEAB3BB525DF54004F36 B4BF68910536344960C39BFD1D06AFDD8B9D117752FCBC135CEB7105BDDEBA07 B7B0BF78906E3F2A4C9F8BCC324D64ECC8FDAE217638759265A1443B3A4EA491 0E709AE857BC3F77146F91BDF82CFC991F8A55D813BB01A3E1C7C11E7EC7AE6A A93D8F84933C2FF7FD1BBD75E745A5B54F8D81FD6ABCF6EB85C1BCDD501F6099 2DC95073B1872F5BC01CFD8F6B7C8AE7A1FF834E16412D0A52107CF9A2E0DAD9 9F10C426BA5BE330BCA5584FEAE25DD2D9BDF44DE7029566695B042C1F68EE87 A3A937B3D30DF7350405B394A5B38BA529FBE37CC8E180366C5ED67896AB0BA9 A719F895F4FC20124429B8F1C0DFB4F7F7D6DD85668320C396FA4EEA19FA6028 33BFC697B77049698E341A1E506A0648F4227B9C20DB97C3F012FCE4435AA21A 4C2841DC638816679D3E0D5FF2017CE40194536ADC7F135A7976876882E23D70 AE929E40A847B4ABD1BAC80E882A94F05C16DDB57C4561769ECAFD2A1B880108 1184B2C740890DBC6FBF8E5AE54AAE2A2987386231C91BC4B6D0AF39AA1445BC B4FC94DFCE3AD3E2CE7C1D3F54E2F2DBE166261160953847AE8698E3013B8C0F F33F2A31435063B57DBB8F58BA0C1F05CAC2DFEB42C7E5CC00C151FE6F4C2E0E 94EB3099A89928E64D126E09ED987028608704828497C042F0DB42A309DA59D3 2EC6DBB499D2A2F7B00B009B900DAC71CFD7C21C28B9F07AFF93F6ECD43712AC 7E5E96271BD6D078C80301CE0C0B69F5B695EA7B06C14E3FA35ED0E7BE8682F0 EADEEE395814270128312EE44F70797927F937878DDEA8B62D40D115FC7AE3A4 48835BEB4EEB817C0CD3BF92111BD4FFFFFE6EC3963AA384CDD3001618543877 CF54206FD8DB20BB1D44BA3B3516CBD60E81D9317986B76D180D4CBB2FA6369E 5A1F57642B9588F1E35CFF0BCBE8A629A1D9154D9D5CB431D0EF8C1634D27014 9E908586CDDCE3F0CE95EE43F9546FDF285EFD450D520A6928F8B4B968EBCABB 3B1E35B2A883C8CEA421B23B2F8203C19E5E2F1B7E35ABD9637DCE511A02E69C 582991FD51B016458553475A79B3780592205A3E756CDFF3E1793EED03BBB977 23857C861BD3B5ED4234C25630E1A40C6E386B9C8A078D9CCD6C885347262937 A8FE259319359915C08DCFA882928B909EDDC38C8E5A3173088329C2F45FD9B0 ED1DBD58E3DAA7856315160A5FD8EC61F676B841253C768E85518077D12B7741 4032B639AB375DEB6C14AA40CAFFFA328F271DB4DE450201C19E6CEAB9BFCC56 B595AFAE704B7217B83AFC3642C60DF6EA18AA3BA0A167846DE6C8C05FB40F0F 865337577B92D42FBF60A185BE4D6E2D315CF11970DA0F9C3E5C2078687B04D4 3DB22848D7C00B0C1980DDCCFF6268739D47526B75295659442A0367924BC9C5 A6BE0FA473BD4721DDBF014BC16A45DCD8D42325D3F4663BEFAB8FAE2518736D B5E056F1F3B6AC191D0AF37DFC4F3A414676E768E0E70860080AD9C5614012A4 900DE7A5A3B20690251CD80F8AF22109A07F9623ACC0C09B8BF677453BEC63BA DD50E5C14B3877C8AE52F05E6B1D761A8A22A9F7B249BF88CA4105B5398B1635 B49BCF72E719076CACAF6D511F7AB63BE022A9C5425C119FD268A7EF16EFC165 23C122BE1213C825AB7D8EB2CE4E967721503F4D4321E642B092B71ED459B4E5 65D19CB73E1B1DCA185FDF65B150D4C1E0B036665488195CD610CB71875FCD2D 0474266BA577F3673B9C59CA941D64AB7EEB524C26762D94D4E9B0C0CDC4C479 CE551775E3B0DE2C27C047A4BA09C0B50F484663EB4A4856911C11C66FF7EEC0 36556521333A29536DCB6D816B530D09E8E934C37DC361B5174C1F0C366CF7B5 B2DC2296FB71931801F2BC377B89CBA8FEDC0199BFF640116969D5300B229B79 70DE1F8A10B35EAD5542DD344BCF13AE0D4736E3AE5EC14B1DA3B144A18CA1EA 0CAE2DA612C11B90573956300C35513BBE694A44EF7A20F49959272C840EE8CE 36D8927F0C60CA2F755C5E37F5B22D720E21956A2E033644F5F8F1CEF63669FE 42044EA80D86A42180D8873F9197F059AF9E40F325549EA23061B6AEF06FB0F6 EEC79CF66497C04A9887FD6849E8D4B5A076548812CD452B3F948B637F773C1F C18B8592E69355DB24A45BFC976251534CE58D12E8EB026B00AA960C362EB467 9EB18C311FCE91442083871A75DEEF41316DC356E414022BD461D6FECED62AD5 21BA7FA9E8E2CA7D3B5BDAAFAF8BDDA4E5D0493AA2D05633BAEFF230FC9D97EA 195B2354195E23C3B1F22B5306BBC90903A12ABBE751648A6511436B48793CCA CDABA285EA6A9E080DE86AA929CC18E90F5E588D258891428C2E8056BDA49873 FCE4608158D98D78D0D9F69F9E00A4468AC0101626DCFFF685CC064163196543 D32993D381D7720A424F27E4916B43DE805715E9233FA80F53232CAC531E5F5A 62A8C9D34EF59A8C90E0B348649E99461FBD5997DDC3354233944F5AC096B94C 3698A9E748C1E392448437C1B46CB5DFF9772A8105A6B9A74A3E9DB9C99B6B20 6B9D7167BDE984738D2B3F5EE8EE15F4F57775CB836158FE3D958E7B6247C0A1 8BAB973A54523EC8C785172FFD64CF8E7435F2E0BC6E97B953A88D92D67127BA DD8A78ECB57CF12CEB366C55063A71788957A204746D8E14E405CF6B368A4617 A9FF22D430CB0ED2922074EF28FCFF6867DD8F0FDBA162C45BE670554335E7EA 2FE81825A35C3C282E5131A2BF0B2FD7EA413E48A1195213DFDFA35DAED79EFC 6E24589F0D3D53E1D41A90CBEA83D75604093B9690EBE56BFEB21517FAF91C7E B8DB70BF5CFC1E23CD2C0D34890D02708F01597191AC8849D342F99E9264F40D 2C0222872DA3BF2E51F49CB2B2AFF3CDC4F9D1C25D6D41EBF19A723DB1D1FE03 027ADCA98E295B6A68DB5AFCFD11270396F7C7B40AA5C5DBA1EBE3D043830475 17A32422E670A0EC8D973D542FF7420D3609328491AFE7B6114F7DAE688CD2FE 3ECC6D6B2FAEA74B322262CA0BE3875EFA0C267D0D6554C8490264974C5ACE5F 2CAAEEA678F6D23651420577211D5DEFDEB0DC49969C03D9B4CB827417134E4E 3C3FF01E9AE3EE2278F8DE119A8C5752180E9B726E8309BC8A725DEBAD49E8EA 774BCE7CC77605F9804EA961B7AF1D6AD52C7011DF665E1A403F7EEBAD1AED83 FF9AE3FF25476BE8D754B90B1D922317354D5B57E84D0940AD7653E868C3D913 067E46D91F5F7EF7E2A7D09FEE4490407770C293CB9173C1EBE0C9BB5C835D71 4519EE902C2CFE7B9D1DD9E78238A8784B2B065A085E6D6D27663312EFD8E977 EEB14A3CD18AE3CE78ECC5F2D01D56A5F272F79EC5FC423EE7B06AF0BD78AD93 491E6D2417D73771A834961AF38D4F2E6BD3CAB62B1B3A44C347D81296BAF4D2 54251D414E688DE1A6F3FA148C6A42035A44E02F641BC144DA6774BFD033A0A2 5188898476304AF02FB35F9651FDD862ED5D092F6B38280F8AE4B4741911A22A 7C3DD3A11DBD1468F1F60D2A80AA6C29D33EE6CB49215290B8B64C1930A1D4B6 62BC2164C3635EA8C2F6D766883291536ED6CA30E81F6552184FE70D034DAB24 603EE83D037F1498EFD9AF874AD157B1BD8BC8EEBF65BBB9F438EF99A3D147E9 A9C6CFD6F2ABD5221837638D5F3A4CA11A13E90E6036C19A3931DF7404A0515B 3601E8B7EF608C804545316C4BF213A738023E988B560C153FBA836B1C784FEB 58C2C55AB7D116025F75E87128B8E5BA589C211E5766C30C8CF2967574313778 2C53380D09440532D891F37964DCBE02A409FF712E6E81706073CAA19708346C FE6B7BFBAE96832FFB406E6D31816403869D4FECFAB6CD1998DDA55F9D659816 5F28DA9E8B7AD22D7BCA45DF63B8251EB3FD0CCE314CD9702BEC1AA1846B8822 F7200032304B3C40AB5D805D92AC5A1F211FE49E619736995BDF4C34985A5B33 58238E4174393333705EB5F1A1B135B5E5B32EFE000BDC1E5AB1967ED67581BF D89021605C41CDD206BD47EAEB48ACCF7524CFD29EC196C06F3A2F70C4790806 DD62B8A935046CCDC91B690D64E378A71FA2C06B0FDF4C9914443F859AFC0EBF 11286C5396EDCF43158AE5A8A041E79D30E992DA489E00867381E2AFFA578CFC CF7DED26EC0AFF52F658B790028208E6B7CE312A5563B3036EC0C9A299802569 BC4D1C4D5BB09DF53675E1A038B4F433E13127B5693344A29618707E6B26325C EE88148683505204E328D2BBACF4DA1769BE6B7BC756075F5C12AAD669CAAD5B D73CB7BE7F37AE90537A06F2AA2503ECC8DE1FE8A8E699DEC69001E5C183EE74 E4206D4404AF09D7A39C456C28C437256F05C4016FC974C0F579E06424C0DB48 9F287C7C89BFD3ECE53F08C270F8300AB17FDB40D17240B598A5DD3663B42DCD 16F48740489E3767DF0006FA9B7BD35D7EB5189AE59F67461E39D3AC2A9F1937 16A7703B81D14132DB5D9B99E68F1C20E07F2605F3D3AB03FCCBB5C81F2ED9B9 EF8080268454403C2F6A770DDC26DFDB6E3B1ABD405D47A2813F24C33F6EF67F 4DF83E52B27B4172EB71846A5CCC61BE0861D7BDD24122D37245F3C1A475E2FE 92D5D9D8EF3084E134ADD1B88A34B9BDAE46EE3A24AE60B4C10255B2F09EBDAC 4F2A988E6631026DE33021DA2E635FC08BB95A5E3043CA0860294484EACDD362 A911FA91A590ACAE43CE417EE3C392583DF1837F13A4C18750D62D03F53E5584 E6A7925483BE0861FDB0928F2725F4E853CF88A89A6F1FEF85E5876952B18423 DF0DD00F0E179FF975E60698B36167DCF712E816E9075A5FFA004DF83CD65004 193409873569208485A489626DF766C337833A05DECD9D47E4669BE75011B165 F63D6F450D99AC1CC67C9DE112A02F07638C939E6618F4D22F5E584988E8B18A 899A055A13003A9B5149A1D3E0B04ED0A81C7D62F68497A91ABE04437C63E9F9 BB06480C9126CCC18D6D3800C4CF911F71185942F9B115CF59F5E57EC95C0263 E0E3EE7A557BBBDF5DE7A62BD5A2B4FEADDABCA35B844C74CB3CC7C96FDCD3F9 BCD8FF2C33B1C5EC90FE59BD87F9D2261347F047EBF6E38A86B2AED438C1C8DC D70809DA07EE2CA3C4CDDF0BCD6C9A2D0050ECE9D51F206028B337C3C3DB0DED A1E1D8D30D056EE4560A89D781B5090B473BDF461ECC362A64820AA510D5E423 571B8A234F31146A1AAC1F8870928AB52868BCB8FDA69AB4A1E4FB9B1F83C369 5B67E4C3CCB3CFD2EBAD05EAF9B2D6E54243AB26A90C528F3524A27CBD23A305 737189D81E856B3CBD16436643C2A8324858AFEE5DFE092E0EE11DE6FABCCA0F 214591A23E9873B48461A50D4B251E03458542FE6B789B6F1D0B0E6803234ACF 876ACBE86FC01F25B646C7F4FFA7E1B4134AA22AE1B8044C73E55FB4F6E19FF8 A1293515394D39B8D9B4691940F497E5DE67514D69FE590CFC15BC76655023CF 48C8FB7998B347C3699B8EA37FB311FD3726D1ECD0AA46DB366DC7C76D8F3AA7 9011FF934FCAF85E4C55063698435C25A54BB783C76295980D7AF9D67961BF81 23BC5502C25C921480908E0A9FFABA8A9C1E574F41ED7A56AAA255D3F0C1C34C C1048A79F5B2383CCFA12BA4DCB6A745A3BC52B8D94D8EB2D539A49C8632BA29 AEEF22D76705DDCA3FEAD3EA3B7958418A651C5ABD9C49630045B30CB1F65CFA 13972F57102AE7CDD54F6D8E250E5EF1CD1560C58635DFCD4E4A9E5C82861F86 F2C896CCF46F659DC230EA6079F06F17A678B5D1AB7CE795306CFD94634913B7 4EC6AEC5B504388A42C2C8A9D9BB9215E02656DB621E2F8585F9A497F56A7D16 8942624E6343F8DB10A0C09AA1D24F96D2FCCC51C7A4FEFBE5D8623CB8860829 C1FC5AB7FDB136E34270DF15B7AA4894FE1E2E8B10C63E2CE42BA2BB34DEE9B9 054D6974F79E1DC7F0B18FA071F53D0CB502CCF0A8CE90DB8DFCFE3213B28C7E 8E49B23F7197A98B2B9DC063DAC1E870A203D59A401E5CB08938EB3DDA9A7C69 42D17B15BC47D6994F93A4B767404C9F17511AE672AE6D94261E7C5F12C07AA4 1B53FFAFC670A2833CC6DCE4E709667DE98CE11AC3B34B4F92A7D9D414A0D096 DCC8A8F43FA5DB1E46C036D0EA9D3D024B9E63AA913F5B37F3169A785A7E8A66 C813B001428E02B01BDA1B490F7D3E757FE104153B4F090377427E09F6D4F433 E505EE649D64C5867CCF1E61777999A62BAAF8EBA678F32091055BCD7A61DDA7 9B9D3797C79C34DD2B97CF3FCE1387EF9103EA0429CB0467A0C1C77FCCA8F4C5 0875F800D4B71ED2FE9C8A079C610D4D0C574C9C24A7691DF9DD9A3E8E63AF6F 6E9441BDEEC9E9D871A0271008EA6921697C45B28BC146BA61FE17C19AC2969A 27784051AB36700EA959F38F844F763F694BE80CEFCAE5A7EA685241591EB860 EF9163BB497764E4465FB25DB000125919B17A1ABE58A35C7E4C1ABE07C02754 5D0A940FC82F1043676625F88031056E0FBB2A5D47002ABFE900BEAD842381B1 0093662B80EF18493A41754909C073FDD5A3FA6B8CC906B7AD2836415EAF3CFF 4E317D1B33012E9BEA1B958A5F0F79D2E70E882905F1DF554B1A95248FF67114 2AD7FFDEA1A2C547563FA1A91360C353297E3D4D71D1EE7A3BA6E3B8BC7A602E AB09C06EC44CD6FD31D20C8B8CE006C9CBE1A5E44ACCCFF04DA8A26C667C9360 32F69284DB14115A198B1E29E736AB3BE0891E0F983D42C41B2799B76D94252C D1DDD3A24EE72A0378B8DBE3054A49F9D762EF0CB759F17710E605129960BD32 5ED59F4FC3AD414292D34A8D4BDE7E1249997B6017C36DF6098E04CDA5418119 39654757472D6F528FCA57950C596C1957F8703FFB802456C8063396ABB0B205 E152320DE9A657D673273FF2FF46089B68924B8F607677A27F057CE097DAD1ED 770CD9939EC4D123AEB613C375C22EA3489D0E14C036CEC512C3538C33B01228 140307170529B4DF7110AB49A3EFBFFB0425282EC7478E36958261567C3C5609 5229353C1A021BB9C8B25A800B58B2C05E7052CC504F68D19A9A669F14BFBA5A A0F77F2177F3ACA4FB629E12EAE03715FE64C8A83116E0C28A94F6A02938FC94 362F6EA49C80AA5824BEB57DB01E4332437C9C9D17EC78A7C8D1F8C2F7ADF2E5 6398CE280DFAC2223214325288B6BFD09FD52002D66F532A952CE242B5FE1AD8 FC3A7F52E89542670E877C101BBF2E9558E1B6A29FA18D9B2DAF43EE23D091B4 8276D44A3264B381912437760A564AED364CF7BB94A851555FC880ADBA333711 563ECF45057073BBCB426393F8ACA88D4C17F356B7A5286DA32A1BBF8E245F34 60F0841A7A648FB8F7803212247C14173BC4230C491A7FF2552F4971E4B12630 C265143115CFF2554076E070CB31C07B515A692EE14C64099B4A96C524CCC9B5 4AC010A70EF33ECC77CEF3C604B130C38717335122200B458B3AB267E597916F BAE89343E917851D2E7089CF7699262DC4B5362CDFC50D55BF56ED718250753D FB910195CAA8B1DAA95643C6076340FB0BE89FE1F4BE7C838E32C0CEB72E9145 D49C446EDB3BCF2314F6EA549C92E64E1A446CA69E2F7B8780EB130A857516AB 6D71E4B0AACBFA14C7183D0735BECBC0754015DBD99372FDC7095F132AD91130 C752277E1ED9127658BD864C925010732F9F03DB357DF7B2DA9B61BAD1F5F21A D7C7E07DD203633F264C5A19F9CDA022A2177DACF88B35CA2AF0F9A0C3E2E76C DA9A60986EC837301F6A50A238417A8E17D0263C706839918220804C0E055F90 4A5137FE87CE8A11A99510B0A8B70BB600F753B814E9C39916BEF5BDB653F417 4DD85E234784F8A9D9154ADBBF3C05E6AD3EED8E3873D65C508AE9BA4584423D 56481E7B94E28065BAC59B416AC9D7609ED9F3994E96C82D3236DE2FA2349FCE DC146530C223D1976B5EA89D5C81A5560707BBE1A80872ED6B721AD80D96F4ED 9A6A71DDB55D91ADF0A312745FDA3E1BF030E67C7B3107272647D3B95D62FEF3 909060C0EDB8DE7C7133C378FAD355DBC6181991AB9AB5C5891FA8E51C0A9631 B81E6558EAC952DBDC82CF761656CA0B81C0B1F96EC9A91CFACF45836407DF05 5915EAD2EA07A9153AEDF8A383D4A040718E402991FD2D4808239BDF31D148C7 3761217F97331F2B25874144BA752978A726B503D0742C835DDB4A485D7158D8 9312F8472652193312D4C7BFE0EA7306A6311855DD374DC5899857C31B66FEA4 9AFA7226B1B14563C11321583A59684396E98F374A599E24FA6BE1F69C46A074 8DAD801E08CE5E854FD2EBB7CCBB3DC115D1BE48EAE90711BF19DEE37C5E24B3 BD5D5AB2E0F99681FC68B0AC483F4EE69299796ED4737FD325A4A541C3E7DEDD 56A0198BB7B6F41E1C73DA70945B9B7516459DDEF1BA932E726F0FC89E56EEC2 D6F826E58490BA4B562A2124A4E44EEC42E89650CB1D3C8F29655A5A112D4771 13138785947CE4C3E975137EC6BF9A9C203B8B522046E7452045BCC6B92A58DC 412C5B87367802A87488AEDC4A9D38A4DB7326859A105035552C14425864B0D5 CC98071872D8378CAAAB4FD3C9BF3EBD88218CD49E3F75CB337891631C8A7036 9398802609C7ECBEDB3E5C0CF4C2A22120A0655E51FF7D9A9703C38906993182 4250679A1C970A2FF5BCFFB034AFB45E1EF5255DC20027A69F46A6791D9C466C A550A2A563DCB1EFDC8B6C577F5C3DEBE0F400D0968F05E9F681D46A59BEAF86 73075323AFE2564E1F96817BB7CF3A6959A6384F08AB37CADA77063734411855 E1CC6C92BB9ED7214DA913AB898BA5CC4576271C1036308ACBD869349A2F2203 9BA0C8FC2B8E4154B22E40A4A36EC4AEB7C544BCF21DDA9AEE42A899A7155912 6AD9860B34DB6F477B0BD274FF5971341DC5E3C7827A13353CA7C2911C728380 C040CA5DF4A5B52691CD30F1325F1126120273D70A4FCD3C723FF48CE60FAB1C 2DB07AB5826903A8F7ED937D5673CED95D70DE516FA544CD5547C703377746F1 8CBB009660D8550683CEF5E75F4779E39CAF4B8FDA03DCBFD0AC5987EA6408B4 314FDD037A9C7FA23EB1924F4A4D0BA00B3286417A4797C448AF1572575286D0 33F4FCF8FC77A706BD8D128FEF8D63E6F7E449B5585DFBE51C65D47FB50A8FB9 50920973D1C6E62AB429CC4B5EF9524C5CCAD5C73FB952D688EBE4348757986F FC19ACAABC7ED96D73DCB5AC2B657748DEA31806331C0BF0915ACADFC5A940CF 8C28073AADDBE50C579B39E34A364844F0BF03BE50FE6D937DAD15A944DEBE28 72EC8E0C2D9EACC5B383D55FFE36008C6AE9C672CFFA2DECE241F4146F76992B BD011522C7B47980B7781C5BAC3133DF8ABDE6732BC865D72897A3B066C52720 2BB428081CE7BA185A68C8FE68EADDB86358802045CF74FAB27B674783FBB16B 9211F2E3BF84499CBC0BF2EE77CFC607D931A358E9EFC4E9DA426FC31EC8D622 E191C76EE02B2AF8303EBFFD2A4EB4632223575E6B6A528885ECF3FCB8C9AC95 8D436AD369FE8C1E79A6D9DA14A2D5ADF6881FBD667581BDB2A2E4215087A89D FB3F99E34E71B4E017137B9CBC6D77A359C552342798A523B16857A38184A0F3 E1552FDD92AE15355182B3E146CDF3FECFB41C6CC015A1C59E358E208D27136C 80C2C09C2F2BFFA39CBD050F778461995F311C088E55C7CA272FCB9787CC2B9B 30057C045D80E6F91352EA45970DCF9C6C82D942B698BFAE34AF2B675A1E4FE0 13A929C5C52412A331CC60407DBB6402E680786FB0B9BF4AD16305F86D213365 BA9DF5E1F6820583D60A23CB47F3D29BDECDF94B60DD8E32699211FD9831854C 448C66F221581CA265C124C5A0FCC45CD1883EAAD8559ECD4E5BAFE25FFC0704 C477F55DEECEE3F8ED666AD5B8948696B94B5E3C955EFDD4794CDCB7D78EBECA D17A44EAA483BD45C6E3DE651F052E5715D73F6F993830077A426BA691DA8A8F E9DBDB1EF8EB4413E83CB958811951A7AD72FCDF9991E2276FAD4C8F050AFC49 553BAE19EB8252582250C79D1375AD8D82D70E1E1F1D6AA02EF2CECC49D11423 79C6FFC96308C4ECEB4627182ACF455865CAEC5CA9B821737D7DB43FE29A22B2 B49EF8E69B7E07BBB2E42481FBEAD25B677ADBE0CEFDC51FAD6957EB6A04CA96 38F832837CB82A95A599B1584B4E7E1AAC762D7BA56330F7ABC07F80BFDE4AFB 9EABBEED5F475D575D0475CA88A2603586B293D3C5D7B1C4D2865445F3A29AE2 58FC11FCFFBC722B2A22B6606613F43B1B4B6DAB54B7AD3EA30CEBECBE8F41F8 A083E5FF1D38D445C280E081E1A620BD148BFEE8992D34369083A7BF3B3A001E B2498945DC052445840CDB44B35578843BCA2F465FBF67D1D50DF47C9E214EB1 F7D1883EB78FA4D76D6E83A8C29B448A76DECFD6AAB0DFED21ED4B10593E4E8D 0C3BE31D56C6EDFCDCA1543627253E1C6CBEFEB89E238B781EEE6BA88C8A8247 532349D6781723DE3745246C93DFF3214075D21D1E026E79A1E38A8A60CF3F92 38199D0B8F3F001E8CDC13B884A5B395FFD2979F17B965842EC83EA673C00C0E 4E0DE64B2E09EF6FC7FBE29B00973038315DF9E05DA76942FBE7F6E3BCC45607 C7846EAC67C4DEF98C38F60098487D936135CA47160742D81C1AB99F28184219 4F3F0776F933B25BACCC75FA85077EDD3D11A6988262FE430FB08AAC9A356E33 3B3FE16FD369272B93E56DFA37DA05398E2B0EC2AD5494F1DC66CDD77A2A6DB9 C02EEE5D70E033269B43568A5EABD469779E277E8EFAB115160DFDA72327EC97 3C4458E8285837351D948466E4907B5FA88520CA5A314040CA9E2261A46EB1D2 5AA5FBB75D43F44AA98799503CF5843CDDE01BF960BEF479CDC6523F6D19A110 4F46AD9A477843015B90C59843715A32E25E40B379DB8476ED59A77AEAAAFDB8 6C8B8491E0F5C6D54E6BE4E1CE43A6F650580485D6016C37D1C3AA0E7BDE5594 5D00B0DB77889D8788E2233D1BE7F8D9D873E51BC3848B21FD75525961EEED21 294C2DBCA10F759BFDEBDA2417FCBC7C621C16A4C1EE44468E500400C982BB66 F04EB9F228027C5A08F828A1D1E572EDAB8AFE88D50C124A9AF24F8CC21457BE 728661514FF0AE862148C0D3AF1735DE36AAD72037B4B48E8ABAF4789C66F277 038F564415AAD2583381A8DDC0FD375E954EE1174FFB0877D9BC7ECA7FEA2B7A 044BD3514CBF267F9790C9D2C96356048EEC066862EEEB72325C45BA37A313C2 CFD4CAE15E5242AD3FB3E0F61AB2969862CE4BA35AE8EF75C00389149161E940 97D6F99B784E2FD44C942DDCD51056C2FF72F17B33EE609D3F256561C7654FD7 34F9EEF53D2893E52E65C9950331C85595063E6AD06F19FB0ED10420292E584B 5E4EE3D27434A91774D7649AB8F28409948D52ADAEEB6EEC6E660AE00825CD0E ED0AAB6FEC1B5D6B282D34B0F8240496AF430B115AB351521609937B9B2472A5 E6DEEAFCD729669A7F0D01485DCD0F12CC6704AD58FDABCD1AE72EE390B9994A 54AE85AAB3C0C9D4A72BBD12A5EB23AF23061AF9B528C49098FE889227C421C1 1CB4F92A69042B1C6EC97588436175F265996483BBC16D2B589C0018932A0E8A 048C9EFDB45C71235C7E85C3085DD62FC3290405C59EEA14079C31D65CD935A8 2FC7BD15B1C6793FC324420E1F1EB5F8973B2F15FCC086079ABDEFD523BC43F3 8BDA4786B9111BCF7F8F36BA2C65B0EA0B1E4ECF83CBB3E192B864A22715ECE4 1FB5F376245C8C89F6FA9E904ACCA365C53F80A5C7031F46D8F979321CBD36A1 5F2286E2C8ED32C3610637BF3C3AA0A813ECEBD85073CE134AB7ED01D46E85B5 B5DF8C12B505037EB56403137863B5C7F29599CADCACB576C75FECC66A2119C2 A896D71F15F3B07F8F2984248AE939D7796C0CAC690834E37704AEEC4E943BE0 6E64726A026E87A98806C74046DF56ED9BC9C181D7CEDE793D57BA568EA7B625 4F6CB69216ABE0F83C8D388C73EFF64487309F06F1238D6D68424CF87D5BE08B 3CD5412A1001A1A670A9C51B1291C1567441EECCFD2FA947062E1051FECC0302 71D3F9F720E758D3441A8E8FFB7C4FB60C34BD09C1CE85EAB3977DED4CFD73C4 E3F8AD12770372E7C86C61CC141D402CD63DF1B535604EF19F81E71FF8D0D1D6 E3A78B76B41C83525E9F80665070DA2D8AE824686076232AE30B2688988FD24E 9BC84D2BD531EEEB79BC9F83C0FB9C70381A1DE6A3DC8F7A0197DDAAA2185BE7 9F75A2CB3D1475BF37CEF3AF7A97841FBD266907493A41B8916E718F06DBE39B AE5841AA1EFC700ECC8AD0807A7EE5170DD77271C1CF9D5616B855D4A340289D 0E8D207FF4AAF0F92B1772C5D22B2E4FEE787D6C4627637EA1B9947135B3FE50 11515281DDA340923AF8155029BE70370A860E49784621C3DFF4E431035747C0 75BF6F972948138BB021E53D469E2A6F44E0686B49B1C1E42C709F55D12DFF25 250C4D801DE34F6BF124EDA854D4E210DA2A400C2E5B2C5904355CEB33EB34D7 0E59844F88E19BE0854F9BC842AB5C15C2B699248445E3C3FBB43B59EE9DCFCE 3E7422F54C29EE5379C0638ECAF5D9B00429B59997BD2D369CE6013E143AE808 8A006A4A9FA9FC838ABADC73E233917C74A7278D98A4DAAA4B32062C5DD5DC5E BD620A44DA085CD5BED74774C6F01D8D79EC1A6231951C21F24704AB0C83E809 7DD914499EE3C9BFB8669C054BBEEE8FEBC14EA9CDB0AF3CEDE04C38BD226C00 30929DBD8C0367CB6554666D63406FA1B3406CA73EC011C460380BA7539B6E48 A2039BB164A2801327D0A9D59B1A706C5EC8D984DB84F87BD09541B7439185A6 10FCB5DD4A9323D88A898708ED47B877A768E3A10A0775FA21198727CF87FA1D 6A2A36B2150BAEB20A1F6510D8F19ACD027628E10B8DD21C3C3C159F00E44B23 499DA1F90AA0AE96781CA0B434A59CB5B9D8C5ECDC74907211392C99B486EB9C 491F63B13583CF0FEA748B3CD3115B148CD42900D2B33DBBF45EFC05511D03C5 7823FCC3AD90083E170939E6065F491FEE67D062BFB2FBC44550A6A036A13506 F65CB9073D8DE906CB22E2986BCC5A6741E9A3DE56C04DED255E397CDDB604C7 9DDB0CD92DEDE6C506729FD1642754AF88BD8B66E077128C5198D17C057DA3C2 F4284AFC506AD7652DD81EC719365CB3B7383EBCB18D13F374C576EFE12F31BA 7F26319B91C02753322F36271E29DE02A855447B84184150FDB1F1A33677A11F 265C5D007D0FD962D018071B51FC1DD6403DCFE35C576157C9CF49BB7D57BBAB 42756AF32C584A432AED4667B36E2608433B373C787D5F5B66684C3BB8CF1078 64691453809A46FF815F44A803480E37AFD1BC2B9D4072ED63D279F354E7156A 91B547FA7092AEA2E0DB806E20DA4DD4AECBE808F4312CFE4B3D036969CBE4D4 28AFF1A2079EB283CCB6774BBBE2B54FBE865F252947AF599D7D8667DFF6E7D3 FE119C52812C2BEBAE22F4B1399136F8B087B24EBA651544FC29AE9724EC8DCF 2DE790F79699F99CAD5D308BD66B72DACC6718BAFEDBA6D562822A4118D1E892 CDFB04A455D05455F6F4DA7CDF3BC37621AA7414746281197ECA47906E04C9C7 A824C89284ED5D44F59DE179D1C9633356FF8FD5BACD6D5CACC1A9F7E87DD609 A4AD4A38B27AA524E99518379309E394EED829C4346C01B65BC537FD76B84651 F20759E759A46433BDFDFE7CB7AD259F490CFADDADE122A7970E0B7DF6A3D10C ECB4979977C4205544A04F8406BF72A5910EE934BB897EF74F50D143354C9328 A10B745B2D7A7EF7A702BCA9666A29DE5872570809F2095BAD166306DA04E3A8 95B5A4B4E9ABD22CE5E718DDB3AC6D7BC2D3FD9661535DE1FCF6F7545FD2C063 956B52486C9578F402A6BA19FE21F9CA4C2B2856F711A3 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /UniqueID 5087385 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D 2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D916672480464F7E22 CA6E431FE38D3FC019BDD229E064B72C545C61C6EA55984565CCA88ACB01F744 3B4593CC8944C70F30925FB48A16342CC26D444F54CA15E5A624C4A2DAA2AEF8 404145BBA339F2A2D6FC2F3ECE54387761CA1213C8D56FF96E37C6147CA44B84 262EA87E7CC10D931E6B5B80D7F09813498497AA84ACB4AC69BC6C8481ED2953 084F560D7B1CF90555E69BD2AF7C5D944E8E3506165014652462BE1BC81CA341 E1B0725159D36DA0FFF3577D1DEBC5D91AE683FB0384 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI12 %!PS-AdobeFont-1.0: CMMI12 003.002 %%Title: CMMI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /UniqueID 5087386 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE 882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A 7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC 182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A 1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D 3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F 68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D 10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA 7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A 46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD 754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF 88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A 7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D 7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D 2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D 639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F 90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E 1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E 8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D 203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F 2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D 244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B 724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF 01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA 287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C 192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE 084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF 92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A 9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E 38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F 3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D 806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C 172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A 31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A 2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD 207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A 1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B 97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF 94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED 66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C 224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 1F6CF8470DCC892AD0CFE11578718948BABF9C1427084643B66BB9181094E29D 5FBE37708E1D8A6B7518A96876844CB66954227A7A6AF28DD075A462526DD5D6 40EECC56FA366106E55C7068997B54B7F0D03AC1AD45D28C67C7ECA99DBEDB1C E18A79C353113E2E05B837E703278B202112B1C69E42A69D64B62F0E7D8F7E5B C1F93F0F99EC20EF312046F4B0CD7DAB31E422070B629A7FA96583CF3F1519CD CF08806F40ACD7BB5C960F21E9DA7FB3C72CBA0801ADE83DF738A4EC94F2977D 2B95A166BA4AE28CAD1E37FBBF49D342CDB4DF615E2C5F3076313AC517C350DE 710F5D52DE31DF69864D29DABF14234DF13904BA4333B0D714EEA55CDD79DE45 FF5D64259C877191547076B1C7684CD252C0337BD9DF66CDC5DBAA4F3102F2E8 FE48385C55727B80D11F3BE0B7568AA9356FB2B180A6B1392D620DED02F0B736 5F4399FB9D32DFBC8ED942AD311C82250DA8BFE98D65 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /UniqueID 5096651 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 13 /circlecopyrt put dup 15 /bullet put dup 104 /angbracketleft put dup 105 /angbracketright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B15A0 657F5ED27D204449A841ED19E01432CFFE928E921321113780D036D34F2797DE D4459CFD15BB117B5C9745EF3CD2B296D91FAD48C80B136D94476967E255F808 AD2B5D522ADEC64176833756510391815A1D4A8DA1D0AEE7CAD36A1D161889F2 3347D5B6BC503300FDDD48F594F391D5FB42C42113C538E707C16EE24A3F375E 7C506E8F49CE50FF9DEF3B4A4C1BEB3848EAA3477349833BA22D2A9012287D8B A8C4CB4307A1188ACC0E6E9338E1559BE5FAFF381BD82A6C71C267409468B3C0 2C1A29F4281D565836EAE57F680490FEA4A952FF64C8CD11C377C294DCD1EC25 CEFB2B6DCE959D0208F85B6E32E9B44FD455F9B134A5306D95EA29F37BB8B86D 9E592159338E1293F449380E13C21AE42E6E371B75D78AA87381B96012E722B1 3E1628DC89D9009FB38D9984AECC3367A8436F03DD58F85DD4971868D7949048 7083BD403FE778F660F5F0B684E730A8EE16315D4FDFF432FE18FAFEBE527D3E 788FDBCAD3405F21EF422913918EAB15AAF24E95243B4458145F7CD3CA6447B2 7E9D369CBB62B6CAE7E7E0BEDACAAD8BE313CDBF24ADF41D458F28F971B7C0F2 0283DC3C6CB1F02450A27EA834138F4EC0A4026219FEAA9B7B9C4E61E86F114F 174819DFBFC8086931E4D79746A7C7BA03C39E2B9045644D1219D9848C36A653 E1F4A2FA71CB6B12A24509AD5304B355C1466ECB7E31D33A7C65AED48F7CCB4B 927713E3898334BD99CF42EC428B4B4B186E88DA52D6B9ACD74663CCC9CE05FF B2407222F227F49DE7552F45C60A120FC1471D4136A98FC7B0CCF102D16BBA0A 620F109E65AED0BA6172A4520F2A773A99C009BFBAF175684CD71CE172F148E8 7C5A80D66FAC0598AF22323087B9D3AB25CAE4FE9670F51C61CFFDD351FAB682 04E232331D36C159D08B2B907A9A9CAAAAF6F2FC1964308844F23FAC620D85C2 B4C0C6FEEE4A2F1B438A80701698D94EBFD4A7A99C7A16AAEBD3A7030078E95D 58C4B914C06438C86E4832DFFA884C3574FBE830351463C4DA0610C0B01DBEBA 1FA2244B128D81C1256D84C4CD7E2E64D524BE14CF7B2AD3924D23380D0C1227 8E7628B9601B01D2C715F74585F639E7B059612214E8E60A6F521CC6E7AFC827 0B948F6E76E0CE904E7C4AE79800C8E69A4ABAFDE476F452AF9EB2AA84217B64 E72F3A713227F6D5BD0E93A26B2376DECBADC70DF559700D434E8A72CB7152B9 FD92890BF5C878187A88CC3DBCF9BEA099D639B162A2BF0D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /UniqueID 5000793 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 14 /ffi put dup 34 /quotedblright put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6 652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA 07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11 6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2 BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77 2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDB693AFE84 246AB18279A2B24E5B50A2FF6337B7B1039FFDD4B00ED3667B5F2F7BC2786D2F 525A0E82234B30711AA835EAEAC2E404915FC7EC0081B194765032708B5E11CE EF6868298CD26E5B9EF345BFA3EC2911E2B96A0B40AEAB95BDCCEE38F5EC170D 3BFB792D2DDA7E57BD2FB7669484EF9322A1BEE009594901095DE2BA9A15A0EE 4DD77404CEF16EA6C31FC04A8FBDEF27B9FC1AD3264388B650C641D6051E47EB E7EE41B946B5A54D2990748AAA64237BD4ADA31C10843E1C235AFB36BF1DBB47 A3FC8AC6F98C72AB9F84F3C354A44EE0530145D80BA7810314D977917A4DC4BA 2CC4AB63CD3E87DD7D040E8FBE63D94C9BCB476AD94BA7E4C0AF953BF4821182 D723D9BCC92F2B14A8769B9EFCA8FED9DBF2A836BDC23E27AE1BC097FB3D2297 DD32DFDD7E7BA91C05B33583D92EF193248C70B9B0A260A7959045DE6AB129F9 05F7F25D087EA8024C9F63852A12B46114C581719B4723810DCCC8183D7E6F10 450511BFDF8CD29A57EE9653F2651D54A62141A8142C8B857B0D3E2B9FC5DA3C 38D79A7AFE0B565A57A7C4F52DE6933437EE03D0DC1D286880896392B5C513BD D76497FD980320FB10E6CE08C3953F99A3618675B04C8EFA2E2DEF4511B4300F 2E5C733D69737C7428840FEA2A1D89133341DE4BD065034F7316B5922CDA4D83 D8804D8DED8CD4409859CB18F45C838D6F18CE8DF82B78C79AD664A57F705D8D 9CF82E48176AB5869BC634B2BC053A299600E1F9CBC66EE5715E9C70D86E6909 ACC25A0858B10DC043CE7A5AEFE9E3F8C28EC36BA0E34F850CAF6C0AF664A142 AC30D3EF7D61C7E85AF9963BC58143F92B5D64DA3F8C8F131B190E8333769BF9 0186F3840565E7C3CDF85409DF3E0134C97837AC17E7F988B62D82E068EFB478 5D8BDEA6D3A49A83886DCCEA341E9B4012EEA7944F69564B5F0EBB5360C067FC 70DE0B05B117732530099ABEC6F1FF955C9F269CB29422AD7A3F2BADFD97CCD6 3624B8E757ABCCEBE5B1F2620B814FA2A3DE2698BF0B06CE3AF4C560DF372AB1 A79B06195FEC5EC862560D6767FD20EC17481FF64AEE679B05EBAB7AC520F240 E2EF71614A3A93D4697747A6BAC42DF8DD4F2AE3CF46F1DA8F0A1A0372C6F83E 5857A31F725B28DE3AD77F1DDF563C4B3E8AA4CF5A1BE4B4D0C672D68ADA4FAB 5DD7F618B1222BE7727547825EFBCA21408C5F84E3E7781B5ECEB19CDA8EC4D2 120A75F8FBE6B0D64D79096233696BFA2AC17072EA6C9F52E42816C85AF34C21 215E72CB2995A8D7B363AAEF5CA4DA8F2567B40B01049191626A4D1CF8BF36EC BB17A076F501F8A81C0AB9C03E26CAB4684ED1672AB0284500CDDF5BACCB90E7 95EFFE1B505F201112DBFB902B72F566E0C6E1CDB8CA34EED9D5F6A831AAF04F E092089757CC61819159F7D3AA4123C21C6FC5F56A0D634D0DF2390D6F0CB442 D649D3F76762C4F3F49140D1BDB5E5E19462485F52DAA9CD4A32CEA7C6281EB6 979310262C103A833CF1B393E69BE17EECF31A8D36B6247E10FE60D71DAA0EAE 1B0CD177142080FA5687D01B87AA24ABC3CAE648B69A407E66BAD35866BEEE6B BD5A238C064A25664DA6A6F7407D0F5BCCF856D1419AB9DF15F1DE86F6072ED5 D31B088F7C1E4451B54041BEA187D705B3D99CFC9E2707D02F4C721B7ACDE325 5CA12E155C9C41F07E81764507E20F83EF6C45771D7EE187BAB92F32E1542F26 F0AE670C260111B76369299A5DAD5E4D11753CE4F2239692F7782E865F4D3739 E02E669AD27633AD9936DCD84192F14287790E822515A98E24A5373C30B5E4FF 5FE4EA0F868E0B1E18FA0B92C402082E216E49D3F598517B197D0D05C9974D86 B435DCE5A4276EDD80BC7EAABB279579DF6742AF516EB3125267D929CE8BE76F 42BCE1F2E4CDD1813257163C88B15E33C3B671A422A78C234FA2E075B9FA9483 F087CE013C9E099C3AD51EB826FF3B34D01186D4CE3B82A57A69AD94FC46B31D 347252804F6C4F5CA2C9BBE16D87C7A070B3DB13F27E7FA18B6D1028ED40265A 2AEC1181DE27937481B72C4CE6818C162250EC13D1FED060F7F5ABA1E3A2D69B 4E5750AFA81AB32C3C1C49BCDF2B2AC566E43458495C1051D2AAF24378427684 B6F226B7DC848F97A1B88EB2BEE17A3E9E9CC51D9A05435B93CA1752F2D5CF25 6101EC0A83496AF0832A7B71B8163B3830C989DF400AA71F370E61D7CAF9E20C 3B21A3A0775EAC753D0CD656FC15842D694DFC860079CA3FD4E9C75A824F5292 56B491252AB21099CA16D5DF449AA1DD44FD202924A95B2634B6AC0CC3397820 5427B54100B1947CC3E44AA1EA09B9D9A9560E5C645215C9CBEC05302F40168E CAD68257D5C5EDAE4FC01305470160FFA5A9F9467C4DBA2EADC60BB6225D9C36 24C9186EF3B136FB7CABF98AD55FA42B8976AAA5ABF67ABEE3A6F2A937DEF0A2 359122F3E9F7091571FECD771920510053E90470459DDD0C4B5855FD47D19666 640C755B7AACDB8A6BA568E04DBF112EA07129A941D4A6C2BFADF84428FB4DD0 FD0EB7D0FBD3BC15657FCBD4043BBFA3915C53AD8A5BE8492BD192D14C78E242 636CAD3C760D9FCBAFD2157E37A6EB7BB45145DDC5E298E7F639C8B27C1CDF8F 78D035F6DEF33A7556D14D1F75E4410501D370DAE50451FC90F4826FAAF02715 84805688C232D239AE85696AF3B644459B4BD94410871AA666042C11CDEDF020 EE0466F4FD735B7AB94E4C153F2640C32E9E3521D146CE29080AEF3B2BFDCB16 885FC7DDE62033CE401D65DBE2B977E2FC07AC2DE0A96034552D25912EEB6009 6A5436E1E520370A0CC54047A5CBDB888C84A9DA9E06C8B1FF14094FEBC224A7 6EA6736BF65F0922EF282F3745B43982FDB35604BC4363215E5D5B3F737BA615 7B5E1D1D6F256645432B6CF2B9B44D76605EA86B1C5D94372F215649F002A544 FFA277AAC8A5F25413026431BC892F125871674A177BE426AFE8986A3B18EAD7 AA800D5D7CB6532230CFFF984F022FE12D3D466479199C88C53490119121DA14 9C7BFAD59AB019CEBD7F77FD7703ECDBA90B15BBA561DEC2BE7DE6F582A3D803 51CADC90CABBB072DE17C117EBBEF90E592BA739808B2CD705C9E66894D5CFCB 7E8EA54059BB170AD00D19CFEBF7C8993BB1F0B1BED7BD4BEB79C4DBB0E4B6A6 E516FC92D57CD7942D236E72EE413256303898F57EEF40E66F95EE7484EA4767 A901CE079AC1D433741AF24487FB74FC58F8545713325BEEF0FABDDB6C50DF24 852BF04D247CFA5BE75EE797BFBF2BC48075CBF7CC00AD38CE90C43F898C6A85 70E70524F9F7AE089EE09BEE595F4E201DE81CE3FB54CFCBDF383D124AD0A3F9 15958A46754F038108BD7A61E03ADF620D07B0BC2049B3CF610AFEFA026796EB 130B5C45C0F9A1C40DF7FC093F1D8BD82C3D568F06376BB8488EA98D7E7B8B1D 25E46E2FA19C6ECB9CF4F231842480000A90CC422043B8EA7FF2D938A924F210 54DC43848814905D323C803C59603B9AED05B9760DF748EFB1A7A1071CCC95F1 C0DFD32353D4C6B55B1EEB445BDA8C867B5EB7B652D4C20EC662F27818495A0E DA5DF4A1E25783E9B7F23FA3687F296A261426C32115808EA7F5B266FDE74360 30382F970549F7BC63F4E02A5A1B8F12F3D6EFECE3423DF773F31A59D79EB427 73ABC9DD5B1A5F8F71BA9488C9D2DD211B4E26DDC5285992E62EF99A5FB3A5FC 64D36899C312BCE1CB7C2B0E2BF6971F8B43CFEB4C301E551D708F504E14A71A 5A84844BFC8A8FC424266554331231D60D3930C4375FFCDA28EA3C9D8802AFD1 1FFBB88DFDA43902984DC0719F90217B8FADECB32D48951A4FFFDFB8F5CF4472 87DCF4D6075F64AAABD55EF32527C296B8CA7CBD2F9F6875345F747E13FC8437 42144C46B02A65CE045E860F70F836364005FFF12BA3BAD27A8582549E697B0F F2A4DD9AD740E8CE533A0528C013A3BF8A415F51E380D3AC9EF4B833D9ADDA38 E0B3406B9614FC0D356FB82F9989E32FC518B674DBBDFC9B0F0DBD32E5A8917B FCAE8E85112E31C6DFD8E9E4243D64D9CEE445EBC7F8251E3DB40E8C43DBE62A 644039EDE9382C4FE521C75690148274E0CF0F7B55B71CA1EE451BBF176A08D3 C975E227AA9281686D3DA1F50B8E4C288F1F476D6F12356421AFF086687EB18D C29B334644E0AD43AD08CD79BDA2ADDE7965F6E76A1E5F398FBDFEE1B6CAC914 D1F879ECE6CFABC8D044FE27505269A71AF6F15AAF0CA84C22B2EDB0A3034370 7103EE834ABFC1A17F2212E2ECCA38D4D0C83350D96566A6B0F39FAB2267B770 E61A67FECE25FFCC5CBABA815C35687533A2896E643711A893842D40BFEEA8BD 3911A280726A159358C7A5B25E2907D445AA4B08E97B5BD3466C6897065446F7 65344E0FCFA66182DCB872B6BE7EBD2A2284A2C3E3B1DA10F5A55B3207708704 47C61F2EBB8C69F042F7A5179B55075FCF7B47C540603DCBE9F97A4F2D6F81AC 3A0607D670B46976F47DD878F7B72C32A371B0547403EB63FC9EBF1B518D1CDE A0FD547418344FE48A782E29E07A1AE9600074CB33AC1F4B82C652B101F0BCA0 E040F776F1EE9F81371ACB9AF0819EEEEFF1853D6A0D3DF1483FFF97794144F0 34FDD5689385832C0E025CCD1672FBD40A3D1394CB31E0B32C249A45664F72F5 6E8FB7BFBA03EC2B1D21E9574454DDDBBA5EDCCDD8577624BBA178289A60ADB2 6FB3C8234DCBE922579864A4B1215BF65B95E7D2B9F4F373FC4F3D921183A3C7 69172BA99467E3FE347A072B05B4A5CD9F0D1C251C4015883FEBDB48EAFDB54E 29670B9C1CE5CDE4850389E5927DEC9B8A936EC8DDB0043B5927F8EA3D82BAEB C1CC7365873282DB7EBAC6601B42B87FFDB745BE73AEF3E76CF724E3D90B74EA 82A9FF3E0D4EC494FE94128E3374981B6856463F3F78F85EB0C318DDF54C6C6C 2CE661D10511CC34E9DC4EE69AF9EAB048DBF03A21FEBDEC9F200175691B8CD4 85BFF5CF7D4AD3280512AFCB30171420A13240253636D9C16756823D9496E948 6248695298CD372F9069377993555E40EBCD25B03C0ED8CA95785CCF426C5F53 259A7886B6D314FE49A3BA6157AAE898280B75A1263C76631D443D3DF5830C74 9950101001026FA416820F785E55E345D2B88C6C043BE93266273F27C4F4FDBD E4CE0852977115D753B5D3DA470DC82596896F85DA6224B1EFC399A101D39417 58513B98DA94EABF1CD80BD86DBC8EBAB720D6EF51055C44943CDB5077EEF748 CE66E5736C3ACB26F4B4122FCD2C35AC036BFF796724520A79AC36FD0D675642 539775628668A02379D5DEA35D8D40E4D44334D70A488FDCFD1F4065D21D7BBB 6C9FD01B750DEEE157DF05A37715DB8DFFB38B59A1A1896AF2F14B757AE7EAB5 E046EA7E40B4FCC826BD7FD069770D0076ACC5EE01A7576059B74BE8714E088A D7C0C0E67250000E7712A3699C560F1B18F36A05DC16E6C63C20BFD54BD03FCC 7CA3683E66E870DF60D7CA2F47AF47FA179B304069F367B1A377AF4F930906F0 2321D09C7086AC6B9C9481EE6AF384E493825DAFF3BAFCC9685DFA7A17AEA63B 27EDD243DE771412943972D6E4AC435ECD93F3A558BFFDBFF26429918404B500 ED77FDD53B955D38823012FDCB018A79F122217407223F25C36CC1C076C8C9EB 6ED187AEA7EA2EA61CF464FF7275F2CDB9E9B2009EB6D0B5220784D143CCBF84 EF1EE858C5DD461822020E1DDA2776FE606A1F09049C055061C7AF92134EEF50 4A14584BFC918013A0997AE388362471D861C0F786797256A152CB6A57CB34D6 C60384D3597B39FA8234D0168E3E23F4C78793F32D342C2BA257BE3B254D1E99 E1040CB690E9C1EA76DBCCB26B9A1A84846110A069EDBB67FE5A6C0C7DB001F8 A1A0FCBECFF78A4EC7785D22494EAD92D44C39828842EF06759E22E23F9CFD33 899571E652CDBCC3AD54540DAF8E9584202C6011C4969CFEF328285B627BE31F E613A39E55D81088C741041F20A589D2378D715343B32B9E7549CC159F4EB745 98E7A44B8E7B77847DFF62F92FACD424043F3E9204EAB559F20247810DDF3C17 3CC0E96D96287C330151E4D9BFB1A89B81F5691413C9551626CA8D585D206CD7 AEF74F718B67BB8C22679234A731DE6E811C0AFBE3E1B97EDD5C24AE0B6E1DA2 FFEE3A35A2E4350998B83872A1611FC6FF4108015363734F73C9437EC0A45C4F D564C73D2A5B445876D525A66853D7F721CF55FE167531434EB829E11127662B AB3231E3855F76C5E0467AAB2039D46EE7B99E18B15BD19052EB969636DF302A F915FBFD7077B547AEB4EF01302FC35AA6CD50F7EE302AF90085CCCDF9AD7F65 4790AF278B47FE2F54DE61C602A4A8A9F92383D48E9FC23D55DF3AC2498B335A E6F30DAC6591D621FFF33D2EAE4B054963CCD71EE0B31F73877287683582FEDD 50D4DEE0BA02E63D67641313F12B2D7BD16A2FEEDDE2FB6F522810CF7F3CE2CC 05BF0D0ED5B728C047DF48C09B326F64EFEB09C82D38D70511C68713CEC44A81 91BA42517C0CB7B3016C5C649CCBF20346BBFCC62742412482829376BEC979A6 94FE8F21EC554742EA1CB3B5BA7F0C82E2EA62E23EB799036835EE5771D2E981 657F39990AEE1A43CF94F114D65DDE9EEFD6DED34FAF7C7903817612F86BC570 DE3B48356B0F1073A5AA33DD380C055813E8E961B48CCF84AFE750DF76C1A0B8 440947548BB8BF0604F2B16D6AD7CCF3BE4741121CEFD22B63D7D638971DC9E8 0FF389CCCEC81F8D8816D5170B85EBB19B318875ED6436E1C98CA19F0EE46D31 BDE1BC40550DBD4758014B7AB670EDEDACF58088F133783531EAACEC1A7EFFED 9EF5D2EFCA31656D8FEB10B36658EDC5882397F32AD52A9B3BADEA52D7426823 2DFECB4E7D1A3B91BEA2252340178ED598193B4F5C323B109152E650930D30DF 5741D3C3F87A90A85FACE19153B40B3E80383A82773402D1EEC46820A7F70B85 68C26FD29AB6E849B67BAB6DC0B60A25DC60C3B3BD9A2A70EC9050D4C0398833 20FB0A4A7640EE5B43CBFAE59F71391524000F8B5B59C9800C2A8E9C4E13CF5C 2C80A50A693CE83D6F01004BB71F17C805C1629B1B178A16D951B0378EC4AE6C ADE159822831131881338144BF7B436866D4B0687E4FC0EB2F1C7487C9C5AB15 04AC364438DD013840F2A33E1F351BDD9D1824503EBEAB38A2EA4D86A9D75C98 9C9920075833244FCC1C44158E0A6C71707EECECB27F54EADC57AD57642E6B20 CE4A8AE73E2CF9FAC4621DD05BCB89F5217F99839F475C8B4D900CA93433561C F2435D70C1DDBAAB373C5A3E4198533C31239FB241A8D530F0658721AE4FB4D4 CBEEC255AEBD304CADA744C65027B908CB35DA36AB230E3D9170A0ED6BF9B23B F92B10D93749346DC099414F0F3892353F0A8269BAA3D365B5255CB61CE89F81 84AD68A818402426653BA1AD2A91EAC12E8325F4F2E9ADE14A9433A8F7F55428 42E04AD651074A7F7066AB71C5BE1A2C932EABCA8552110C97F00A38F4B16244 144B33105A52B7C1D56A656BFAA60C890B99084CBBA0930C43605E7A597C4045 222BAB420BBC69542D9A7D70E507674CEE0F6DC8495E552418F93AE4F1EF66AF D01353001514DFF295AAF6814E032409C358A5602EB2287792BBA22D4DC30C28 BBBC6DACF19EEDFFEFE5EC61B0791C050429648BF752758ADB03DE58827DBA2A A86F48E6C7FA387C812D67D1598943C15CFA9D962DD6C59CDA803BC56866CBC4 8F8D1606172BA8DDFFAC6C0D3396AF4C0E2C2C6404FB9A388776C2166938D127 2172B4DFAC83B94726215FCBF8CD95A9CCC31277BF80101B09F38E5C8DFBA279 2D675D5A573EFF1C0955925B074288C642F6F72572BF5BD6BA4F96DFC9CE7D7A 0C1660C9BC6EEBCBBC1EC5BCE0BFA89745E72EBA6FACEA16927A21E46B5A5A6B 726F3C858C907319B1024FE0BBD6DD5715F10524B8E0FC8150DD397C6BF053B2 888596E4C257917DBD2FA7515E0296DCCCFF2B4EEA07EBBAB6EBCAC598075440 6DAFB6C4040E640881151B0A17A08A44CF388F2D7B93E7831F924DB8217A03A6 052BF948E3FFA609AE8526EBB26B80CA2230D186E3694A66F269C95C1D787178 1D058E5CB7F9943DA61ACE464F77970987AC60A232FD747416963ECC9DBB9530 80143178F1BEC6983F37F1CA1F980F62BB4AD6FBBE47F2866806AD8A42EF957D 9B29F2FB54FE4FE9EF2D5ED495501262317F51360F5AFF76A2442280C8B216E5 429B8AFA12625D9C636125C89A499EC074D07527900D45E13F327440383AFB83 2ED489913BB9614D787FAD8B61192AF1438C2DD86BF68D2BBD3C17329B130D11 A65207991310E80BE51E53928ED5936DD7C23063F89BAF08176B63B37FAB0687 F61DEDDE9AEAC95E2ADF747CA2882459210E4C564AD1706C8899E5FEB16547ED 5793E4C0425A46185745AED9BD9C908283B38BC8B7B1053DF009AF8CAC686052 D18998AC8B0110A2ECA8D21930568D76F812231917D9B8F7510E7A72DB09EF71 7D1461F3BFCA2A94B1AE013D38400DE044FD805E55C3C788AF68A84C46759B19 5B0B92C9DADA4AB3F60B2B9A2A0C93EB96B2DEAFB8E41EF9EF3A32540364FD5C 31A70852C2E5B74C56C93E949890BA924D5AD0FB7F49C5F88CB10DC4DDBFB368 DFD610A2FBC92437E52047845C1D7B53EAD50B452F92C69C918D022CE15E34B3 DE588B01FED3AF7CA51FF3335352C9E5A56514A14EB0C875639A82E656C6FF83 8512C0EAC8995633C32209068531C10842B234ACEBE197C88F9DCD6DE00D3700 530384E8AD78F42FEE6DCF76C5BCF77278713EAC0BB4092033F1BCAFDCBEB18E A4049D62FB7BB213BBD8A27EA69254158ADA9F837DD7E87CDAB73326C667A407 71E82AF80514EC9388AC24FA47FDED68E6E07A3AA72C7C6F6B288AEB68BCFA89 2C6747B411A20D97ECE4D77260D6385FA8831BA9755F2EECC6FFEC66FA0B727F C6AEADBD740166F7F38F33C2BF17C6CEFE88AADD0EB1E0C5EB172BDEA9AA1B98 D343A652EC708ECFCE132F205C2BDA7914C0727E4FD05FCB74EB3565DC35F661 726D9F428655014EDF4E424BC6EA356AF94B503B8AD2BBC0363FB32AF80AB229 01F393AFE3CC6BD18BF110B12A913ADA2034B1276F47EC87CCEB20A1685502F1 671E444A7DEAB754B836FC6EA254AE176F87A4A841DB0967F97E221060D8F47E 25C7EB68DE604375D3119F7A269A2DA050C9CAD154F8FBA10EE4F6981958184E E70DBF504B0F8F5A505CF61F41AF90BC226D8AD9D25B98D69CB25DD120C7C083 8A395BD420CE1F6937FA1A42D950F45EFDF4714A06604DB09B9BEF35FF58A70F C40B4BB37396D4819594DEFB48B219A0AC7E4479ED940194D2F3C4317B95BF5D 2DE953A293FBEB94966600A8B72062864F3D9CD1D3AF4BCD794843270FAFF6C0 4F6E70FAC152BA34EBBBB708500F3458F90C34FAC3C151AEB814F3AE84E0F9E4 470A8E459BCE88CEDDA05E5DB69EED57318DAFF3711733994CF75F3AC04F3937 4B089786E351F2EE1DE24997EC6B7D187C64623CDDF29CA3A36208D28A96F4C2 63F2FC51366EEAC4CDADB4E959DAE9CD45AC05F2BD80007301AC2C90563043BB E6076799250DA24CDA71A04FA87F29BE13C0AB22611127B5ABF98B2CC648CD70 E0CCA6906C0552D0E9109D5E82D7818CA5BE200A5B6798F713C3187E8CA65B79 83B40E7D6954987E769944A680F7A79D299279C0A6F6C0A03C635582E76148BD EC98D09DCFBCAED63B3EFAB501FE81737D0B48C9C64D252BCC34691B9654B807 AE7BF8F314CAFD34A85D59BB9D7DA01B0ACE86E4500344A637E00F2C623FB6E6 2520CB0BA65A908D7BE6B5B8CF8D63F843C6E1A54487A84A1FE082875085F723 27A920B491A225922DDB2F7465363EE16F5D2C9F8717D7550BE89A94EBB059D3 A1C629EAEFB995B2E4A03E43E92D94CB634C20113C7F8597D447985F595BE518 ABC752FDA6B6C8A730DDD7663619C28CC2C4C887D2186A590E2999672A2D7E32 4E069EC715370F63B7C967B9CA44523DB080165A83FD6702D92CF9B5F6A7ECB9 6EC3174DC33CB015030D7B4062275301996FEF643CF6EE70C513746EF4C985B1 FA2BD68B463D8260E139C1F9473B7EC8E3CCACB088A1BE48F89308BC2D927FFE 1C21F07FDD118291DB21E71AD593D0BA6CA7C0C326E1FD3F80EDF9935B690F4C AB82765A0F70B7E146301AB5489E162385C84F4E462A927CBBF37ECF7D692486 29BE43672F04A759A7AC0DB3AFED52F3B9940A50D9C85CC12EBC4C186746C1F5 917BEC79465FDE53C4597AE3858EED737EEEC9CD4B807C2E6AD5DB87AE857D97 BEA1768233DC11FF0DB55AE07F4A4FF75AC97AD204FDC91DFE0D16AE2F04299A 5754E864EB84CEC0ED22BEB7361D5CE2A34FA3F0B1BADD9FE89F8F7497B90D0E A742F936CC2DA827D16224F4ECF36A4413E419D5328C245D54C29655175607F1 8C1C576A0A4313BE31AE719781A58C2B8441094ADF95C6E37E4D66779F9E9352 688B0827D4FD5F4EB44365EB89232AA54E9D32C8C5C2C2E547ED79C08606DF0F 2087438CB14EFA5BCE9DE57B8F7C4537520D7384DD84B57F21FEF341D1CFB64A 01E03AE3FA213B7045135CB771568C1B8AFD27C0C6F443D2E541E3300C3A1CC7 3DEB82ECDE3FEED4FAE6F22EB601D72BDC39F93D3FD5F032BFAA4E6CDB64DDE6 931ECF8136F2B0E7F1B5B2EA1E280A675485F4576DEE5300E2142CC0712FB4D7 E6092B44557FD7627426A273B462185A54C07EC7626DDC76E4843EC350F6BB1B 076A93AB3DE9CB2056E762763033E7E332717F69C3B99ADE3CB500579E332C02 DC2474F381B5F9D1197C0AD49830608BECC1C95D7AC769DF68554D2144E88A6E A4D5289AEF157C4AEBB4B078C8357BF6170BA574A6268D00B35AC89644900FC1 67077270337BB793B1A7ECAE0EC91A61776E89A1A366497293CAE04395040A57 6FB3C8653C880F6A7EAF16FCB84BF95E02AD6E71A302D3F3F6CC6824FF9BF0BE DC8C22C05B304C6A0DDABB2879BF9F7443F7AAFBEDCC530A1ECA098BC85C1D47 57965E80C05191AAA1F7580189EAB0933C5A41A54AA3272AF7B2DA4A36BF9A0E B784E4812C8858E58DD524D1D66144FA98CE45EC4772975BE94F2737089C253F 224E9081E55BA1CED1766171F05B640F99645FD43A051EE957969897E55ABF9E F2D81F637D54223BF3CE2FBA1C6348260275D53EB5CF0DDC3464874BC69FC6A2 08A80F8123469BB4A9E0620B3CBCFCAEFA0DC4C5E4E882C1700AD59EC0ADF0D2 B610801B9C733CDD061B9D7580B45EE76F8B505E37F8B62DA1A2F231D6DB5B87 93D2DF1BBE6EF8EEBECF03CC0E4E7473185518A84062105663AF9C2290479636 3162F29C79709A08166CA694D2F5653D0F71BA6412FD4E643AC72F237F189762 67B47D9465485D669D2D5B3DE2E948FA729107198E7044EE2F24F24E27A5B5E9 D3D1A21487D6A08E318218A0291C5607B983AC342EAC6F134A19F860F5DCF485 FC7A58576F23CDBE694A90AC7538975A485E0E8463D2F95A645B9C57911478A9 CEDE3DEF45D4F107F55A296BEFF39049625F15C5A583907B887812B21DDDB77B B7A702129D012EDB11AA59351B77EAC26C545654D66681CF140E30E9F7A52B81 CF3978717CC29EF3905B880EBE74DEE2D5603BE58AE7F183C74C8A8F718E48D3 1F821FE0B437A9075CBF8FD2B874A440E2E42DAA45DCA96490594AB967EBF426 CB0DA20FD794F991219AF3ABFAFE287B75346C3864B952C6611836BBDB06D2D8 CAA6DB42D9ED5DADFD6B0A5D3F0F644594CF4CA18B897147581920EE0410C2E8 8D4615AF8F4F601A7B478BDE8A4AD539A58860FB41BAB5CD645E7F2A55C3A4A3 60FB182B4A843A2D3766FCCB01F59AA2B0F768874325C78A7187CF2E1A3EADF7 E0CD023369474A2D9003972F12B4534B25BBC32129DBBB9BEFF9A007245F28B2 0F251488AB026FB2834FBBC204C0A77CB8F5BF1E96C78FC74C900DEDA4A16121 6A353053AF36F7D47B8BE3B38CAD87079C9F90A20626B5008CD1BDF878D778FE C5D664607736386EB8C67C5A3836F9CF1608A01D80D2488394A592666EDDF683 F7CD125DCAA1918F3C209FFDCED43D5486D46F316B1BCC20E56FFE4FA7982E5A 94BEFB68DFD8745E50CABD2B562892CE372FB1E5DFC9F96198A876AD7E2FC9CD 7DB9E6968052BFCA29B356946C5CA61CA7838A1AF3D9C7CB431B277C29EC42F8 DD7372E5238DFB21E910CDC7204FC0B79DCE76CE95CDA23BB8083982A02CFA4A 2E4935DD74E5BE406CF206D05C2F757D7AFAC90280CA08289F25CEB53E3D93B2 389214DFFA6A8E3CF7E7B045A32F8BE35F898DAF183EC32BC237AC26D7669512 6C244E824C6ECB416ACC844A8F1208F840E0CFA33A89ED9BA64B2166A65A9A8D 95FB157422A57E7D10DD42CAC76F10777B958F50EF72492378A3FA64CA50DE91 CDC63693311EB28E9EC17ABAB2F5A5B260E927717C2E9728837C75260AB6BC5E 2CECD68B992D08623F123707FB411BFEE6571FBEE64CB8FD174D668A13F89035 4DB2DF1311ECB40553A5696482E50A326600B0D0C6359D5B220B468C9A31D447 DCE86F53E537E4DCBB1D2CDBB0B0745F2365C086B22FCED54B8A060B08A6F214 DDE39A117F08BACA0A2050AF631EDF417A0FE32AC61FA08B314B7A9D5CD1DB42 275270BEB3E4198735A2DE6F519E451A2359E97FC6B006A665B3C78CDCA9744A AB26AB06E51EE03D435D01FFF15EC55344EAFA46C5663B501B45424A6533B069 EFA23B740A9E34176727F27E06724659C885A76254BBD3A062B230C0BBFC8CB3 0A243F9CD9E90C030FCF5A5FF821492B82713B0DDD9D88F3C116DE3410DC5EC4 385864DF6E8DA9789E339C0770FF4F466907138ABF43D6823BA1C868B4A99C45 73B50A584C7E6173104CA2B4EA7BCEB1532A630916FC27DE6057D171787FA93C A0F81DE9AB53F758648FB82B645324BFABC0560BE13487D7B187595DACD60E1E D7B38EA2869C56FA0B8D24E88C562AA8FC36BD7F8A58E023B9E64B006F1D763D ECA932DE1050B49F7210D65B0198AEDC28A9F84CFBFD687E57FD36CB19E0EA22 F64F5D0CAB0460C4629C459E1BE843F1D7A29BCE28D592B80F6283822579458F 7AB98EB709371AE5A4572F10ACFBA7B76241859E80F769DFB00469E315C1BD2F 0B236A43C28EEAF53FDF3E6CB7158DE39A9D54AC5ED466BBA5D1BBF93649F210 20FFA19A0A9E2C2028161AA173FE4E99E9F7A8D64644512DEE10C569A267CA5B 95A255E70E716888B63CB911D79EAEE974F46CBEEE8A7A119E99FC7BFBD004B1 0074D10CA33F2C5E339D7D5B153411ABB014E6746E3614D2B1BD0FCB058CF4EE C1250AF3934A9A032ED9DA428CAA8AC78180BC37CD90DB7D8775DF4DDFA64D14 2DDD3FAE891EABDA8E545C7560798CA3D4C45B156302ADD54C14D943E7DD5C5E 04CC8EFA3C8484D7F274CE241FD7FBE0101463DD2777C78EB0653A5B67E462DC F5E571678023B6EAFEC4555B39BD625897238915257664B9BA38D9C8CDA8CDF0 F069A5F5A19D2879ED9475E1E917D919F335C1393D13EADA1911A1218735D82F EEF2D040BEA8A4CB065318C1496ED5EE88275B493183370D14ABFF63388118EA BE83EAE3970CAAD43A6111F9A8906C90846CFBA782DD210C12A60D692BCF12D7 F350FA7415AF25A098BA950FC7A7087B16A06C0628EE0E3DD00D389A9696F858 2C0DF276E48CDE76992E3B1C6F464E5AC3B8C50569F5C2774C2769F05B7EEF64 FE145D07BAE5C014CB2F36A5AE50DB6B352DF56D28F13921F0603A5AA0F21E62 85B620D0AC5AE6CAF1A7A6EC4A740AA8F875BEE511344B123E6729E4AE0E0157 ECA1087DFF626D241AFE2908AD3F2AEAA5EB194B55E7221E1D12B27616E92CCA BD92966795DB4CE4D844C9489C47C53A9FD8D36AFA379DE44FFCD6AE475A00BB ED704483A4D5596214C705CE261F8076B692C6FC5A8BD941654D497571FDE803 6311F36E083BD789835DD7846EB59A79750F3AE622AF5E8A4D05320D1CB78731 48DE362078F18AC7BF3045E26E77D8A9874D888FD45ADA675FB95AA722E7B57E 723334FA18E9BBDC69F109492341D4247C15548C05BBF9AC79EC4B4F738C5596 6F82555926A1DE3174200760938E5E712D34ACE03DEF822940600B6DC01E9FEB CD2F5994E1970688316BF0D74A4DEE8109185B2E92291A380D1046BAF6858F74 B7BDCF7751E017762F76100C0391F7D89E55C10A1946C1F1411C428DA3447401 547647FC8D792EFA16012C92A7356A4E2117FE62A8923221F95DE894A8F0330C EB44B3C8DE2DE058F9ED3A88D48E251B107742A8ABE2698D39DD7C8ECC329BFD 33E7FC9CB343E11F401D6235AC9C5DA5B05C62B69DFE71874310BBF786A67F21 B03A1053670CFCE11E6829DC0ED91348FB71BF4A513C04518B5FDE4D33F8761F 99AB17C22A6BC1D703D0821FC60ABA366F6E1592F4EDB0A600766AD3E83C7B97 4E380F6CA63E40973A15FD5437ADD569E4C8825656E0F66FFC2AD3A04F6E3DDF FAE408BC33060CA7704D81A7FD54CD514795EF51368DCA18D8621A7E178D629E E3AE696D7E149642F84DDFCCF18981BDF5A867FB5AB52C86F3183D457743ECF2 A9EA96C9BF767B314CEFA834A04E92E3925484E3FA8DFB5B70F4BFC25D57239B A91AFA3C5826C151FFF1F3EF4A62262AF28FD8EEE11C2A1DE61AB50BA13F4CFA 6A88005287ECFA0E7BE6F32C9C970C9F75BD88B9436BD0D17B79A4ADA01B23BD 56C71B95814DFBFAC42052C50EA3AD4767EC82EB17F56D29DA7867D718EFE109 B75A93EF49297527C0BBBAFDE22D23107816D6F166F428379E5E73ACF4E1A0BA 06F16CFB49C9051BBA8ED96058C615DA6A7C940927F7C2492D0E059CB00701F4 F8E1D4CA1D878DCDCD49C0CB6511BFD398BF34EE7502049F2ED6C935DC1A555E 0005D0791016985B04B7FC0FEAFC12FEC274CCA951BDC184FEF43217A199114F F7E91FC7B8D6F0FC15E43E1C49D5A99FF05FDEB99E1F23D9A0774E0E3237607F E7CF43A90291F74068713692895B79BDD26F8110B1C6DB3453BA4D3228B829A9 44BE950884BBA8F9B3925997D03806F3174E1E49AF2DA6C5C40724CA636F9BD3 A76B4ECB808F9B9CE8DFEA4FA23992464265EFAC4297768AE952341E2C66BFFA 76F5C693A410A159020146EC51EAAEB252F8ADB3026FCB3B52298EC64E5A64BC 2EED3B6A3719B770C07B025F8D85921E24C03906E3D4D44B7A2B0AFF943C1495 88F016B1FEABC1078536538436AE086C1D7D817A8684372D2316FA1D68B28AAF 97BB4407187E72005EA97C5EC180E498497C849A16B84D57B78313DEAAE24F15 C991C6104D736DA251A38C45D923F379BCB5EE6BF1BF541E81D320DD425A5C8E 0ADF6D6B484C3C118F1858C45A365DC07FE66912104FE1FF7FBA01AB7F53A8B4 97FB9A251BC20310411B5FB55510A967ADB588AE43271A39DFFB9CEEDCD15B59 4B11B9AA985FB06D5E9ED609DFC28EA2AB3DBEEBBB49EDD0828F212B5DCEE3F8 A156FF99AF6838F81AA7DE8809029F5F9DA1A0B9AF369144E6ED064479FA7102 4C957366669D762352C59E058CECC801430EBDB7E0BFBB7C70F3E85288C169FC 0E069E344456750884410787202B7416C527C48431EB76270BB76086661FE9C5 DC4947E93A78BFE1D2763DFF21E30438F1671F22E755D33CB5DEFE0009AA8B97 C34555A1194866C7D29C3D298B81CC1AB67CDAAF23D9A43AABDDE9321B6D71B6 4083CEFE3200C619B43CA644C4C25BB471CDE40A2CAF427FF074D744B6D6EF98 EB4A92B3AB194DA6FAA16D1D62C5437E4E764F2DFE37F955F838FBD47AF0A255 B9719C3B174B01607745A622740CB40E314319369D1805B5601628E3697F0407 97AF598B88DB509DA3D199922EC2D2851DF7364E17944D05AE9A675223E641E3 DDF5FB4A813506D17AF4E765B20334260EE731424A4777F426739BD22E003FE3 6F8EED6D2F18D251F4069B4AA18989B0681C6259AAA51FD7E26EFD43966BE852 29F0A6EF4218B37F95FEC49E016D3EB68832422F1A8B2771429FB1E272F05791 B81F982C0DE757821ED6F3FED439839A63B6BFD700DFDA236D8D4E7B4886A44B EB7CE565916544670F2FC92AE495D30137819FB11DDC5DD97D745CCCE757D955 33FD700352789DB693F040F7F855FD63EF1E95A638F28CAA93BC44EAF4409A43 673FF1D021D723EF0F61CD06E5964B883A96495549949FB5FA9256649C9A9EB4 F6AD9463789433DCC69BADA0D3A205F440FEC96F22B98FBF2136615B59A23F49 2D5622637D49285385327CE49C8650CF76DA01482458EBCDAA440EDC533EC674 BEC5E0B63972697ACA1F67840F941FC5226D571091FDC663F6B6DFBB73ADEA8D FC8137F7EBF5AF3262302E3CAEE549E34D180ED31EE2E143A6888E3E6DAA61AB 18881E3BABA446785D590F7C2953B7AC10F753CF310B6E4493505A6A269F2ECD FF7D6B6CB405A661B38BC658A8A3BBC9FADAD0478E0CB0458E0D78B639D8490F 7B7C351B46F4ED2E813FFA9A497A114F0693BBAFA7499BAF1015D55F15F03009 3A3178B664FA0411B642BF2D60BEE9EFBDB6D4C1CE7C2DD47FD2A3F4217DBAB0 BFE0AD4F0D50C2442B85CF9BC1AC09F376F7A0E5DA6018A2FAF2ECBCC93ED8AC 8391282C4979486DEAA4ED786851106E957F467DC5859361BC49854A52773A30 42F43E9A4AE3CC10515C89378B808901C19C9474273A91C6005E657D3F1BC143 6A0B6E095D14035237E1EE3A1E2FFE123090B999F26EB30B45C7E134713A641D D414FC51B670EF8AF5279F577E1C8D8F0084BAA8B492A208C86486F508AE91D3 C2907B7B203AD9EB74CE2BD9F303C0E58F36BED249B26EA7C392931AF5992963 91191DFF6BEA27EBE41FA797BA8773D8B46B8A95241549DB667292ECB6B50A60 FD0BC28C1705497B2739701F4691F90FC00193970B4C888FF22AB622C9BD1D51 2DB3E0E58CFC402E0C04B7DAFD02EA484AA477C09674E2D30F2C146B9A2D308C F0DDBBB504C993170A7B09C7435E442F11A158BB3BCE529857AE346E8FF6D83B 38E38EA3E4886AAEF0FFBDACF13416C58F9F9861F920089B4CB52D684A147DED 12536D792FABAA26E177FDD0FEF4503AD4A04A306F2DAB3185466E3B0748332C 7E422D107A5DF667BAEF775E3D464FF93EB1142A4316F4474CF7E0A163407DCC 136862DE1E9EDBD467A221FCE057F3F54821F85B102CED189A078387E7239E2C DEB313257D3613F45A2EB51E0887FC7666E49C26FDCDC1F2311415E9D64D0A76 182632352E770BAAA7D72A6C20030ACADE288F31D9BA4C9E1615DA8A80819CCE 9E2DBB0220DCC053707C30DCE82641E9084CA2C406B7F73C3B882578D0A9140E 54FA3E55ADF865FD098386444306E7D2E10C2F8FAE6EEB3D8122C4794CA0CD28 CF1936B7AC7C8CC28B458ACC6AE386FDD17C0C8DD6881EDA1704D820545F5D48 CF3BB9597B469EA19EBF05C7EC2611730A20FB371B088F918D01C0D1F10BEB3C 4A260629CC055048CBE5EC3D6E14C740D2A74BB2F1D8C3786B9627BDCC162DFF 6441BD5C8A125F6B8AC8340FC6610434C174EE6314953125496ABB4128AD5FFA 6314F697A6E04B3CDB55C573760D14641279498C32F14541F30EDB8BB0CED13B 6C86BD0AC9B5CFDF55EBF039A18715D2D45D6D61DC3690842EE2BF8A26FEFD23 DDAB55308213597BA3F10BDEC15D3F0A356A06F9B6D3B62CBD385ADBF32CAA16 350637FE505F2BE46ACD8E7B5CA0E14FDBD0A6002CD84BEE37617D682967AEBA 9F2F0CDA4958A495516EFAE426060B6111E2A580F637C1E41EA313981FB45CC6 C90DA0A8102407240C9FD135007BB44AFB5983AD3D6E226E604C93F21EF46344 1C51E317A1C2F51D7172A11DB9B3EA7EB580AE5F1E95627D765F4BF65D42F151 655FD02939043984AD55A7EADCCA53616117EE2C171FC7EA899CA684F2409F24 40F06020F0CBA556F380B68B468DE9875AB5A6134B27D7FEDA9F8560A89CC147 B13ACF2E8A09D73466AFF18F59B6FE5B23473637E9CDEF09C16A2CA5AE95E447 B0BB3F89E120D72F935C03BF445AEBDB3C0EB6DD341B0882B7358ACE7C72F82D D7E0ED47319B48F2B15C12E233545FCF67133213A341F0BBF146F4289044A011 8075992A7EADB3A25AD20ECC50DD43D2507B6AFAB5064F862222925B6C401ACD 3BE282035D64C5EF45D9F44CAB88D04460621D8A1D4CA56EAF85F0F09976E2CC B5883FA75A36AAECC3EFA7194C68D350836070DBA947A034894EDCF6CDF55D4B 4C4D8CEAB29792029B0CE2584080FB2DB9DB1E5D8D6E2E503CE0B4F1BAB93DC0 D2450CA11E2AE5127277EE5132174A1A4CEB08F64AF290D51571A174D0A37759 A6181F3FD5556912FDCB1CCE98984F05E2B54A2DD4D47F64B2E970905ADBDE62 8AE554489780F767F3E9C3271EEC450A9EEF371D5A53D1CC7429F917CA691511 78E140811052AD2AC2AB111D92D42FF1220527C4A086E6CF808FD6E5652EB902 C2440C279240D1B86B208CE6672FF3E72CF64469D4F72A1D6BB101FED2214D4B 845647D93A6928F93E7AB3CA3D69F69F236171C6D9A45FBF676C8B549ABC7300 F17C02E975E0ADE117801C86AC8E9E2475448CB56ACCA4674D0382F4344609B6 8AFAD5C889C781C0209B903A91E1D8B36AA1129F0E6B66FEB48D20710A19C0E1 4CF0897A81208FFC8AA59A4FFDB1A163AB05932CCF8D3A19D07248D755C4331F 494F878A5CA64EAA5D0632F9B1A0232751DF2AA0F263B0E0ED90343073987505 F8452D5D6EC26F7203522290152EBBE223AC4D7CEF6E18205F627472A1838273 E8F961EE91F63E02932FE56F064A0566D8DFCB171947802A8E0E3ED5B2E89A9D DE4BB4A8178A1B1DE70EE29DFF5E148826070678681CE36CBDF496A839BBAD1A 7739E252B073A9486F9D465FD3BB6570797B7F724FFD1E117C66E7DD6115D6EC 0DFAE8848F516318F223FB05C256A4F10DAF079E004BE1A247CC450275F56F60 EB4033EB82BCBD9EBFEF522F4F8E31E35C395C3BF67AD5D670E3770EB528FD29 3DCE8B676105186334719BC5CFC68379617636D717ABB6504FE518B88D07DBE8 21767A6A627638FD92437B8C36C7A494B052D068168D0A843D987986E5A4EB4B CDE29D35BA5E213D5342C113AAD12E621B70951E53D41F53328681BEC951BB0B BF2F681DAF7BCDF13EB8BEEADA42A14C51267CE76A8446EC9B410D35104E22D0 DC7BC938B1FE7DE82B99D895247CBE5673CE8A339C7AE6875301A69B0810906F D70940220E5C9B78014404D32DE2D63E95246117FDC7A1DA052073764061802E 7508878DC050664A6C253C9688F858DAE95518B4AEE9CFF2DC84EC66D13DB0F2 95972B432DA8EC5003E9A4BC40EED1451181866D887E7E2EC60C5E0FB2C7837B EF30B7B5A3B416608F746950FC5FFE6CC3339C1F595B5A7BFE2B471E00BA394E 7BC078BB7D29A8D19F37AE4F8FEE45CA1896AAF41702201A7C7CEB7006583C68 13138C53A4551E7BF3C858CCE44C7A02DDEAC240EDA6EDD2F1EE85E5B4F05534 441A71958CB1822F761C9E1C7822761A80B64D93E5D3F093ADA93285F61DC847 AF05852CB76D80E420D4D0C20EDB153B1A604430E4BCF8B86EA4A1DBCC2E6FA3 3F8A8594FB269D8C1D1C133BDDF78D9470480435C48ABDCDCBA94C7A32D7BF79 B400B7726E48F1EDDAAD8DF7A8F55B1E047BAEDCF12BECE6441A5ECAA2644E5C 238F2BBDEA1717488292E4082C29CC243BBAA0732DD818E37A2A4B1913817E41 31EA4EAFAFB3BC6C54A3F157D8581B503C6E4986F4AB5F98337B73527537184C BB48F63A4E8120EB5D4647F5B12FFCFC6F6A3BB200989DC853A6D27C3A7EA802 4140F540189A28D6724086EFF9E224804B7916BFFC5EAF4F2AA1095537DAE5D2 1A7EB72CD39B716D2CB8A9FB79CDBC3F3FF2F49B87223FC453B6811AB154FC93 0B1F17299D87C28797D764891571F13D286ABEABFF3609BCA6D90F273A29DB2B 6E3A82DF911821E47F9DB816E2A921BB7A04AEE32DB2061A8DBE966467B074BC 776480144F5FC9CD97E2F582EBCB11D31F73A19DA5BD5B79387E551149EBF469 F47AD1A1A2A840C7A8BC94B55273F65EA74CB0A90A620782E4AFFA6A07336529 23975B909F459A8FC7FAFC8EB92ADAD1771F72169222B6A8B60324880494FF2C E5CDE16967E31431C64754C959537D1AC0943CA4933846DDF84AF87F86ABFEB1 4148FD198C93A6012EB97257CD512F77A5ED98E01A4C7B87E4F5D44022725044 146845F276CD44C0A0B11ED51DA292036413FAA21FB04237C8DB9BEBAA0714F2 8663CCB334E855C3FE9F0A79DFECA455EFAD4E6129A03B0CCCD07C39818C6EB1 5F784C33B3830FFAF0E60C1CB39007D920D789609C7F1DE29D6612C3D47D9D8A 8BB1DBC23F25A1F29BC9DB1359D2154B9A45BD4245C77D274578326ECA699624 E0078E4390A8483AC484111B0A74B0105F1C5C9A69F4485345C912089EBF9CD4 1FF7218421E06244B8E1FBB66E130C21910E595CE40F7043E707DECD939BAD33 F8B8F799570896DFB476FB223D2554FE71D3A0CD505149F1CF8EAD88C3DB86DF 1ABD64CDCB1EB98D2E077F86643D40CF8A34EF364E09D779D6C8310E130FE881 503E3E45B7E14C0BBEE67F675948FA335382FC482FBD0C599FBCACD440168472 751AA9624F3D5E6EDC9A2769AC36A5BB0EEF66BE29C8ECF96161778F0E4A940E 7C993EDC8774212F85B20F6B03EA69F4D3E05C4AF0D373FA4615785D72D8C1C7 CC3D52A0DEA3E05209AAE8FB25F38659D97240C5DFF9C49A614B1869F207E61A 4D039B8F41B7EFE12B790A0FEF194B966C46C810D353745F2C6A1F07987B1AFA BC698C3B19A69969672AA12D1EECC7DB45EEFB5AC4E6DF77E419A47D1A7A3749 FCC610D10E0317E19A56DB7AFD4952CF89B99087D38BBF4A88720988BD14C6D2 5F2D1FF9A126FB4419F16BECC0ACBFC1B7033BC43B1A20582A44743B336B7077 7DB2E91FA9D8BA323B04BA5066F0A80BD4796DFCF8D27839E8126FB7C5215883 1251299FC6ECEA89494423F6D1AEA8C5DF5FCD46C9B73FD9BE716F4F95A7DF15 B9C3CF947564FDA855EA68105A617B04CB4AE99875882D5DD146B7E04BE494B6 29C2741D0C395D51F970D1ADE0B759A7CFAD0F9CBEB025027DC4CAECA99F5FFD F35DE2D0FD6386BF692D443183EB40C25AC5236FC7F68AAD41E30488EF2A277D 9F0F822940C7DCF7CED6A4D3C423E099CCE7EFD6863591B7A05B034666618A51 AF2D6F92DF1B632D03897594BF4AEFE567DDF6E5D14042EC0AAD4E01B5D355DA FC1366DAF4CEF636427E687FF45B02DCD2D5E57462E189623461929A4CF0EED7 E65F759E4C8722694AF54D07F670D83AAC4D31BF9404A7A26796256D3698ECFB B655E855B90536AD2DB616B56CB668552561AD2629DF1642D2ED9A3B506712A8 F796B262C3136F75A30741BEFA51148E57F40910E738CA79119959C1D5426797 AD8FE5ABCB46C31D47BB83001640943EB2B9F9CDF2E03C5E8BD355212661A5F1 BA06A76C72A9D2618C4968587F052995CD454381956514CC05EC573FCE513CB5 C9FD34EF4D1A75EB264B2F63E6F73BB8E7BF7371F5421B5EC6D4AF717AA1A693 4E8A22F3C8A2A6CE08F84AF7432E3BF01E611669AE6750BDC893C8419C86B48F EA6F99FD75A05E067756CE2E43E25B9E7C914E0074C45AF827AF702C89B80A29 4A0DD816D672239DD75A78A9DC32CEE742DA6DF226F5A789F6C9E2667392499B 0636086118A2D599F6898E9E037D7B592E0C00797F6BEEB24A6EA7BE3A54E21F 5E795F69E70DD50F1C6A0EE749D79B2BAF21F224EC8AEFC852133F3DA80EA15D 4DFA427A1BDBB2176815ED53E411A9C96AEBA5C8270FE482C33E421C6BD03BA3 E06B29D02D2D37966828CF2C3D1EF78F3D5CC90817F625BBDD8E3F15F94BBC80 56ACE512CACF5D856AF071BC1C3B8023F9527827AF612A26B626A2632F08F79F C834ECE535EC2E30181EF6B111B99AE2ED426B1189F8FD3F40A02C1BD4A83812 43F5F8A0537DFBC07A0DECE582D06A2F38E9B354CD3274705770207E75D7999F 70E0A5A1C64CC6FC402B7CD517810F3473180750B41EA899E7C925579D63767F 9F0732B8A12B3863170D5753DE6436DDF776B1E2047C0EE94366118F0DB38A07 9AC50D320AA0F8C4D2403EF83B939C8714AE9CD4626A1B7B1B1505B3F1266F14 E8A6B580F9982D3CA7A1A738B0AF910CBE4CEB9CF2C5CF814F06741329AA2926 E98C8A5D650FD71F62458A411B4AE0E69F2A55EC4717C12B265B691E867771E4 74196A2F1BE780424E80925260896981D141B08195EDA89AC621A00353DE0D2F 0210A0B02074E6F98FD0F3DB0596419EDC6AF2D98AE862FDE90D0EC753AC82C1 99CEE90B6DBCE8DECAF043107E036D5BCF91203882B0BE9C72249ADB19214213 8D26C3758AACD04CDA897FE41B6300293CC50F47EF383409F935A81E37893701 7D6ABCD6BFF3108F26570374D7725AB8A215BF3C389DD2DA1DD6FB3E146728BF 14C4F91DF32331159E34725D5EAB31C6F89C64B296C9F636BD58E7B3A3AB911C 62BCD5A9D4A4064A365F95C683D1C731D9F2DCFF1BA5AD1E3801DAD51827B1B7 524F5FA8B64DA89B8A26E98F131A63EA52C98A4A9DFA21C587F0C6D068B533BB 83FDF95D34EACAA7B9A0614B64B24F087558C1B524EB432B973B65E1F257C77A 72CD8CC83802714182813D11BDC24C812DC3D285F9CD20183457B4ED2A99B2C5 9DA4AD275B3B3679DA959FA3E88F98E7A1DC2B8D917AA1B10082BF08ACA13F76 7B9AD4557D63F8994C83BC8A632176B6EB759F444571FD18A1E9DB3862AA0B81 06A06E160AE0D42A628E9C4C20D7486198386E86CB0CD159F81583578117D606 FD68458A0D415B22FBAA4F92BF1DF24F05427D9B37CCE5919B420D5029BBFB5D 03F8A4B1968F3E2FC58520D6E3CA473C437A0985818646397786626C74A9FFDA 8004AB56D02704DA8482E9C43F4EB471CD800A378306D09D81E0FB64F1FBB803 202185C3052210C61B130A7F44B80B8405F7A6ED822F9A4E6F7B2CD087F473FD 207144EBBFB4F303136B15D1238B2D36B7B7EF1672113865E3A0F87C668C816E BE2768905BABB04B6B048E3A8149875070874F578A6D177B74E5F65F8C555C1A 456F1104C64270C5FB8872D7232BF3BAFF16EFCF7F9B9C85FFFA29B49FD19F06 3A6853C1C6B231D0CD9190C1C68917BA9C921C6C4FD1548238B2F9745634CEB1 AA226D1A27391FB32259ECAD90A63DCAEF4E8C02FAFE790A719AD63CE8E38A74 2078798E227C0F0E8A4865817A94910332A0FB3B216603D8B34A0B097F90FDAC 71A3F0C95FA6B6A5C3625D9211CEE5E47B74409FF26750F05A4317DB641EA162 CF265CC02BDD6DCFFABD8165D41E5E3F9B28970A1D86ED840A8CD596154F919D 57420FDA8A53D5CFF36E366A88AA1E157D5C4337939BC381E9CB3DE47F4363B8 65BC47B335B3E3A3E863A2BBD35352BA20309B32688036321D903AD4F3135F07 C7F5490B39F3C5A9AA67FC1B65CB6EDDE8678CDF180288C3ABED1A48DE7EF637 1C5B0CACDA13124DF6A5B45C2598C132F22DDB3B6AF1FB1F3ADFC174458C4B82 455EAB0320ADD5E7D0D47AC4ED71EE06B1E2F824965B5AA966C5F0EF0A88D19D 4D76D5A8C827C301A0A4DCCBB90BF74A2494A3743956792B1DD1CC33E1989750 DF1F02F6D1706473E8FBC88477AAEADB1F46A72EA75A5E3633C4B180352E647D 9C8D77441139766A4519F50B6FCA9A995E44513B0FC977A379ABFF5DBB26E545 2A7DD4F85E126FF32BE12CB7CB4A51DAB52333D5A7A02399A1CB8038F854126C 6F1FF725DBC706AED40498276B5249379FD02541932A2BF850CAF20485367EC4 78B304EC004993E185DC650BAEC1CABE46A10FF5C09EE5D694F5B265CFBD7335 309BBB11C97CAAB728F194C37C29073E7348157DF3953CDA4D2F5F89390B339B D77AF9FBBAA442E67E65CF9FEA2B832DDB792EC30CA07E294C9F296795EF6DC5 0C2822C29D500E97DFB4671A19AB79EF791AF4BC63F913E79D40DA0EEDB5A47D 45B0E0381497759628C9ABBA831C5E7A76F7A6E6F2756F1FEFE896E2A96BC5DF B300B027F40BD15B189618C14BA4BCA895F88469C3CB80DEAE33639A1804B0BA DFE429B84F60C6F23887CEFB71B6FB7BC8245C42D3A226BF7C6E515D7E0F2FE7 FDC895E95036D231B2C65BBB4E73BC5D13F5F99C407571A0ABB34501D1A9E6D7 7A9178DEB2D16BFA6968BADFE0F84BF9A9756299518F8DC55B00106061FB91F3 8E5FA284C6880592E481A3691342BFB84A1A0959F02750C8455953D9E23A0E54 C193410F7D55BEB7CAE763161747D411BCF9B7B32906D7914EB5C50D7F0326CE FCDA81A0368DA7E339A55DA3E8AA0C36CC73717E3661834A9D05ABDA427EF4AA A7B0D39C2C288ED042E59BBB9425B59C1E1D2EBF724FD95AF52B1B412E621A04 09838B7F01CB3758E8FD43707AE9F5A8BC19ED1A9D0CFA7428D2DF8610601E49 93D04D9AC9442FD0C2A4FCEED6A37E8940F1D05B87B9F71C15A7D4575EB07F6A 1D21CCAAC9461AF0D00241AB4CEFB96E51092F3E865DEBAB403B981F3CA263BC 6C8667FA48E243D027414C24AD959A24178372D5ED2702F1FC7AF2DC8BDADA58 468B0C9CF24A87241E36952997F2E61E8DB25729190F044D8DAE2E4A8F52CBBD B4E3C8BB1FA96D6A78580E7C0E668F005F4E61F2DE00555D2C4D0B22A6B91693 92962B700360303525F412F490A6732E504942F794BF25FB3594AFE83C605102 40BC3DE28F1A2A90B2703FC5D5D61B0F5559CFEDB3A145CDB204506C3B9FE49C 12F679DE0AF8E8CC3A6DF29663AC2418904FAE9BD0AEE4A0ECF38E093DC10B59 30B70E87D96E0737EDBAB420158092C5D69E82740AAD8171FF018B0D44B8491B 3565AC55E13910780306578E7A168CE082EBBB21DE0F7D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 39158280 55380996 1000 600 600 (gss.dvi) @start /Fa 197[21 58[{}1 74.7198 /CMMI9 rf /Fb 134[41 41 55 41 43 30 30 30 1[43 38 43 64 21 41 1[21 43 38 23 34 43 34 43 38 8[58 79 1[58 55 43 57 1[52 60 58 70 48 2[28 58 60 50 52 59 55 54 58 7[38 38 38 38 38 38 38 38 38 38 2[26 21 31[43 12[{}56 74.7198 /CMR9 rf /Fc 134[39 1[39 39 39 39 39 39 1[39 39 39 39 39 2[39 39 39 39 39 39 1[39 39 50[39 6[39 39[{}22 74.7198 /CMSLTT10 rf /Fd 133[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 5[39 1[39 39 39 39 39 39 1[39 39 39 39 39 2[39 39 39 39 39 39 39 39 39 5[39 39 6[39 1[39 1[39 39 39 39 2[39 39 39 39[{}59 74.7198 /CMTT9 rf /Fe 133[52 52 52 1[52 52 52 52 52 52 52 52 52 52 52 52 1[52 52 52 52 52 52 52 52 52 1[52 44[52 52 49[{}27 99.6264 /CMSLTT10 rf /Ff 133[40 48 48 1[48 51 35 36 36 48 51 45 51 76 25 48 1[25 51 45 28 40 51 40 51 45 17[71 1[83 3[33 4[69 16[45 45 45 4[25 1[45 28[51 51 53 11[{}36 90.9091 /CMSL10 rf /Fg 214[35 35 40[{}2 90.9091 /CMSS10 rf /Fh 133[52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 1[52 52 52 52 52 52 52 52 52 1[52 15[52 1[52 25[52 52 7[52 42[{}31 99.6264 /CMTT10 rf /Fi 133[55 65 65 89 65 68 48 48 50 65 68 61 68 102 34 65 37 34 68 61 37 56 68 55 68 60 13[68 3[92 96 116 3[46 1[96 3[89 87 93 10[61 61 61 61 61 61 2[34 41 32[68 72 11[{}45 109.091 /CMBX12 rf /Fj 130[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 2[48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 33[{}89 90.9091 /CMTT10 rf /Fk 197[25 58[{}1 90.9091 /CMMI10 rf /Fl 197[33 58[{}1 119.552 /CMMI12 rf /Fm 134[85 85 117 85 90 63 64 66 1[90 81 90 134 45 85 1[45 90 81 49 74 90 72 90 78 12[112 90 2[110 121 126 4[60 1[127 1[106 124 117 115 122 10[81 81 81 81 81 81 49[{}41 143.462 /CMBX12 rf /Fn 150[35 35 88[45 1[91 13[{}4 90.9091 /CMSY10 rf /Fo 133[60 71 71 97 71 75 52 53 55 1[75 67 75 112 37 71 1[37 75 67 41 61 75 60 75 65 7[102 1[139 102 103 94 75 100 1[92 101 105 128 81 1[69 50 105 106 85 88 103 97 96 102 6[37 67 67 67 67 67 67 67 67 67 67 1[37 45 45[{}59 119.552 /CMBX12 rf /Fp 131[91 45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 1[43 1[71 1[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 1[45 35 35 25 4[45 19[76 51 51 53 11[{}85 90.9091 /CMR10 rf /Fq 134[102 2[102 108 75 1[79 3[108 4[54 3[88 1[86 108 94 11[149 1[108 4[151 1[116 4[152 71[{}16 172.154 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: a4 /setpagedevice where { pop << /PageSize [595 842] >> setpagedevice } { /a4 where { pop a4 } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 150 1318 a Fq(GNU)65 b(Generic)g(Securit)-5 b(y)64 b(Service)h(Library)p 150 1418 3600 34 v 2222 1515 a Fp(GSS-API)30 b(Library)f(for)h(the)h(GNU)g(system)2327 1623 y(for)f(v)m(ersion)h(1.0.2,)h(21)g(No)m(v)m(em)m(b)s(er)f(2011)150 5091 y Fo(Simon)45 b(Josefsson)p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 4633 a Fp(This)30 b(man)m(ual)g(is)h(last)g (up)s(dated)e(21)i(No)m(v)m(em)m(b)s(er)h(2011)g(for)e(v)m(ersion)h (1.0.2)h(of)f(GNU)g(GSS.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767 y Fn(\015)f Fp(2003-2011)k(Simon)c(Josefsson.)390 4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h(to)g(cop)m(y)-8 b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s(cumen)m(t)f (under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 b(ree)27 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)26 b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion)390 5121 y(published)43 b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8 b(oundation;)53 b(with)44 b(no)g(In)m(v)-5 b(arian)m(t)46 b(Sections,)j(no)390 5230 y(F)-8 b(ron)m(t-Co)m(v)m(er)31 b(T)-8 b(exts,)30 b(and)f(no)f(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts.)41 b(A)29 b(cop)m(y)h(of)f(the)g(license)h(is)f(included)390 5340 y(in)h(the)h(section)g(en)m(titled)h(\\GNU)f(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License".)p eop end %%Page: -1 3 TeXDict begin -1 2 bop 3725 -116 a Fp(i)150 299 y Fm(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)150 624 y Fo(1)135 b(In)l(tro)t (duction)13 b Fl(:)19 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)57 b Fo(1)275 761 y Fp(1.1)92 b(Getting)32 b(Started)21 b Fk(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)51 b Fp(1)275 871 y(1.2)92 b(F)-8 b(eatures)26 b Fk(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)56 b Fp(1)275 980 y(1.3)92 b(GSS-API)29 b(Ov)m(erview)12 b Fk(:)k(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)42 b Fp(1)275 1090 y(1.4)92 b(Supp)s(orted)28 b(Platforms)20 b Fk(:)c(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)51 b Fp(2)275 1199 y(1.5)92 b(Commercial)31 b(Supp)s(ort)23 b Fk(:)13 b(:)i(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)53 b Fp(4)275 1309 y(1.6)92 b(Do)m(wnloading)31 b(and)f(Installing)9 b Fk(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)39 b Fp(4)275 1418 y(1.7)92 b(Bug)30 b(Rep)s(orts)22 b Fk(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)53 b Fp(5)275 1528 y(1.8)92 b(Con)m(tributing)18 b Fk(:)c(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)48 b Fp(5)275 1638 y(1.9)92 b(Planned)29 b(F)-8 b(eatures)10 b Fk(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)40 b Fp(6)150 1872 y Fo(2)135 b(Preparation)34 b Fl(:)19 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)h(:)77 b Fo(7)275 2009 y Fp(2.1)92 b(Header)13 b Fk(:)i(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)43 b Fp(7)275 2119 y(2.2)92 b(Initialization)20 b Fk(:)e(:)d(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)50 b Fp(7)275 2229 y(2.3)92 b(V)-8 b(ersion)31 b(Chec)m(k)11 b Fk(:)k(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)41 b Fp(7)275 2338 y(2.4)92 b(Building)30 b(the)h(source)9 b Fk(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)39 b Fp(8)275 2448 y(2.5)92 b(Out)29 b(of)i(Memory)g(handling)20 b Fk(:)15 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)50 b Fp(8)150 2682 y Fo(3)135 b(Standard)44 b(GSS)g(API)30 b Fl(:)19 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)75 b Fo(9)275 2819 y Fp(3.1)92 b(Simple)30 b(Data)i(T)m(yp)s(es)13 b Fk(:)h(:)i(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)43 b Fp(9)399 2929 y(3.1.1)93 b(In)m(teger)31 b(t)m(yp)s(es)18 b Fk(:)e(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)48 b Fp(9)399 3039 y(3.1.2)93 b(String)30 b(and)g(similar)g(data)17 b Fk(:)f(:)g(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)47 b Fp(9)524 3148 y(3.1.2.1)93 b(Opaque)30 b(data)h(t)m(yp)s(es)26 b Fk(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)56 b Fp(9)524 3258 y(3.1.2.2)93 b(Character)31 b(strings)17 b Fk(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)47 b Fp(9)399 3367 y(3.1.3)93 b(Ob)5 b(ject)30 b(Iden)m(ti\014ers)8 b Fk(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)38 b Fp(10)399 3477 y(3.1.4)93 b(Ob)5 b(ject)30 b(Iden)m(ti\014er)g(Sets) 11 b Fk(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)40 b Fp(10)275 3587 y(3.2)92 b(Complex)30 b(Data)i(T)m(yp)s(es)9 b Fk(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)39 b Fp(10)399 3696 y(3.2.1)93 b(Creden)m(tials)11 b Fk(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)40 b Fp(11)399 3806 y(3.2.2)93 b(Con)m(texts)17 b Fk(:)f(:)g(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)47 b Fp(11)399 3915 y(3.2.3)93 b(Authen)m(tication)32 b(tok)m(ens)17 b Fk(:)g(:)e(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)47 b Fp(11)399 4025 y(3.2.4)93 b(In)m(terpro)s(cess)30 b(tok)m(ens)15 b Fk(:)h(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)45 b Fp(11)399 4134 y(3.2.5)93 b(Names)21 b Fk(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)50 b Fp(12)399 4244 y(3.2.6)93 b(Channel)29 b(Bindings)23 b Fk(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)52 b Fp(13)275 4354 y(3.3)92 b(Optional)30 b(P)m(arameters)19 b Fk(:)e(:)f(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)49 b Fp(15)275 4463 y(3.4)92 b(Error)29 b(Handling)9 b Fk(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)39 b Fp(15)399 4573 y(3.4.1)93 b(GSS)29 b(status)i(co)s(des)12 b Fk(:)k(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)42 b Fp(15)399 4682 y(3.4.2)93 b(Mec)m(hanism-sp)s(eci\014c)31 b(status)g(co)s(des)21 b Fk(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)51 b Fp(18)275 4792 y(3.5)92 b(Creden)m(tial)31 b(Managemen)m(t)18 b Fk(:)f(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)47 b Fp(18)275 4902 y(3.6)92 b(Con)m(text-Lev)m(el)33 b(Routines)25 b Fk(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)55 b Fp(24)275 5011 y(3.7)92 b(P)m(er-Message)32 b(Routines)17 b Fk(:)f(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)46 b Fp(41)275 5121 y(3.8)92 b(Name)31 b(Manipulation)16 b Fk(:)g(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)46 b Fp(45)275 5230 y(3.9)92 b(Miscellaneous)32 b(Routines)11 b Fk(:)16 b(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)41 b Fp(50)275 5340 y(3.10)92 b(SASL)29 b(GS2)i(Routines)8 b Fk(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)38 b Fp(55)p eop end %%Page: -2 4 TeXDict begin -2 3 bop 3699 -116 a Fp(ii)150 83 y Fo(4)135 b(Extended)45 b(GSS)f(API)12 b Fl(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)57 b Fo(57)150 353 y(5)135 b(In)l(v)l(oking)45 b(gss)13 b Fl(:)21 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)58 b Fo(58)150 623 y(6)135 b(Ac)l(kno)l(wledgemen)l (ts)27 b Fl(:)21 b(:)f(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)72 b Fo(59)150 892 y(App)t(endix)44 b(A)160 b(Criticism)46 b(of)f(GSS)11 b Fl(:)18 b(:)i(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)h(:)55 b Fo(60)150 1162 y(App)t(endix)44 b(B)166 b(Cop)l(ying)45 b(Information)25 b Fl(:)c(:)f(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)h(:)f(:)70 b Fo(62)275 1299 y Fp(B.1)92 b(GNU)31 b(F)-8 b(ree)31 b(Do)s(cumen)m(tation)h(License)24 b Fk(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)53 b Fp(62)275 1409 y(B.2)92 b(GNU)31 b(General)g(Public)f(License)10 b Fk(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) 39 b Fp(69)150 1651 y Fo(Concept)45 b(Index)18 b Fl(:)i(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)63 b Fo(81)150 1921 y(API)44 b(Index)35 b Fl(:)20 b(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)80 b Fo(82)p eop end %%Page: 1 5 TeXDict begin 1 4 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(1)150 299 y Fm(1)80 b(In)l(tro)t(duction) 150 514 y Fp(GSS)35 b(is)h(an)f(implemen)m(tation)i(of)f(the)g(Generic) g(Securit)m(y)g(Service)g(Application)h(Program)f(In)m(terface)150 624 y(\(GSS-API\).)h(GSS-API)f(is)g(used)g(b)m(y)g(net)m(w)m(ork)h (serv)m(ers)g(to)g(pro)m(vide)f(securit)m(y)h(services,)i(e.g.,)h(to)d (au-)150 733 y(then)m(ticate)k(SMTP/IMAP)d(clien)m(ts)i(against)f (SMTP/IMAP)f(serv)m(ers.)65 b(GSS)37 b(consists)i(of)g(a)f(library)150 843 y(and)30 b(a)h(man)m(ual.)275 974 y(GSS)39 b(is)i(dev)m(elop)s(ed)g (for)f(the)g(GNU/Lin)m(ux)h(system,)j(but)c(runs)e(on)j(o)m(v)m(er)h (20)f(platforms)f(includ-)150 1083 y(ing)d(most)f(ma)5 b(jor)37 b(Unix)f(platforms)h(and)f(Windo)m(ws,)i(and)e(man)m(y)g(kind) g(of)h(devices)g(including)f(iP)-8 b(A)m(Q)150 1193 y(handhelds)29 b(and)h(S/390)h(mainframes.)275 1324 y(GSS)c(is)i(a)g(GNU)g(pro)5 b(ject,)30 b(and)e(is)h(licensed)g(under)e(the)i(GNU)g(General)h (Public)e(License)h(v)m(ersion)h(3)150 1433 y(or)g(later.)150 1658 y Fo(1.1)68 b(Getting)46 b(Started)150 1818 y Fp(This)c(man)m(ual) g(do)s(cumen)m(ts)h(the)f(GSS)g(programming)g(in)m(terface.)79 b(All)43 b(functions)f(and)g(data)h(t)m(yp)s(es)150 1927 y(pro)m(vided)30 b(b)m(y)g(the)h(library)f(are)h(explained.)275 2058 y(The)c(reader)h(is)g(assumed)f(to)i(p)s(ossess)e(basic)h (familiarit)m(y)i(with)d(GSS-API)h(and)f(net)m(w)m(ork)i(program-)150 2168 y(ming)37 b(in)f(C)g(or)h(C)p Fj(++)p Fp(.)59 b(F)-8 b(or)37 b(general)h(GSS-API)e(information,)j(and)d(some)h(programming)f (examples,)150 2277 y(there)31 b(is)f(a)h(guide)f(a)m(v)-5 b(ailable)33 b(online)e(at)g Fj(http://docs.sun.com/db/)o(doc/)o(816-)o (133)o(1)p Fp(.)275 2408 y(This)c(man)m(ual)h(can)g(b)s(e)f(used)g(in)h (sev)m(eral)h(w)m(a)m(ys.)41 b(If)27 b(read)h(from)f(the)h(b)s (eginning)g(to)g(the)g(end,)g(it)h(giv)m(es)150 2518 y(a)38 b(go)s(o)s(d)g(in)m(tro)s(duction)f(in)m(to)i(the)f(library)f (and)g(ho)m(w)h(it)g(can)g(b)s(e)f(used)g(in)h(an)f(application.)64 b(F)-8 b(orw)m(ard)150 2627 y(references)35 b(are)f(included)g(where)g (necessary)-8 b(.)53 b(Later)35 b(on,)g(the)g(man)m(ual)f(can)h(b)s(e)f (used)f(as)i(a)f(reference)150 2737 y(man)m(ual)40 b(to)g(get)h(just)e (the)h(information)g(needed)f(ab)s(out)h(an)m(y)g(particular)g(in)m (terface)h(of)f(the)g(library)-8 b(.)150 2846 y(Exp)s(erienced)35 b(programmers)g(migh)m(t)h(w)m(an)m(t)h(to)f(start)g(lo)s(oking)h(at)f (the)g(examples)g(at)g(the)g(end)f(of)h(the)150 2956 y(man)m(ual,)31 b(and)f(then)g(only)g(read)h(up)e(those)i(parts)f(of)g (the)h(in)m(terface)h(whic)m(h)e(are)h(unclear.)150 3181 y Fo(1.2)68 b(F)-11 b(eatures)150 3340 y Fp(GSS)30 b(migh)m(t)h(ha)m(v) m(e)g(a)g(couple)g(of)f(adv)-5 b(an)m(tages)33 b(o)m(v)m(er)e(other)g (libraries)f(doing)h(a)g(similar)f(job.)150 3492 y(It's)h(F)-8 b(ree)31 b(Soft)m(w)m(are)630 3602 y(An)m(yb)s(o)s(dy)42 b(can)h(use,)j(mo)s(dify)-8 b(,)47 b(and)42 b(redistribute)h(it)h (under)d(the)j(terms)f(of)g(the)g(GNU)630 3711 y(General)31 b(Public)f(License)h(v)m(ersion)g(3)g(or)f(later.)150 3863 y(It's)h(thread-safe)630 3973 y(No)k(global)g(v)-5 b(ariables)34 b(are)h(used)e(and)g(m)m(ultiple)i(library)f(handles)f (and)g(session)i(handles)630 4083 y(ma)m(y)c(b)s(e)f(used)f(in)h (parallell.)150 4235 y(It's)h(in)m(ternationalized)630 4344 y(It)j(handles)g(non-ASCI)s(I)f(names)h(and)g(user)f(visible)i (strings)f(used)g(in)g(the)g(library)g(\(e.g.,)630 4454 y(error)c(messages\))i(can)e(b)s(e)g(translated)h(in)m(to)g(the)g (users')f(language.)150 4606 y(It's)h(p)s(ortable)630 4715 y(It)f(should)g(w)m(ork)g(on)h(all)g(Unix)f(lik)m(e)i(op)s (erating)f(systems,)f(including)g(Windo)m(ws.)150 4940 y Fo(1.3)68 b(GSS-API)43 b(Ov)l(erview)150 5100 y Fp(This)30 b(section)h(describ)s(es)f(GSS-API)g(from)f(a)i(proto)s(col)h(p)s(oin)m (t)e(of)g(view.)275 5230 y(The)g(Generic)i(Securit)m(y)g(Service)g (Application)g(Programming)f(In)m(terface)i(pro)m(vides)e(securit)m(y)h (ser-)150 5340 y(vices)26 b(to)f(calling)i(applications.)40 b(It)25 b(allo)m(ws)h(a)g(comm)m(unicating)g(application)g(to)g(authen) m(ticate)h(the)f(user)p eop end %%Page: 2 6 TeXDict begin 2 5 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(2)150 299 y(asso)s(ciated)29 b(with)e(another)g(application,)j(to)e(delegate)h(righ)m(ts)f(to)g (another)f(application,)j(and)c(to)i(apply)150 408 y(securit)m(y)j (services)g(suc)m(h)f(as)h(con\014den)m(tialit)m(y)h(and)e(in)m(tegrit) m(y)i(on)f(a)g(p)s(er-message)f(basis.)275 539 y(There)f(are)i(four)f (stages)i(to)f(using)f(the)g(GSS-API:)199 669 y(1.)61 b(The)37 b(application)h(acquires)f(a)h(set)g(of)f(creden)m(tials)h (with)f(whic)m(h)g(it)h(ma)m(y)f(pro)m(v)m(e)h(its)g(iden)m(tit)m(y)g (to)330 778 y(other)31 b(pro)s(cesses.)43 b(The)31 b(application's)h (creden)m(tials)h(v)m(ouc)m(h)e(for)g(its)h(global)g(iden)m(tit)m(y)-8 b(,)34 b(whic)m(h)c(ma)m(y)330 888 y(or)g(ma)m(y)h(not)g(b)s(e)f (related)h(to)g(an)m(y)g(lo)s(cal)g(username)f(under)f(whic)m(h)h(it)h (ma)m(y)g(b)s(e)f(running.)199 1018 y(2.)61 b(A)43 b(pair)g(of)h(comm)m (unicating)g(applications)h(establish)e(a)h(join)m(t)g(securit)m(y)g (con)m(text)h(using)e(their)330 1128 y(creden)m(tials.)65 b(The)38 b(securit)m(y)h(con)m(text)h(is)e(a)h(pair)f(of)g(GSS-API)f (data)i(structures)f(that)h(con)m(tain)330 1237 y(shared)29 b(state)i(information,)f(whic)m(h)g(is)f(required)g(in)g(order)h(that)g (p)s(er-message)g(securit)m(y)g(services)330 1347 y(ma)m(y)d(b)s(e)e (pro)m(vided.)39 b(Examples)26 b(of)g(state)h(that)g(migh)m(t)g(b)s(e)e (shared)g(b)s(et)m(w)m(een)i(applications)g(as)f(part)330 1457 y(of)32 b(a)g(securit)m(y)g(con)m(text)h(are)f(cryptographic)g(k)m (eys,)h(and)d(message)j(sequence)f(n)m(um)m(b)s(ers.)43 b(As)31 b(part)330 1566 y(of)e(the)g(establishmen)m(t)h(of)g(a)f (securit)m(y)h(con)m(text,)h(the)f(con)m(text)g(initiator)h(is)e (authen)m(ticated)i(to)f(the)330 1676 y(resp)s(onder,)g(and)g(ma)m(y)h (require)g(that)g(the)g(resp)s(onder)f(is)h(authen)m(ticated)h(in)f (turn.)41 b(The)31 b(initiator)330 1785 y(ma)m(y)d(optionally)g(giv)m (e)h(the)e(resp)s(onder)f(the)h(righ)m(t)h(to)g(initiate)h(further)d (securit)m(y)i(con)m(texts,)i(acting)330 1895 y(as)36 b(an)g(agen)m(t)i(or)e(delegate)i(of)e(the)g(initiator.)59 b(This)36 b(transfer)f(of)h(righ)m(ts)h(is)f(termed)g(delegation,)330 2004 y(and)30 b(is)h(ac)m(hiev)m(ed)i(b)m(y)e(creating)i(a)e(set)g(of)h (creden)m(tials,)g(similar)g(to)g(those)f(used)f(b)m(y)h(the)g (initiating)330 2114 y(application,)h(but)e(whic)m(h)g(ma)m(y)h(b)s(e)e (used)h(b)m(y)g(the)h(resp)s(onder.)330 2244 y(T)-8 b(o)31 b(establish)g(and)e(main)m(tain)j(the)e(shared)g(information)h(that)g (mak)m(es)g(up)e(the)i(securit)m(y)g(con)m(text,)330 2354 y(certain)43 b(GSS-API)f(calls)h(will)g(return)e(a)i(tok)m(en)g (data)g(structure,)i(whic)m(h)d(is)h(an)f(opaque)g(data)330 2463 y(t)m(yp)s(e)26 b(that)h(ma)m(y)g(con)m(tain)g(cryptographically)h (protected)f(data.)40 b(The)25 b(caller)j(of)e(suc)m(h)g(a)g(GSS-API) 330 2573 y(routine)34 b(is)f(resp)s(onsible)g(for)h(transferring)e(the) i(tok)m(en)h(to)f(the)g(p)s(eer)f(application,)j(encapsulated)330 2683 y(if)h(necessary)h(in)f(an)h(application-)h(application)f(proto)s (col.)63 b(On)37 b(receipt)h(of)f(suc)m(h)g(a)h(tok)m(en,)j(the)330 2792 y(p)s(eer)29 b(application)i(should)e(pass)g(it)h(to)g(a)g (corresp)s(onding)f(GSS-API)g(routine)h(whic)m(h)f(will)h(deco)s(de)330 2902 y(the)d(tok)m(en)h(and)f(extract)h(the)f(information,)i(up)s (dating)d(the)h(securit)m(y)g(con)m(text)i(state)g(information)330 3011 y(accordingly)-8 b(.)199 3142 y(3.)61 b(P)m(er-message)38 b(services)e(are)h(in)m(v)m(ok)m(ed)g(to)g(apply)e(either:)53 b(in)m(tegrit)m(y)38 b(and)d(data)i(origin)f(authen)m(ti-)330 3251 y(cation,)d(or)d(con\014den)m(tialit)m(y)-8 b(,)34 b(in)m(tegrit)m(y)f(and)d(data)i(origin)f(authen)m(tication)i(to)f (application)g(data,)330 3361 y(whic)m(h)41 b(are)g(treated)h(b)m(y)f (GSS-API)f(as)h(arbitrary)g(o)s(ctet-strings.)74 b(An)40 b(application)j(transmit-)330 3470 y(ting)f(a)g(message)h(that)f(it)h (wishes)e(to)h(protect)h(will)f(call)h(the)f(appropriate)g(GSS-API)f (routine)330 3580 y(\(gss)p 488 3580 28 4 v 41 w(get)p 649 3580 V 41 w(mic)27 b(or)g(gss)p 1083 3580 V 40 w(wrap\))g(to)h (apply)e(protection,)j(sp)s(ecifying)e(the)g(appropriate)h(securit)m(y) f(con-)330 3689 y(text,)34 b(and)e(send)f(the)h(resulting)h(tok)m(en)g (to)g(the)f(receiving)i(application.)47 b(The)32 b(receiv)m(er)i(will)e (pass)330 3799 y(the)23 b(receiv)m(ed)h(tok)m(en)f(\(and,)h(in)f(the)f (case)i(of)f(data)g(protected)g(b)m(y)g(gss)p 2655 3799 V 40 w(get)p 2815 3799 V 41 w(mic,)i(the)d(accompan)m(ying)330 3909 y(message-data\))40 b(to)e(the)f(corresp)s(onding)f(deco)s(ding)i (routine)f(\(gss)p 2668 3909 V 40 w(v)m(erify)p 2930 3909 V 41 w(mic)h(or)f(gss)p 3385 3909 V 40 w(un)m(wrap\))330 4018 y(to)31 b(remo)m(v)m(e)h(the)f(protection)g(and)f(v)-5 b(alidate)32 b(the)e(data.)199 4148 y(4.)61 b(A)m(t)26 b(the)e(completion)i(of)f(a)g(comm)m(unications)h(session)e(\(whic)m(h) h(ma)m(y)g(extend)g(across)g(sev)m(eral)h(trans-)330 4258 y(p)s(ort)h(connections\),)j(eac)m(h)g(application)f(calls)g(a)f (GSS-API)g(routine)g(to)g(delete)h(the)g(securit)m(y)f(con-)330 4368 y(text.)40 b(Multiple)27 b(con)m(texts)h(ma)m(y)f(also)g(b)s(e)e (used)h(\(either)g(successiv)m(ely)i(or)e(sim)m(ultaneously\))h(within) 330 4477 y(a)k(single)g(comm)m(unications)g(asso)s(ciation,)i(at)e(the) g(option)f(of)h(the)f(applications.)150 4701 y Fo(1.4)68 b(Supp)t(orted)44 b(Platforms)150 4860 y Fp(GSS)30 b(has)g(at)h(some)g (p)s(oin)m(t)f(in)g(time)h(b)s(een)f(tested)h(on)f(the)h(follo)m(wing)h (platforms.)199 4991 y(1.)61 b(Debian)31 b(GNU/Lin)m(ux)g(3.0)g(\(W)-8 b(o)s(o)s(dy\))330 5121 y(GCC)39 b(2.95.4)j(and)c(GNU)i(Mak)m(e.)69 b(This)39 b(is)g(the)h(main)f(dev)m(elopmen)m(t)i(platform.)68 b Fj(alphaev67-)330 5230 y(unknown-linux-gnu)p Fp(,)140 b Fj(alphaev6-unknown-linux-gnu)o Fp(,)f Fj(arm-unknown-linux-gnu)p Fp(,)330 5340 y Fj(hppa-unknown-linux-gnu)p Fp(,)163 b Fj(hppa64-unknown-linux-gnu)o Fp(,)g Fj(i686-pc-linux-gnu)p Fp(,)p eop end %%Page: 3 7 TeXDict begin 3 6 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(3)330 299 y Fj(ia64-unknown-linux-gnu)p Fp(,)91 b Fj(m68k-unknown-linux-gnu)p Fp(,)h Fj(mips-unknown-linux-gnu) p Fp(,)330 408 y Fj(mipsel-unknown-linux-gnu)o Fp(,)68 b Fj(powerpc-unknown-linux-gn)o(u)p Fp(,)g Fj(s390-ibm-linux-gnu)p Fp(,)330 518 y Fj(sparc-unknown-linux-gnu)p Fp(.)199 652 y(2.)61 b(Debian)31 b(GNU/Lin)m(ux)g(2.1)330 785 y(GCC)f(2.95.1)j(and)c(GNU)i(Mak)m(e.)43 b Fj(armv4l-unknown-linux-gn)o (u)p Fp(.)199 919 y(3.)61 b(T)-8 b(ru64)30 b(UNIX)330 1052 y(T)-8 b(ru64)32 b(UNIX)h(C)f(compiler)h(and)f(T)-8 b(ru64)33 b(Mak)m(e.)48 b Fj(alphaev67-dec-osf5.1)p Fp(,)28 b Fj(alphaev68-dec-)330 1162 y(osf5.1)p Fp(.)199 1295 y(4.)61 b(SuSE)29 b(Lin)m(ux)h(7.1)330 1429 y(GCC)47 b(2.96)j(and)d(GNU)i(Mak)m(e.)95 b Fj(alphaev6-unknown-linux-)o(gnu)o Fp(,)47 b Fj(alphaev67-unknown-)330 1539 y(linux-gnu)p Fp(.)199 1672 y(5.)61 b(SuSE)29 b(Lin)m(ux)h(7.2a)330 1806 y(GCC)g(3.0)h(and)f(GNU)h(Mak)m(e.)42 b Fj(ia64-unknown-linux-gnu) p Fp(.)199 1939 y(6.)61 b(RedHat)31 b(Lin)m(ux)f(7.2)330 2073 y(GCC)47 b(2.96)j(and)d(GNU)i(Mak)m(e.)95 b Fj (alphaev6-unknown-linux-)o(gnu)o Fp(,)47 b Fj(alphaev67-unknown-)330 2182 y(linux-gnu)p Fp(,)28 b Fj(ia64-unknown-linux-gnu)p Fp(.)199 2316 y(7.)61 b(RedHat)31 b(Lin)m(ux)f(8.0)330 2450 y(GCC)g(3.2)h(and)f(GNU)h(Mak)m(e.)42 b Fj(i686-pc-linux-gnu)p Fp(.)199 2583 y(8.)61 b(RedHat)31 b(Adv)-5 b(anced)30 b(Serv)m(er)h(2.1)330 2717 y(GCC)f(2.96)i(and)e(GNU)h(Mak)m(e.)42 b Fj(i686-pc-linux-gnu)p Fp(.)199 2850 y(9.)61 b(Slac)m(kw)m(are)32 b(Lin)m(ux)e(8.0.01)330 2984 y(GCC)g(2.95.3)j(and)c(GNU)i(Mak)m(e.)43 b Fj(i686-pc-linux-gnu)p Fp(.)154 3117 y(10.)61 b(Mandrak)m(e)31 b(Lin)m(ux)f(9.0)330 3251 y(GCC)g(3.2)h(and)f(GNU)h(Mak)m(e.)42 b Fj(i686-pc-linux-gnu)p Fp(.)154 3384 y(11.)61 b(IRIX)30 b(6.5)330 3518 y(MIPS)g(C)g(compiler,)h(IRIX)f(Mak)m(e.)42 b Fj(mips-sgi-irix6.5)p Fp(.)154 3652 y(12.)61 b(AIX)30 b(4.3.2)330 3785 y(IBM)h(C)f(for)g(AIX)g(compiler,)i(AIX)e(Mak)m(e.)42 b Fj(rs6000-ibm-aix4.3.2.0)p Fp(.)154 3919 y(13.)61 b(Microsoft)32 b(Windo)m(ws)e(2000)i(\(Cygwin\))330 4052 y(GCC)e(3.2,)i(GNU)f(mak)m (e.)41 b Fj(i686-pc-cygwin)p Fp(.)154 4186 y(14.)61 b(HP-UX)31 b(11)330 4319 y(HP-UX)g(C)f(compiler)h(and)f(HP)g(Mak)m(e.)42 b Fj(ia64-hp-hpux11.22)p Fp(,)26 b Fj(hppa2.0w-hp-hpux11.11)p Fp(.)154 4453 y(15.)61 b(SUN)30 b(Solaris)h(2.8)330 4587 y(Sun)e(W)-8 b(orkShop)30 b(Compiler)g(C)g(6.0)i(and)d(SUN)i(Mak)m(e.) 42 b Fj(sparc-sun-solaris2.8)p Fp(.)154 4720 y(16.)61 b(NetBSD)32 b(1.6)330 4854 y(GCC)85 b(2.95.3)j(and)d(GNU)h(Mak)m(e.)208 b Fj(alpha-unknown-netbsd1.6)p Fp(,)94 b Fj(i386-unknown-)330 4963 y(netbsdelf1.6)p Fp(.)154 5097 y(17.)61 b(Op)s(enBSD)29 b(3.1)j(and)e(3.2)330 5230 y(GCC)79 b(2.95.3)j(and)e(GNU)g(Mak)m(e.)191 b Fj(alpha-unknown-openbsd3.)o(1)p Fp(,)87 b Fj(i386-unknown-)330 5340 y(openbsd3.1)p Fp(.)p eop end %%Page: 4 8 TeXDict begin 4 7 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(4)154 299 y(18.)61 b(F)-8 b(reeBSD)32 b(4.7)330 432 y(GCC)79 b(2.95.4)j(and)e(GNU)g(Mak)m(e.)191 b Fj(alpha-unknown-freebsd4.)o(7)p Fp(,)87 b Fj(i386-unknown-)330 542 y(freebsd4.7)p Fp(.)154 675 y(19.)61 b(Cross)30 b(compiled)h(to)g (uClin)m(ux/uClib)s(c)e(on)h(Motorola)j(Cold\014re.)330 808 y(GCC)d(3.4)h(and)f(GNU)h(Mak)m(e)h Fj(m68k-uclinux-elf)p Fp(.)275 965 y(If)d(y)m(ou)i(use)f(GSS)g(on,)g(or)h(p)s(ort)f(GSS)f (to,)j(a)e(new)g(platform)h(please)g(rep)s(ort)f(it)g(to)i(the)e (author.)150 1195 y Fo(1.5)68 b(Commercial)47 b(Supp)t(ort)150 1355 y Fp(Commercial)36 b(supp)s(ort)d(is)i(a)m(v)-5 b(ailable)37 b(for)e(users)f(of)h(GNU)g(GSS.)f(The)h(kind)f(of)h(supp)s (ort)e(that)i(can)h(b)s(e)150 1464 y(purc)m(hased)30 b(ma)m(y)g(include:)225 1598 y Fn(\017)60 b Fp(Implemen)m(t)31 b(new)e(features.)41 b(Suc)m(h)30 b(as)h(a)g(new)e(GSS-API)h(mec)m (hanism.)225 1731 y Fn(\017)60 b Fp(P)m(ort)27 b(GSS)e(to)i(new)e (platforms.)39 b(This)26 b(could)g(include)f(p)s(orting)h(to)h(an)e(em) m(b)s(edded)g(platforms)h(that)330 1841 y(ma)m(y)31 b(need)f(memory)g (or)h(size)g(optimization.)225 1974 y Fn(\017)60 b Fp(In)m(tegrating)32 b(GSS)e(as)g(a)h(securit)m(y)g(en)m(vironmen)m(t)g(in)f(y)m(our)g (existing)i(pro)5 b(ject.)225 2107 y Fn(\017)60 b Fp(System)30 b(design)g(of)h(comp)s(onen)m(ts)f(related)i(to)f(GSS-API.)275 2264 y(If)e(y)m(ou)i(are)g(in)m(terested,)h(please)f(write)f(to:)150 2397 y Fj(Simon)46 b(Josefsson)g(Datakonsult)e(AB)150 2507 y(Hagagatan)h(24)150 2617 y(113)i(47)g(Stockholm)150 2726 y(Sweden)150 2945 y(E-mail:)f(simon@josefsson.org)275 3079 y Fp(If)29 b(y)m(our)g(compan)m(y)h(pro)m(vides)f(supp)s(ort)f (related)i(to)h(GNU)f(GSS)e(and)h(w)m(ould)h(lik)m(e)g(to)h(b)s(e)d (men)m(tioned)150 3188 y(here,)i(con)m(tact)j(the)e(author)f(\(see)h (Section)g(1.7)h([Bug)f(Rep)s(orts],)f(page)h(5\).)150 3418 y Fo(1.6)68 b(Do)l(wnloading)46 b(and)f(Installing)150 3578 y Fp(The)30 b(pac)m(k)-5 b(age)32 b(can)f(b)s(e)f(do)m(wnloaded)g (from)g(sev)m(eral)i(places,)f(including:)275 3711 y Fj(ftp://ftp.gnu.org/gnu/g)o(ss/)275 3844 y Fp(The)23 b(latest)j(v)m(ersion)f(is)g(stored)f(in)g(a)h(\014le,)h(e.g.,)h(`)p Fj(gss-1.0.2.tar.gz)p Fp(')21 b(where)j(the)g(`)p Fj(1.0.2)p Fp(')g(indicate)150 3954 y(the)31 b(highest)f(v)m(ersion)h(n)m(um)m(b)s (er.)275 4087 y(The)i(pac)m(k)-5 b(age)35 b(is)f(then)f(extracted,)j (con\014gured)c(and)h(built)h(lik)m(e)g(man)m(y)g(other)g(pac)m(k)-5 b(ages)35 b(that)f(use)150 4197 y(Auto)s(conf.)54 b(F)-8 b(or)36 b(detailed)g(information)f(on)g(con\014guring)f(and)g(building) g(it,)j(refer)e(to)g(the)g(`)p Fj(INSTALL)p Fp(')150 4306 y(\014le)30 b(that)h(is)g(part)f(of)h(the)f(distribution)g(arc)m (hiv)m(e.)275 4440 y(Here)j(is)f(an)h(example)g(terminal)g(session)g (that)g(do)m(wnloads,)h(con\014gures,)f(builds)e(and)h(installs)i(the) 150 4549 y(pac)m(k)-5 b(age.)43 b(Y)-8 b(ou)31 b(will)f(need)g(a)h(few) f(basic)h(to)s(ols,)h(suc)m(h)e(as)g(`)p Fj(sh)p Fp(',)h(`)p Fj(make)p Fp(')e(and)h(`)p Fj(cc)p Fp('.)390 4682 y Fj($)47 b(wget)g(-q)g(ftp://ftp.gnu.org/gnu/gss)o(/gss)o(-1.0)o(.2.)o(tar.)o (gz)390 4792 y($)g(tar)g(xfz)g(gss-1.0.2.tar.gz)390 4902 y($)g(cd)h(gss-1.0.2/)390 5011 y($)f(./configure)390 5121 y(...)390 5230 y($)g(make)390 5340 y(...)p eop end %%Page: 5 9 TeXDict begin 5 8 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(5)390 299 y Fj($)47 b(make)g(install)390 408 y(...)275 553 y Fp(After)30 b(that)h(GSS)f(should)f(b)s(e)h(prop)s (erly)f(installed)i(and)f(ready)g(for)g(use.)150 801 y Fo(1.7)68 b(Bug)45 b(Rep)t(orts)150 960 y Fp(If)30 b(y)m(ou)h(think)f(y)m(ou)g(ha)m(v)m(e)i(found)d(a)i(bug)e(in)h(GSS,)g (please)i(in)m(v)m(estigate)h(it)e(and)f(rep)s(ort)g(it.)225 1105 y Fn(\017)60 b Fp(Please)28 b(mak)m(e)f(sure)f(that)i(the)e(bug)g (is)h(really)g(in)g(GSS,)f(and)g(preferably)g(also)i(c)m(hec)m(k)g (that)f(it)g(hasn't)330 1215 y(already)k(b)s(een)f(\014xed)f(in)h(the)h (latest)h(v)m(ersion.)225 1354 y Fn(\017)60 b Fp(Y)-8 b(ou)31 b(ha)m(v)m(e)g(to)h(send)d(us)h(a)h(test)g(case)g(that)g(mak)m (es)g(it)g(p)s(ossible)f(for)g(us)g(to)h(repro)s(duce)e(the)i(bug.)225 1494 y Fn(\017)60 b Fp(Y)-8 b(ou)29 b(also)h(ha)m(v)m(e)g(to)g(explain) f(what)g(is)g(wrong;)g(if)g(y)m(ou)g(get)h(a)f(crash,)h(or)f(if)f(the)h (results)g(prin)m(ted)g(are)330 1603 y(not)36 b(go)s(o)s(d)g(and)g(in)g (that)g(case,)j(in)d(what)g(w)m(a)m(y)-8 b(.)59 b(Mak)m(e)38 b(sure)d(that)i(the)f(bug)g(rep)s(ort)f(includes)h(all)330 1713 y(information)31 b(y)m(ou)f(w)m(ould)h(need)f(to)h(\014x)f(this)g (kind)f(of)i(bug)f(for)g(someone)h(else.)275 1888 y(Please)36 b(mak)m(e)f(an)g(e\013ort)h(to)f(pro)s(duce)f(a)h(self-con)m(tained)i (rep)s(ort,)f(with)e(something)i(de\014nite)e(that)150 1997 y(can)29 b(b)s(e)g(tested)g(or)g(debugged.)40 b(V)-8 b(ague)31 b(queries)e(or)g(piecemeal)h(messages)g(are)g(di\016cult)f (to)h(act)g(on)f(and)150 2107 y(don't)h(help)g(the)h(dev)m(elopmen)m(t) h(e\013ort.)275 2251 y(If)e(y)m(our)g(bug)g(rep)s(ort)g(is)g(go)s(o)s (d,)h(w)m(e)g(will)g(do)f(our)g(b)s(est)g(to)i(help)e(y)m(ou)g(to)i (get)f(a)g(corrected)h(v)m(ersion)f(of)150 2361 y(the)j(soft)m(w)m (are;)j(if)d(the)g(bug)f(rep)s(ort)g(is)h(p)s(o)s(or,)g(w)m(e)g(w)m (on't)g(do)g(an)m(ything)g(ab)s(out)g(it)g(\(apart)g(from)f(asking)150 2471 y(y)m(ou)e(to)g(send)e(b)s(etter)i(bug)f(rep)s(orts\).)275 2615 y(If)19 b(y)m(ou)i(think)f(something)h(in)f(this)g(man)m(ual)h(is) f(unclear,)j(or)d(do)m(wnrigh)m(t)h(incorrect,)i(or)e(if)f(the)h (language)150 2725 y(needs)30 b(to)h(b)s(e)f(impro)m(v)m(ed,)h(please)g (also)g(send)f(a)h(note.)275 2870 y(Send)e(y)m(our)h(bug)g(rep)s(ort)g (to:)1567 2979 y(`)p Fj(bug-gss@gnu.org)p Fp(')150 3227 y Fo(1.8)68 b(Con)l(tributing)150 3386 y Fp(If)25 b(y)m(ou)h(w)m(an)m (t)g(to)g(submit)f(a)h(patc)m(h)g(for)f(inclusion)h({)f(from)h(solv)m (e)g(a)g(t)m(yp)s(o)g(y)m(ou)g(disco)m(v)m(ered,)i(up)c(to)i(adding)150 3496 y(supp)s(ort)38 b(for)h(a)h(new)e(feature)i({)g(y)m(ou)g(should)e (submit)h(it)h(as)f(a)h(bug)f(rep)s(ort)f(\(see)j(Section)f(1.7)g([Bug) 150 3605 y(Rep)s(orts],)32 b(page)g(5\).)44 b(There)30 b(are)i(some)g(things)f(that)h(y)m(ou)f(can)h(do)f(to)h(increase)g(the) f(c)m(hances)h(for)f(it)h(to)150 3715 y(b)s(e)e(included)f(in)h(the)h (o\016cial)h(pac)m(k)-5 b(age.)275 3860 y(Unless)41 b(y)m(our)g(patc)m (h)h(is)f(v)m(ery)h(small)g(\(sa)m(y)-8 b(,)46 b(under)40 b(10)i(lines\))g(w)m(e)f(require)g(that)h(y)m(ou)g(assign)g(the)150 3969 y(cop)m(yrigh)m(t)d(of)f(y)m(our)f(w)m(ork)h(to)g(the)g(F)-8 b(ree)39 b(Soft)m(w)m(are)f(F)-8 b(oundation.)63 b(This)37 b(is)g(to)i(protect)f(the)g(freedom)150 4079 y(of)44 b(the)g(pro)5 b(ject.)81 b(If)43 b(y)m(ou)h(ha)m(v)m(e)h(not)f(already) h(signed)e(pap)s(ers,)j(w)m(e)f(will)f(send)f(y)m(ou)h(the)g(necessary) 150 4188 y(information)31 b(when)e(y)m(ou)i(submit)e(y)m(our)i(con)m (tribution.)275 4333 y(F)-8 b(or)33 b(con)m(tributions)h(that)f(do)s (esn't)g(consist)g(of)g(actual)i(programming)d(co)s(de,)i(the)g(only)f (guidelines)150 4443 y(are)e(common)f(sense.)41 b(Use)31 b(it.)275 4587 y(F)-8 b(or)31 b(co)s(de)f(con)m(tributions,)h(a)g(n)m (um)m(b)s(er)e(of)i(st)m(yle)g(guides)g(will)f(help)g(y)m(ou:)225 4732 y Fn(\017)60 b Fp(Co)s(ding)32 b(St)m(yle.)48 b(F)-8 b(ollo)m(w)34 b(the)f(GNU)g(Standards)e(do)s(cumen)m(t)i(\(see)g Fn(h)p Fp(unde\014ned)p Fn(i)e Fp([top],)j(page)f Fn(h)p Fp(un-)330 4842 y(de\014ned)p Fn(i)p Fp(\).)330 4981 y(If)42 b(y)m(ou)h(normally)f(co)s(de)h(using)f(another)g(co)s(ding)h (standard,)i(there)d(is)h(no)f(problem,)j(but)d(y)m(ou)330 5091 y(should)h(use)g(`)p Fj(indent)p Fp(')g(to)i(reformat)f(the)g(co)s (de)g(\(see)h Fn(h)p Fp(unde\014ned)p Fn(i)d Fp([top],)48 b(page)d Fn(h)p Fp(unde\014ned)p Fn(i)p Fp(\))330 5200 y(b)s(efore)30 b(submitting)g(y)m(our)g(w)m(ork.)225 5340 y Fn(\017)60 b Fp(Use)31 b(the)f(uni\014ed)f(di\013)h(format)h(`)p Fj(diff)f(-u)p Fp('.)p eop end %%Page: 6 10 TeXDict begin 6 9 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(6)225 299 y Fn(\017)60 b Fp(Return)32 b(errors.)47 b(No)33 b(reason)g(whatso)s(ev)m(er)g(should) f(ab)s(ort)h(the)g(execution)g(of)g(the)g(library)-8 b(.)48 b(Ev)m(en)330 408 y(memory)27 b(allo)s(cation)i(errors,)f(e.g.) 41 b(when)26 b(mallo)s(c)i(return)e(NULL,)h(should)f(w)m(ork)h (although)h(result)330 518 y(in)i(an)g(error)g(co)s(de.)225 653 y Fn(\017)60 b Fp(Design)38 b(with)g(thread)f(safet)m(y)i(in)e (mind.)62 b(Don't)38 b(use)g(global)g(v)-5 b(ariables.)64 b(Don't)38 b(ev)m(en)g(write)g(to)330 762 y(p)s(er-handle)27 b(global)j(v)-5 b(ariables)28 b(unless)g(the)g(do)s(cumen)m(ted)g(b)s (eha)m(viour)g(of)g(the)g(function)g(y)m(ou)h(write)330 872 y(is)h(to)i(write)e(to)h(the)g(p)s(er-handle)e(global)j(v)-5 b(ariable.)225 1006 y Fn(\017)60 b Fp(Av)m(oid)38 b(using)f(the)g(C)g (math)g(library)-8 b(.)61 b(It)37 b(causes)h(problems)e(for)h(em)m(b)s (edded)f(implemen)m(tations,)330 1116 y(and)30 b(in)g(most)h (situations)g(it)g(is)f(v)m(ery)h(easy)g(to)g(a)m(v)m(oid)h(using)e (it.)225 1250 y Fn(\017)60 b Fp(Do)s(cumen)m(t)23 b(y)m(our)f (functions.)37 b(Use)23 b(commen)m(ts)g(b)s(efore)f(eac)m(h)h(function) f(headers,)h(that,)i(if)d(prop)s(erly)330 1360 y(formatted,)31 b(are)g(extracted)h(in)m(to)f(T)-8 b(exinfo)31 b(man)m(uals)f(and)g (GTK-DOC)g(w)m(eb)h(pages.)225 1494 y Fn(\017)60 b Fp(Supply)29 b(a)h(ChangeLog)h(and)f(NEWS)g(en)m(tries,)i(where)e(appropriate.)150 1727 y Fo(1.9)68 b(Planned)45 b(F)-11 b(eatures)150 1886 y Fp(This)33 b(is)i(also)g(kno)m(wn)e(as)i(the)f(\\to)s(do)h(list".)53 b(If)34 b(y)m(ou)h(lik)m(e)g(to)g(start)g(w)m(orking)f(on)g(an)m (ything,)i(please)f(let)150 1996 y(me)30 b(kno)m(w)h(so)f(w)m(ork)h (duplication)g(can)f(b)s(e)g(a)m(v)m(oided.)225 2130 y Fn(\017)60 b Fp(Supp)s(ort)43 b(non-blo)s(c)m(king)j(mo)s(de.)85 b(This)44 b(w)m(ould)h(b)s(e)g(an)g(API)g(extension.)86 b(It)45 b(could)h(w)m(ork)f(b)m(y)330 2240 y(forking)39 b(a)g(pro)s(cess)f(and)g(in)m(terface)j(to)e(it,)j(or)d(b)m(y)f(using)h (a)g(user-sp)s(eci\014c)f(daemon.)66 b(E.g.,)42 b(h)c(=)330 2350 y(ST)-8 b(AR)g(T\(accept)p 924 2350 28 4 v 42 w(sec)p 1082 2350 V 40 w(con)m(text\(...\)\),)35 b(FINISHED\(h\),)c(ret)f(=)g (FINISH\(h\),)h(ABOR)-8 b(T\(h\).)225 2484 y Fn(\017)60 b Fp(Supp)s(ort)28 b(loadable)k(mo)s(dules)d(via)i(dlop)s(en,)f(a'la)i (Solaris)f(GSS.)225 2619 y Fn(\017)60 b Fp(P)m(ort)31 b(to)g(Cyclone?)41 b(CCured?)p eop end %%Page: 7 11 TeXDict begin 7 10 bop 150 -116 a Fp(Chapter)30 b(2:)41 b(Preparation)2619 b(7)150 299 y Fm(2)80 b(Preparation)150 540 y Fp(T)-8 b(o)43 b(use)g(GSS,)f(y)m(ou)h(ha)m(v)m(e)h(to)g(p)s (erform)d(some)i(c)m(hanges)h(to)f(y)m(our)g(sources)g(and)f(the)h (build)f(system.)150 649 y(The)d(necessary)h(c)m(hanges)h(are)f(small)g (and)f(explained)g(in)h(the)f(follo)m(wing)i(sections.)70 b(A)m(t)40 b(the)g(end)f(of)150 759 y(this)31 b(c)m(hapter,)i(it)f(is)f (describ)s(ed)f(ho)m(w)i(the)f(library)g(is)h(initialized,)h(and)e(ho)m (w)g(the)h(requiremen)m(ts)f(of)h(the)150 869 y(library)e(are)h(v)m (eri\014ed.)275 1005 y(A)c(faster)h(w)m(a)m(y)g(to)h(\014nd)d(out)h(ho) m(w)h(to)g(adapt)g(y)m(our)f(application)i(for)e(use)g(with)g(GSS)g(ma) m(y)h(b)s(e)f(to)h(lo)s(ok)150 1115 y(at)j(the)g(examples)g(at)g(the)f (end)g(of)h(this)f(man)m(ual.)150 1351 y Fo(2.1)68 b(Header)150 1510 y Fp(All)38 b(standard)e(in)m(terfaces)j(\(data)f(t)m(yp)s(es)f (and)g(functions\))g(of)g(the)h(o\016cial)g(GSS)f(API)g(are)g (de\014ned)f(in)150 1620 y(the)g(header)g(\014le)g(`)p Fj(gss/api.h)p Fp('.)56 b(The)35 b(\014le)h(is)g(tak)m(en)h(v)m (erbatim)g(from)f(the)g(RF)m(C)g(\(after)h(correcting)h(a)150 1729 y(few)27 b(t)m(yp)s(os\))h(where)f(it)i(is)e(kno)m(wn)g(as)h(`)p Fj(gssapi.h)p Fp('.)38 b(Ho)m(w)m(ev)m(er,)30 b(to)f(b)s(e)e(able)h(to) g(co-exist)i(gracefully)e(with)150 1839 y(other)j(GSS-API)e(implemen)m (tation,)k(the)d(name)h(`)p Fj(gssapi.h)p Fp(')d(w)m(as)j(c)m(hanged.) 275 1976 y(The)37 b(header)g(\014le)h(`)p Fj(gss.h)p Fp(')f(includes)g(`)p Fj(gss/api.h)p Fp(',)h(and)f(declares)i(a)f(few)f (non-standard)g(exten-)150 2085 y(sions)24 b(\(b)m(y)f(including)h(`)p Fj(gss/ext.h)p Fp('\),)f(tak)m(es)i(care)g(of)f(including)f(header)h (\014les)f(related)i(to)f(all)h(supp)s(orted)150 2195 y(mec)m(hanisms)35 b(\(e.g.,)j(`)p Fj(gss/krb5.h)p Fp('\))33 b(and)i(\014nally)g(adds)f(C)p Fj(++)g Fp(namespace)i(protection)g(of)g (all)g(de\014ni-)150 2304 y(tions.)60 b(Therefore,)39 b(including)d(`)p Fj(gss.h)p Fp(')g(in)h(y)m(our)g(pro)5 b(ject)37 b(is)g(recommended)f(o)m(v)m(er)i(`)p Fj(gss/api.h)p Fp('.)58 b(If)150 2414 y(using)30 b(`)p Fj(gss.h)p Fp(')f(instead)i(of) f(`)p Fj(gss/api.h)p Fp(')f(causes)i(problems,)f(it)g(should)g(b)s(e)g (regarded)g(a)h(bug.)275 2551 y(Y)-8 b(ou)30 b(m)m(ust)f(include)h (either)g(\014le)g(in)g(all)g(programs)g(using)f(the)h(library)-8 b(,)30 b(either)g(directly)h(or)f(through)150 2660 y(some)h(other)f (header)h(\014le,)f(lik)m(e)i(this:)390 2797 y Fj(#include)46 b()275 2934 y Fp(The)34 b(name)h(space)g(of)g(GSS)f(is)h Fj(gss_*)e Fp(for)i(function)f(names,)i Fj(gss_*)d Fp(for)i(data)g(t)m (yp)s(es)g(and)f Fj(GSS_*)150 3043 y Fp(for)d(other)h(sym)m(b)s(ols.)44 b(In)31 b(addition)g(the)h(same)g(name)g(pre\014xes)e(with)i(one)f (prep)s(ended)f(underscore)h(are)150 3153 y(reserv)m(ed)g(for)f(in)m (ternal)h(use)f(and)g(should)f(nev)m(er)i(b)s(e)e(used)h(b)m(y)g(an)h (application.)275 3290 y(Eac)m(h)i(supp)s(orted)e(GSS)h(mec)m(hanism)h (ma)m(y)g(w)m(an)m(t)h(to)f(exp)s(ose)g(mec)m(hanism)g(sp)s(eci\014c)g (functionalit)m(y)-8 b(,)150 3399 y(and)28 b(can)h(do)g(so)f(through)g (one)h(or)g(more)g(header)f(\014les)h(under)e(the)i(`)p Fj(gss/)p Fp(')f(directory)-8 b(.)41 b(The)28 b(Kerb)s(eros)g(5)150 3509 y(mec)m(hanism)h(uses)e(the)i(\014le)f(`)p Fj(gss/krb5.h)p Fp(',)f(but)h(again,)i(it)e(is)h(included)e(\(with)i(C)p Fj(++)e Fp(namespace)i(\014xes\))150 3618 y(from)h(`)p Fj(gss.h)p Fp('.)150 3854 y Fo(2.2)68 b(Initialization)150 4014 y Fp(GSS)30 b(do)s(es)g(not)g(need)g(to)i(b)s(e)d(initialized)j(b) s(efore)e(it)h(can)g(b)s(e)f(used.)275 4150 y(In)k(order)h(to)i(tak)m (e)g(adv)-5 b(an)m(tage)38 b(of)d(the)h(in)m(ternationalisation)j (features)c(in)h(GSS,)f(e.g.)57 b(translated)150 4260 y(error)21 b(messages,)k(the)d(application)g(m)m(ust)g(set)g(the)g (curren)m(t)f(lo)s(cale)i(using)e Fj(setlocale\(\))e Fp(b)s(efore)i(calling,)150 4370 y(e.g.,)30 b Fj (gss_display_status\(\))p Fp(.)k(This)27 b(is)g(t)m(ypically)j(done)d (in)g Fj(main\(\))f Fp(as)i(in)f(the)h(follo)m(wing)h(example.)390 4506 y Fj(#include)46 b()390 4616 y(#include)g()390 4726 y(...)485 4835 y(setlocale)g(\(LC_ALL,)f(""\);)150 5071 y Fo(2.3)68 b(V)-11 b(ersion)45 b(Chec)l(k)150 5230 y Fp(It)e(is)g(often)h(desirable)f(to)g(c)m(hec)m(k)i(that)f(the)f(v)m (ersion)g(of)g(GSS)g(used)f(is)h(indeed)f(one)i(whic)m(h)e(\014ts)h (all)150 5340 y(requiremen)m(ts.)f(Ev)m(en)31 b(with)g(binary)f (compatibilit)m(y)j(new)d(features)h(ma)m(y)g(ha)m(v)m(e)h(b)s(een)e (in)m(tro)s(duced)h(but)p eop end %%Page: 8 12 TeXDict begin 8 11 bop 150 -116 a Fp(Chapter)30 b(2:)41 b(Preparation)2619 b(8)150 299 y(due)31 b(to)i(problem)e(with)h(the)g (dynamic)f(link)m(er)i(an)e(old)h(v)m(ersion)h(is)f(actually)h(used.)45 b(So)31 b(y)m(ou)i(ma)m(y)f(w)m(an)m(t)150 408 y(to)i(c)m(hec)m(k)g (that)g(the)f(v)m(ersion)h(is)f(ok)-5 b(a)m(y)34 b(righ)m(t)f(after)h (program)f(startup.)48 b(The)32 b(function)h(is)g(called)h Fj(gss_)150 518 y(check_version\(\))20 b Fp(and)k(is)g(describ)s(ed)f (formally)i(in)e(See)i(Chapter)e(4)i([Extended)f(GSS)f(API],)i(page)g (57.)275 653 y(The)i(normal)h(w)m(a)m(y)h(to)f(use)g(the)g(function)f (is)h(to)h(put)e(something)h(similar)h(to)f(the)g(follo)m(wing)i(early) e(in)150 762 y(y)m(our)i Fj(main\(\))p Fp(:)390 897 y Fj(#include)46 b()390 1006 y(...)485 1116 y(if)i (\(!gss_check_version)42 b(\(GSS_VERSION\)\))581 1225 y({)676 1335 y(printf)k(\("gss_check_version\(\))c(failed:\\n")1058 1445 y("Header)k(file)h(incompatible)d(with)j(shared)f(library.\\n"\);) 676 1554 y(exit\(EXIT_FAILURE\);)581 1664 y(})150 1896 y Fo(2.4)68 b(Building)45 b(the)g(source)150 2056 y Fp(If)35 b(y)m(ou)g(w)m(an)m(t)h(to)g(compile)h(a)e(source)h(\014le)f(that)h (includes)f(the)g(`)p Fj(gss.h)p Fp(')f(header)h(\014le,)i(y)m(ou)f(m)m (ust)f(mak)m(e)150 2165 y(sure)24 b(that)i(the)f(compiler)g(can)h (\014nd)d(it)j(in)e(the)h(directory)h(hierarc)m(h)m(y)-8 b(.)40 b(This)24 b(is)h(accomplished)g(b)m(y)g(adding)150 2275 y(the)37 b(path)g(to)h(the)f(directory)g(in)g(whic)m(h)g(the)g (header)g(\014le)g(is)g(lo)s(cated)h(to)g(the)f(compilers)g(include)g (\014le)150 2384 y(searc)m(h)31 b(path)f(\(via)h(the)g(`)p Fj(-I)p Fp(')f(option\).)275 2519 y(Ho)m(w)m(ev)m(er,)h(the)f(path)f (to)h(the)g(include)f(\014le)h(is)f(determined)g(at)h(the)g(time)g(the) f(source)h(is)f(con\014gured.)150 2628 y(T)-8 b(o)32 b(solv)m(e)h(this)f(problem,)f(GSS)g(uses)g(the)h(external)h(pac)m(k)-5 b(age)33 b Fj(pkg-config)c Fp(that)j(kno)m(ws)g(the)g(path)f(to)150 2738 y(the)g(include)g(\014le)g(and)f(other)i(con\014guration)f (options.)43 b(The)30 b(options)h(that)h(need)f(to)g(b)s(e)g(added)f (to)i(the)150 2848 y(compiler)37 b(in)m(v)m(o)s(cation)i(at)e(compile)g (time)h(are)e(output)h(b)m(y)f(the)h(`)p Fj(--cflags)p Fp(')e(option)h(to)i Fj(pkg-config)150 2957 y(gss)p Fp(.)i(The)30 b(follo)m(wing)i(example)f(sho)m(ws)f(ho)m(w)g(it)h(can)g(b)s(e)e(used) h(at)h(the)g(command)f(line:)390 3092 y Fj(gcc)47 b(-c)g(foo.c)f (`pkg-config)f(gss)i(--cflags`)275 3226 y Fp(Adding)35 b(the)g(output)h(of)g(`)p Fj(pkg-config)27 b(gss)j(--cflags)p Fp(')k(to)i(the)g(compilers)g(command)g(line)g(will)150 3336 y(ensure)30 b(that)h(the)f(compiler)h(can)g(\014nd)e(the)h(`)p Fj(gss.h)p Fp(')g(header)g(\014le.)275 3470 y(A)23 b(similar)g(problem) g(o)s(ccurs)g(when)f(linking)h(the)g(program)g(with)g(the)g(library)-8 b(.)38 b(Again,)26 b(the)d(compiler)150 3580 y(has)j(to)g(\014nd)f(the) h(library)f(\014les.)40 b(F)-8 b(or)26 b(this)g(to)h(w)m(ork,)g(the)f (path)g(to)h(the)f(library)f(\014les)h(has)g(to)h(b)s(e)e(added)g(to) 150 3689 y(the)32 b(library)g(searc)m(h)h(path)f(\(via)h(the)f(`)p Fj(-L)p Fp(')g(option\).)47 b(F)-8 b(or)32 b(this,)h(the)f(option)h(`)p Fj(--libs)p Fp(')e(to)i Fj(pkg-config)150 3799 y(gss)44 b Fp(can)g(b)s(e)g(used.)83 b(F)-8 b(or)45 b(con)m(v)m(enience,)50 b(this)45 b(option)g(also)g(outputs)f(all)i(other)f(options)f(that)i (are)150 3909 y(required)32 b(to)i(link)g(the)f(program)g(with)g(the)h (GSS)e(libarary)i(\(for)f(instance,)i(the)e(`)p Fj(-lshishi)p Fp(')f(option\).)150 4018 y(The)e(example)h(sho)m(ws)f(ho)m(w)g(to)i (link)e(`)p Fj(foo.o)p Fp(')f(with)h(GSS)g(in)m(to)h(a)g(program)f Fj(foo)p Fp(.)390 4153 y Fj(gcc)47 b(-o)g(foo)g(foo.o)f(`pkg-config)f (gss)i(--libs`)275 4287 y Fp(Of)29 b(course)i(y)m(ou)f(can)h(also)g (com)m(bine)g(b)s(oth)e(examples)i(to)g(a)g(single)f(command)g(b)m(y)h (sp)s(ecifying)f(b)s(oth)150 4397 y(options)h(to)g Fj(pkg-config)p Fp(:)390 4531 y Fj(gcc)47 b(-o)g(foo)g(foo.c)f(`pkg-config)f(gss)i (--cflags)f(--libs`)150 4764 y Fo(2.5)68 b(Out)45 b(of)g(Memory)g (handling)150 4923 y Fp(The)31 b(GSS)h(API)f(do)s(es)h(not)g(ha)m(v)m (e)h(a)f(standard)f(error)h(co)s(de)g(for)g(the)g(out)g(of)g(memory)g (error)f(condition.)150 5033 y(This)f(library)g(will)g(return)g Fj(GSS_S_FAILURE)c Fp(and)k(set)h Fj(minor_status)c Fp(to)k(ENOMEM.)p eop end %%Page: 9 13 TeXDict begin 9 12 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2330 b(9)150 299 y Fm(3)80 b(Standard)53 b(GSS)g(API)150 630 y Fo(3.1)68 b(Simple)46 b(Data)g(T)l(yp)t(es)150 789 y Fp(The)30 b(follo)m(wing)i(con)m(v)m(en) m(tions)g(are)f(used)e(b)m(y)i(the)f(GSS-API)g(C-language)i(bindings:) 150 988 y Fi(3.1.1)63 b(In)m(teger)40 b(t)m(yp)s(es)150 1135 y Fp(GSS-API)30 b(uses)g(the)g(follo)m(wing)i(in)m(teger)g(data)f (t)m(yp)s(e:)293 1269 y Fj(OM_uint32)189 b(32-bit)46 b(unsigned)f(integer)150 1468 y Fi(3.1.2)63 b(String)41 b(and)g(similar)h(data)150 1615 y Fp(Man)m(y)31 b(of)g(the)g(GSS-API)f (routines)h(tak)m(e)h(argumen)m(ts)f(and)f(return)f(v)-5 b(alues)31 b(that)h(describ)s(e)e(con)m(tiguous)150 1725 y(o)s(ctet-strings.)49 b(All)33 b(suc)m(h)f(data)h(is)g(passed)f(b)s (et)m(w)m(een)h(the)g(GSS-API)f(and)g(the)h(caller)g(using)f(the)h Fj(gss_)150 1834 y(buffer_t)28 b Fp(data)j(t)m(yp)s(e.)41 b(This)30 b(data)h(t)m(yp)s(e)f(is)g(a)h(p)s(oin)m(ter)g(to)g(a)f (bu\013er)g(descriptor,)g(whic)m(h)g(consists)h(of)g(a)150 1944 y(length)i(\014eld)f(that)h(con)m(tains)h(the)f(total)h(n)m(um)m (b)s(er)d(of)i(b)m(ytes)g(in)f(the)h(datum,)g(and)f(a)h(v)-5 b(alue)33 b(\014eld)f(whic)m(h)150 2054 y(con)m(tains)g(a)e(p)s(oin)m (ter)h(to)g(the)f(actual)i(datum:)293 2188 y Fj(typedef)46 b(struct)g(gss_buffer_desc_struct)c({)436 2297 y(size_t)190 b(length;)436 2407 y(void)286 b(*value;)293 2517 y(})48 b(gss_buffer_desc,)43 b(*gss_buffer_t;)275 2651 y Fp(Storage)j(for)g (data)g(returned)e(to)j(the)e(application)i(b)m(y)f(a)g(GSS-API)f (routine)g(using)g(the)h Fj(gss_)150 2761 y(buffer_t)29 b Fp(con)m(v)m(en)m(tions)34 b(is)e(allo)s(cated)h(b)m(y)f(the)g (GSS-API)f(routine.)44 b(The)31 b(application)i(ma)m(y)f(free)g(this) 150 2870 y(storage)e(b)m(y)f(in)m(v)m(oking)h(the)f Fj (gss_release_buffer)23 b Fp(routine.)41 b(Allo)s(cation)30 b(of)f(the)g Fj(gss_buffer_desc)150 2980 y Fp(ob)5 b(ject)26 b(is)f(alw)m(a)m(ys)h(the)f(resp)s(onsibilit)m(y)g(of)g(the)g (application;)j(un)m(used)c Fj(gss_buffer_desc)d Fp(ob)5 b(jects)25 b(ma)m(y)150 3089 y(b)s(e)30 b(initialized)i(to)f(the)g(v)-5 b(alue)30 b Fj(GSS_C_EMPTY_BUFFER)p Fp(.)150 3288 y Fi(3.1.2.1)63 b(Opaque)41 b(data)f(t)m(yp)s(es)150 3435 y Fp(Certain)21 b(m)m(ultiple-w)m(ord)h(data)g(items)g(are)g(considered)f(opaque)g (data)h(t)m(yp)s(es)g(at)g(the)f(GSS-API,)g(b)s(ecause)150 3545 y(their)k(in)m(ternal)g(structure)g(has)f(no)h(signi\014cance)h (either)f(to)h(the)f(GSS-API)f(or)h(to)h(the)f(caller.)40 b(Examples)150 3654 y(of)24 b(suc)m(h)g(opaque)g(data)h(t)m(yp)s(es)f (are)g(the)g(input)p 1699 3654 28 4 v 39 w(tok)m(en)h(parameter)g(to)f Fj(gss_init_sec_context)19 b Fp(\(whic)m(h)150 3764 y(is)27 b(opaque)h(to)g(the)f(caller\),)j(and)c(the)h(input)p 1653 3764 V 40 w(message)h(parameter)g(to)f Fj(gss_wrap)e Fp(\(whic)m(h)j(is)f(opaque)g(to)150 3874 y(the)j(GSS-API\).)g(Opaque)f (data)i(is)f(passed)f(b)s(et)m(w)m(een)i(the)f(GSS-API)f(and)g(the)h (application)h(using)f(the)150 3983 y Fj(gss_buffer_t)d Fp(datat)m(yp)s(e.)150 4182 y Fi(3.1.2.2)63 b(Character)40 b(strings)150 4329 y Fp(Certain)27 b(m)m(ultiple-w)m(ord)h(data)g (items)f(ma)m(y)h(b)s(e)f(regarded)g(as)g(simple)g(ISO)f(Latin-1)i(c)m (haracter)h(strings.)150 4439 y(Examples)j(are)f(the)h(prin)m(table)g (strings)f(passed)g(to)i Fj(gss_import_name)27 b Fp(via)32 b(the)g(input)p 3235 4439 V 39 w(name)p 3486 4439 V 40 w(bu\013er)150 4548 y(parameter.)91 b(Some)48 b(GSS-API)e(routines)h (also)h(return)e(c)m(haracter)j(strings.)91 b(All)48 b(suc)m(h)e(c)m(haracter)150 4658 y(strings)d(are)h(passed)g(b)s(et)m (w)m(een)g(the)g(application)h(and)e(the)g(GSS-API)g(implemen)m(tation) j(using)d(the)150 4767 y Fj(gss_buffer_t)27 b Fp(datat)m(yp)s(e,)32 b(whic)m(h)e(is)g(a)h(p)s(oin)m(ter)f(to)h(a)g Fj(gss_buffer_desc)26 b Fp(ob)5 b(ject.)275 4902 y(When)39 b(a)i Fj(gss_buffer_desc)36 b Fp(ob)5 b(ject)41 b(describ)s(es)e(a)h(prin)m(table)h(string,)h(the)e (length)h(\014eld)f(of)g(the)150 5011 y Fj(gss_buffer_desc)22 b Fp(should)k(only)g(coun)m(t)h(prin)m(table)g(c)m(haracters)g(within)f (the)h(string.)39 b(In)26 b(particular,)i(a)150 5121 y(trailing)j(NUL)g(c)m(haracter)h(should)d(NOT)h(b)s(e)g(included)g(in) g(the)g(length)h(coun)m(t,)h(nor)d(should)h(either)h(the)150 5230 y(GSS-API)h(implemen)m(tation)i(or)e(the)h(application)h(assume)e (the)h(presence)f(of)h(an)f(uncoun)m(ted)g(trailing)150 5340 y(NUL.)p eop end %%Page: 10 14 TeXDict begin 10 13 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(10)150 299 y Fi(3.1.3)63 b(Ob)7 b(ject)40 b(Iden)m(ti\014ers)150 446 y Fp(Certain)g(GSS-API)f (pro)s(cedures)g(tak)m(e)j(parameters)e(of)g(the)g(t)m(yp)s(e)g Fj(gss_OID)p Fp(,)h(or)e(Ob)5 b(ject)40 b(iden)m(ti\014er.)150 555 y(This)30 b(is)h(a)h(t)m(yp)s(e)f(con)m(taining)h(ISO-de\014ned)d (tree-)j(structured)e(v)-5 b(alues,)32 b(and)e(is)h(used)f(b)m(y)h(the) g(GSS-API)150 665 y(caller)38 b(to)f(select)h(an)e(underlying)g (securit)m(y)h(mec)m(hanism)g(and)f(to)h(sp)s(ecify)f(namespaces.)59 b(A)37 b(v)-5 b(alue)37 b(of)150 775 y(t)m(yp)s(e)31 b Fj(gss_OID)d Fp(has)i(the)h(follo)m(wing)g(structure:)293 956 y Fj(typedef)46 b(struct)g(gss_OID_desc_struct)d({)436 1066 y(OM_uint32)141 b(length;)436 1176 y(void)381 b(*elements;)293 1285 y(})48 b(gss_OID_desc,)c(*gss_OID;)275 1467 y Fp(The)35 b(elemen)m(ts)i(\014eld)e(of)h(this)g(structure)f(p)s(oin)m(ts)g(to)i (the)f(\014rst)f(b)m(yte)h(of)g(an)f(o)s(ctet)j(string)d(con)m(tain-) 150 1576 y(ing)29 b(the)f(ASN.1)h(BER)g(enco)s(ding)f(of)h(the)f(v)-5 b(alue)29 b(p)s(ortion)f(of)h(the)g(normal)f(BER)h(TL)-10 b(V)28 b(enco)s(ding)g(of)h(the)150 1686 y Fj(gss_OID)p Fp(.)36 b(The)23 b(length)h(\014eld)f(con)m(tains)i(the)f(n)m(um)m(b)s (er)e(of)i(b)m(ytes)g(in)f(this)g(v)-5 b(alue.)39 b(F)-8 b(or)25 b(example,)g(the)f Fj(gss_)150 1796 y(OID)e Fp(v)-5 b(alue)24 b(corresp)s(onding)e(to)i Fj(iso\(1\))29 b (identified-organization)o(\(3\))24 b(icd-ecma\(12\))j(member-)150 1905 y(company\(2\))h(dec\(1011\))f(cryptoAlgorithms\(7\))f(DASS\(5\))p Fp(,)21 b(meaning)g(the)h(D)m(ASS)f(X.509)i(authen-)150 2015 y(tication)36 b(mec)m(hanism,)g(has)f(a)f(length)h(\014eld)f(of)h (7)g(and)f(an)g(elemen)m(ts)i(\014eld)e(p)s(oin)m(ting)g(to)i(sev)m(en) f(o)s(ctets)150 2124 y(con)m(taining)23 b(the)f(follo)m(wing)h(o)s (ctal)g(v)-5 b(alues:)37 b(53,14,2,207,163,7,)q(5.)44 b(GSS-API)21 b(implemen)m(tations)i(should)150 2234 y(pro)m(vide)h (constan)m(t)i Fj(gss_OID)c Fp(v)-5 b(alues)25 b(to)g(allo)m(w)h (applications)g(to)f(request)f(an)m(y)h(supp)s(orted)d(mec)m(hanism,) 150 2344 y(although)33 b(applications)i(are)e(encouraged)h(on)f(p)s (ortabilit)m(y)h(grounds)e(to)i(accept)g(the)f(default)h(mec)m(ha-)150 2453 y(nism.)59 b Fj(gss_OID)35 b Fp(v)-5 b(alues)37 b(should)f(also)i(b)s(e)e(pro)m(vided)h(to)g(allo)m(w)i(applications)f (to)f(sp)s(ecify)g(particular)150 2563 y(name)j(t)m(yp)s(es)g(\(see)h (section)h(3.10\).)72 b(Applications)41 b(should)e(treat)i Fj(gss_OID_desc)c Fp(v)-5 b(alues)40 b(returned)150 2672 y(b)m(y)f(GSS-API)f(routines)h(as)h(read-only)-8 b(.)67 b(In)38 b(particular,)k(the)d(application)i(should)d(not)h(attempt)h (to)150 2782 y(deallo)s(cate)33 b(them)d(with)g(free\(\).)150 3028 y Fi(3.1.4)63 b(Ob)7 b(ject)40 b(Iden)m(ti\014er)h(Sets)150 3175 y Fp(Certain)f(GSS-API)g(pro)s(cedures)e(tak)m(e)k(parameters)e (of)h(the)f(t)m(yp)s(e)g Fj(gss_OID_set)p Fp(.)67 b(This)39 b(t)m(yp)s(e)h(rep-)150 3285 y(resen)m(ts)d(one)g(or)g(more)f(ob)5 b(ject)38 b(iden)m(ti\014ers)e(\(see)i([Ob)5 b(ject)37 b(Iden)m(ti\014ers],)h(page)g(10\).)60 b(A)37 b Fj(gss_OID_set)150 3395 y Fp(ob)5 b(ject)31 b(has)f(the)h(follo)m(wing)h(structure:)293 3576 y Fj(typedef)46 b(struct)g(gss_OID_set_desc_struct)c({)436 3686 y(size_t)190 b(count;)436 3796 y(gss_OID)142 b(elements;)293 3905 y(})48 b(gss_OID_set_desc,)43 b(*gss_OID_set;)275 4087 y Fp(The)38 b(coun)m(t)i(\014eld)e(con)m(tains)i(the)f(n)m(um)m(b) s(er)f(of)h(OIDs)g(within)f(the)h(set.)67 b(The)39 b(elemen)m(ts)h (\014eld)f(is)g(a)150 4196 y(p)s(oin)m(ter)c(to)h(an)e(arra)m(y)i(of)f Fj(gss_OID_desc)c Fp(ob)5 b(jects,)37 b(eac)m(h)f(of)f(whic)m(h)g (describ)s(es)f(a)h(single)h(OID.)f Fj(gss_)150 4306 y(OID_set)29 b Fp(v)-5 b(alues)31 b(are)g(used)f(to)i(name)f(the)g(a)m (v)-5 b(ailable)33 b(mec)m(hanisms)e(supp)s(orted)e(b)m(y)i(the)g (GSS-API,)f(to)150 4416 y(request)25 b(the)g(use)f(of)h(sp)s(eci\014c)f (mec)m(hanisms,)i(and)e(to)i(indicate)g(whic)m(h)e(mec)m(hanisms)h(a)g (giv)m(en)g(creden)m(tial)150 4525 y(supp)s(orts.)275 4707 y(All)39 b(OID)f(sets)h(returned)e(to)i(the)g(application)h(b)m(y) e(GSS-API)g(are)h(dynamic)f(ob)5 b(jects)39 b(\(the)g Fj(gss_)150 4817 y(OID_set_desc)p Fp(,)29 b(the)j Fj(")p Fp(elemen)m(ts)p Fj(")g Fp(arra)m(y)h(of)e(the)h(set,)h(and)e(the)h Fj(")p Fp(elemen)m(ts)p Fj(")h Fp(arra)m(y)f(of)g(eac)m(h)h(mem)m(b)s (er)150 4926 y(OID)26 b(are)g(all)h(dynamically)g(allo)s(cated\),)j (and)25 b(this)h(storage)i(m)m(ust)e(b)s(e)f(deallo)s(cated)j(b)m(y)e (the)h(application)150 5036 y(using)j(the)g Fj(gss_release_oid_set)c Fp(routine.)150 5339 y Fo(3.2)68 b(Complex)46 b(Data)g(T)l(yp)t(es)p eop end %%Page: 11 15 TeXDict begin 11 14 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(11)150 299 y Fi(3.2.1)63 b(Creden)m(tials)150 446 y Fp(A)35 b(creden)m(tial)g(handle)f(is)h(a)g (caller-opaque)h(atomic)g(datum)e(that)h(iden)m(ti\014es)g(a)g(GSS-API) e(creden)m(tial)150 555 y(data)e(structure.)40 b(It)31 b(is)f(represen)m(ted)h(b)m(y)f(the)g(caller-)i(opaque)f(t)m(yp)s(e)g Fj(gss_cred_id_t)p Fp(.)275 694 y(GSS-API)37 b(creden)m(tials)h(can)g (con)m(tain)h(mec)m(hanism-sp)s(eci\014c)f(principal)f(authen)m (tication)j(data)e(for)150 804 y(m)m(ultiple)f(mec)m(hanisms.)59 b(A)36 b(GSS-API)g(creden)m(tial)i(is)e(comp)s(osed)g(of)g(a)h(set)g (of)f(creden)m(tial-elemen)m(ts,)150 913 y(eac)m(h)f(of)g(whic)m(h)f (is)g(applicable)h(to)g(a)f(single)h(mec)m(hanism.)53 b(A)34 b(creden)m(tial)i(ma)m(y)f(con)m(tain)g(at)g(most)g(one)150 1023 y(creden)m(tial-elemen)m(t)f(for)d(eac)m(h)h(supp)s(orted)d(mec)m (hanism.)43 b(A)31 b(creden)m(tial-elemen)m(t)k(iden)m(ti\014es)c(the)g (data)150 1133 y(needed)d(b)m(y)g(a)h(single)g(mec)m(hanism)g(to)g (authen)m(ticate)i(a)d(single)h(principal,)g(and)f(conceptually)i(con)m (tains)150 1242 y(t)m(w)m(o)35 b(creden)m(tial-references)h(that)e (describ)s(e)f(the)h(actual)h(mec)m(hanism-sp)s(eci\014c)f(authen)m (tication)i(data,)150 1352 y(one)22 b(to)h(b)s(e)f(used)f(b)m(y)h (GSS-API)f(for)h(initiating)i(con)m(texts,)h(and)d(one)g(to)h(b)s(e)e (used)g(for)h(accepting)i(con)m(texts.)150 1461 y(F)-8 b(or)38 b(mec)m(hanisms)g(that)g(do)f(not)h(distinguish)f(b)s(et)m(w)m (een)h(acceptor)h(and)e(initiator)i(creden)m(tials,)i(b)s(oth)150 1571 y(references)31 b(w)m(ould)f(p)s(oin)m(t)g(to)h(the)g(same)g (underlying)e(mec)m(hanism-sp)s(eci\014c)i(authen)m(tication)h(data.) 275 1710 y(Creden)m(tials)41 b(describ)s(e)f(a)h(set)g(of)g(mec)m (hanism-sp)s(eci\014c)g(principals,)i(and)d(giv)m(e)i(their)e(holder)h (the)150 1819 y(abilit)m(y)35 b(to)f(act)h(as)e(an)m(y)h(of)g(those)g (principals.)49 b(All)34 b(principal)f(iden)m(tities)i(asserted)f(b)m (y)f(a)h(single)g(GSS-)150 1929 y(API)40 b(creden)m(tial)j(should)c(b)s (elong)i(to)h(the)f(same)g(en)m(tit)m(y)-8 b(,)45 b(although)c (enforcemen)m(t)h(of)f(this)g(prop)s(ert)m(y)150 2038 y(is)34 b(an)g(implemen)m(tation-sp)s(eci\014c)h(matter.)52 b(The)34 b(GSS-API)f(do)s(es)g(not)h(mak)m(e)h(the)f(actual)i(creden)m (tials)150 2148 y(a)m(v)-5 b(ailable)40 b(to)f(applications;)k(instead) 38 b(a)h(creden)m(tial)g(handle)f(is)g(used)f(to)h(iden)m(tify)h(a)f (particular)g(cre-)150 2258 y(den)m(tial,)g(held)e(in)m(ternally)h(b)m (y)e(GSS-API.)h(The)f(com)m(bination)i(of)f(GSS-API)f(creden)m(tial)i (handle)f(and)150 2367 y(mec)m(hanism)g(iden)m(ti\014es)f(the)h (principal)f(whose)g(iden)m(tit)m(y)i(will)e(b)s(e)g(asserted)g(b)m(y)h (the)f(creden)m(tial)i(when)150 2477 y(used)30 b(with)g(that)h(mec)m (hanism.)275 2616 y(The)44 b Fj(gss_init_sec_context)39 b Fp(and)45 b Fj(gss_accept_sec_context)38 b Fp(routines)45 b(allo)m(w)h(the)f(v)-5 b(alue)150 2725 y Fj(GSS_C_NO_CREDENTIAL)32 b Fp(to)37 b(b)s(e)g(sp)s(eci\014ed)f(as)h(their)g(creden)m(tial)i (handle)d(parameter.)61 b(This)36 b(sp)s(ecial)150 2835 y(creden)m(tial-handle)c(indicates)f(a)g(desire)f(b)m(y)g(the)h (application)h(to)f(act)g(as)g(a)g(default)f(principal.)150 3038 y Fi(3.2.2)63 b(Con)m(texts)150 3185 y Fp(The)29 b Fj(gss_ctx_id_t)e Fp(data)j(t)m(yp)s(e)g(con)m(tains)h(a)f (caller-opaque)i(atomic)g(v)-5 b(alue)30 b(that)g(iden)m(ti\014es)g (one)h(end)150 3295 y(of)g(a)f(GSS-API)g(securit)m(y)h(con)m(text.)275 3434 y(The)h(securit)m(y)h(con)m(text)i(holds)d(state)i(information)f (ab)s(out)g(eac)m(h)h(end)e(of)h(a)g(p)s(eer)f(comm)m(unication,)150 3543 y(including)e(cryptographic)h(state)g(information.)150 3747 y Fi(3.2.3)63 b(Authen)m(tication)39 b(tok)m(ens)150 3894 y Fp(A)24 b(tok)m(en)i(is)e(a)h(caller-opaque)h(t)m(yp)s(e)f(that) g(GSS-API)e(uses)h(to)h(main)m(tain)h(sync)m(hronization)f(b)s(et)m(w)m (een)g(the)150 4003 y(con)m(text)32 b(data)f(structures)e(at)i(eac)m(h) h(end)d(of)h(a)h(GSS-API)e(securit)m(y)i(con)m(text.)43 b(The)29 b(tok)m(en)j(is)e(a)g(crypto-)150 4113 y(graphically)h (protected)h(o)s(ctet-string,)g(generated)f(b)m(y)f(the)h(underlying)e (mec)m(hanism)i(at)g(one)f(end)g(of)h(a)150 4222 y(GSS-API)22 b(securit)m(y)i(con)m(text)h(for)e(use)g(b)m(y)g(the)g(p)s(eer)f(mec)m (hanism)h(at)h(the)f(other)h(end.)37 b(Encapsulation)24 b(\(if)150 4332 y(required\))30 b(and)g(transfer)g(of)h(the)g(tok)m(en) g(are)g(the)g(resp)s(onsibilit)m(y)f(of)h(the)g(p)s(eer)f (applications.)42 b(A)31 b(tok)m(en)150 4442 y(is)f(passed)g(b)s(et)m (w)m(een)h(the)g(GSS-API)f(and)f(the)i(application)h(using)e(the)g Fj(gss_buffer_t)d Fp(con)m(v)m(en)m(tions.)150 4645 y Fi(3.2.4)63 b(In)m(terpro)s(cess)41 b(tok)m(ens)150 4792 y Fp(Certain)28 b(GSS-API)f(routines)h(are)g(in)m(tended)g(to)g (transfer)f(data)i(b)s(et)m(w)m(een)f(pro)s(cesses)g(in)f(m)m(ulti-pro) s(cess)150 4902 y(programs.)38 b(These)23 b(routines)f(use)h(a)g (caller-opaque)i(o)s(ctet-string,)i(generated)d(b)m(y)e(the)i(GSS-API)e (in)h(one)150 5011 y(pro)s(cess)g(for)g(use)f(b)m(y)h(the)h(GSS-API)e (in)h(another)g(pro)s(cess.)38 b(The)23 b(calling)h(application)h(is)e (resp)s(onsible)f(for)150 5121 y(transferring)h(suc)m(h)h(tok)m(ens)h (b)s(et)m(w)m(een)f(pro)s(cesses)g(in)f(an)h(OS-sp)s(eci\014c)f (manner.)38 b(Note)25 b(that,)h(while)e(GSS-)150 5230 y(API)g(implemen)m(tors)h(are)g(encouraged)g(to)g(a)m(v)m(oid)h (placing)f(sensitiv)m(e)h(information)f(within)f(in)m(terpro)s(cess)150 5340 y(tok)m(ens,)50 b(or)c(to)g(cryptographically)h(protect)f(them,)k (man)m(y)c(implemen)m(tations)g(will)g(b)s(e)f(unable)g(to)p eop end %%Page: 12 16 TeXDict begin 12 15 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(12)150 299 y(a)m(v)m(oid)46 b(placing)e(k)m(ey)h(material)h(or)e(other)g(sensitiv)m(e)i(data)e (within)g(them.)82 b(It)44 b(is)g(the)g(application's)150 408 y(resp)s(onsibilit)m(y)37 b(to)g(ensure)g(that)g(in)m(terpro)s (cess)g(tok)m(ens)h(are)f(protected)h(in)f(transit,)i(and)d (transferred)150 518 y(only)d(to)g(pro)s(cesses)g(that)g(are)g(trust)m (w)m(orth)m(y)-8 b(.)49 b(An)32 b(in)m(terpro)s(cess)h(tok)m(en)h(is)f (passed)f(b)s(et)m(w)m(een)h(the)g(GSS-)150 628 y(API)d(and)g(the)h (application)g(using)f(the)h Fj(gss_buffer_t)c Fp(con)m(v)m(en)m (tions.)150 827 y Fi(3.2.5)63 b(Names)150 974 y Fp(A)42 b(name)g(is)g(used)g(to)h(iden)m(tify)f(a)h(p)s(erson)d(or)i(en)m(tit)m (y)-8 b(.)78 b(GSS-API)42 b(authen)m(ticates)i(the)f(relationship)150 1084 y(b)s(et)m(w)m(een)31 b(a)g(name)f(and)g(the)h(en)m(tit)m(y)h (claiming)f(the)g(name.)275 1219 y(Since)h(di\013eren)m(t)h(authen)m (tication)h(mec)m(hanisms)f(ma)m(y)g(emplo)m(y)g(di\013eren)m(t)g (namespaces)g(for)f(iden)m(ti-)150 1328 y(fying)25 b(their)f (principals,)i(GSSAPI's)e(naming)h(supp)s(ort)e(is)h(necessarily)i (complex)f(in)g(m)m(ulti-mec)m(hanism)150 1438 y(en)m(vironmen)m(ts)j (\(or)f(ev)m(en)h(in)f(some)g(single-mec)m(hanism)i(en)m(vironmen)m(ts) e(where)g(the)g(underlying)f(mec)m(h-)150 1547 y(anism)k(supp)s(orts)f (m)m(ultiple)i(namespaces\).)275 1682 y(Tw)m(o)f(distinct)h(represen)m (tations)g(are)g(de\014ned)e(for)h(names:)225 1817 y Fn(\017)60 b Fp(An)40 b(in)m(ternal)i(form.)71 b(This)40 b(is)h(the)g(GSS-API)f Fj(")p Fp(nativ)m(e)p Fj(")h Fp(format)g(for)g (names,)i(represen)m(ted)e(b)m(y)330 1927 y(the)h(implemen)m(tation-sp) s(eci\014c)i Fj(gss_name_t)39 b Fp(t)m(yp)s(e.)75 b(It)42 b(is)g(opaque)g(to)h(GSS-API)e(callers.)77 b(A)330 2036 y(single)32 b Fj(gss_name_t)c Fp(ob)5 b(ject)32 b(ma)m(y)f(con)m(tain)h (m)m(ultiple)g(names)f(from)f(di\013eren)m(t)i(namespaces,)g(but)330 2146 y(all)e(names)f(should)f(refer)h(to)g(the)g(same)h(en)m(tit)m(y)-8 b(.)42 b(An)29 b(example)h(of)f(suc)m(h)f(an)h(in)m(ternal)h(name)f(w)m (ould)330 2255 y(b)s(e)42 b(the)g(name)g(returned)f(from)h(a)h(call)g (to)g(the)g Fj(gss_inquire_cred)37 b Fp(routine,)46 b(when)41 b(applied)330 2365 y(to)33 b(a)f(creden)m(tial)h(con)m(taining)h (creden)m(tial)f(elemen)m(ts)g(for)f(m)m(ultiple)h(authen)m(tication)h (mec)m(hanisms)330 2475 y(emplo)m(ying)d(di\013eren)m(t)g(namespaces.) 42 b(This)30 b Fj(gss_name_t)d Fp(ob)5 b(ject)32 b(will)e(con)m(tain)i (a)f(distinct)g(name)330 2584 y(for)f(the)h(en)m(tit)m(y)h(for)e(eac)m (h)h(authen)m(tication)i(mec)m(hanism.)330 2719 y(F)-8 b(or)35 b(GSS-API)f(implemen)m(tations)h(supp)s(orting)e(m)m(ultiple)i (namespaces,)h(ob)5 b(jects)35 b(of)g(t)m(yp)s(e)f Fj(gss_)330 2828 y(name_t)28 b Fp(m)m(ust)h(con)m(tain)i(su\016cien)m(t)f (information)g(to)g(determine)f(the)h(namespace)g(to)h(whic)m(h)e(eac)m (h)330 2938 y(primitiv)m(e)i(name)g(b)s(elongs.)225 3073 y Fn(\017)60 b Fp(Mec)m(hanism-sp)s(eci\014c)39 b(con)m(tiguous)h(o)s (ctet-string)g(forms.)64 b(A)39 b(format)g(capable)g(of)g(con)m (taining)h(a)330 3182 y(single)30 b(name)f(\(from)g(a)h(single)g (namespace\).)42 b(Con)m(tiguous)29 b(string)h(names)f(are)g(alw)m(a)m (ys)i(accompa-)330 3292 y(nied)g(b)m(y)g(an)g(ob)5 b(ject)32 b(iden)m(ti\014er)g(sp)s(ecifying)f(the)g(namespace)h(to)g(whic)m(h)f (the)h(name)f(b)s(elongs,)h(and)330 3401 y(their)38 b(format)g(is)g (dep)s(enden)m(t)f(on)h(the)g(authen)m(tication)i(mec)m(hanism)e(that)g (emplo)m(ys)h(the)f(name.)330 3511 y(Man)m(y)-8 b(,)43 b(but)38 b(not)i(all,)i(con)m(tiguous)f(string)e(names)g(will)h(b)s(e)e (prin)m(table,)k(and)d(ma)m(y)h(therefore)g(b)s(e)330 3621 y(used)30 b(b)m(y)g(GSS-API)g(applications)h(for)f(comm)m (unication)i(with)e(their)h(users.)275 3780 y(Routines)43 b(\()p Fj(gss_import_name)c Fp(and)j Fj(gss_display_name)p Fp(\))d(are)44 b(pro)m(vided)f(to)g(con)m(v)m(ert)i(names)150 3890 y(b)s(et)m(w)m(een)27 b(con)m(tiguous)g(string)g(represen)m (tations)g(and)e(the)i(in)m(ternal)g Fj(gss_name_t)c Fp(t)m(yp)s(e.)40 b Fj(gss_import_)150 4000 y(name)j Fp(ma)m(y)j(supp)s(ort)c(m)m(ultiple)k(syn)m(taxes)f(for)f(eac)m(h)i (supp)s(orted)d(namespace,)49 b(allo)m(wing)d(users)e(the)150 4109 y(freedom)i(to)g(c)m(ho)s(ose)h(a)f(preferred)e(name)i(represen)m (tation.)88 b Fj(gss_display_name)41 b Fp(should)k(use)g(an)150 4219 y(implemen)m(tation-c)m(hosen)33 b(prin)m(table)e(syn)m(tax)f(for) h(eac)m(h)g(supp)s(orted)e(name-t)m(yp)s(e.)275 4354 y(If)22 b(an)h(application)h(calls)g Fj(gss_display_name)p Fp(,)c(passing)j(the)g(in)m(ternal)g(name)g(resulting)g(from)f(a)i (call)150 4463 y(to)j Fj(gss_import_name)p Fp(,)c(there)j(is)g(no)g (guaran)m(tee)h(the)g(resulting)f(con)m(tiguous)h(string)f(name)g(will) g(b)s(e)g(the)150 4573 y(same)c(as)h(the)f(original)h(imp)s(orted)e (string)h(name.)38 b(Nor)22 b(do)g(name-space)h(iden)m(ti\014ers)f (necessarily)h(surviv)m(e)150 4682 y(unc)m(hanged)34 b(after)h(a)g(journey)e(through)h(the)h(in)m(ternal)g(name-form.)52 b(An)35 b(example)g(of)f(this)g(migh)m(t)i(b)s(e)150 4792 y(a)45 b(mec)m(hanism)g(that)g(authen)m(ticates)h(X.500)g(names,)i (but)c(pro)m(vides)h(an)f(algorithmic)i(mapping)e(of)150 4902 y(In)m(ternet)35 b(DNS)g(names)g(in)m(to)h(X.500.)56 b(That)35 b(mec)m(hanism's)g(implemen)m(tation)i(of)e Fj(gss_import_name)150 5011 y Fp(migh)m(t,)24 b(when)d(presen)m(ted)h (with)f(a)i(DNS)e(name,)j(generate)f(an)f(in)m(ternal)h(name)e(that)i (con)m(tained)g(b)s(oth)e(the)150 5121 y(original)34 b(DNS)f(name)g(and)f(the)i(equiv)-5 b(alen)m(t)34 b(X.500)h(name.)48 b(Alternativ)m(ely)-8 b(,)37 b(it)c(migh)m(t)h(only)f(store)h(the)150 5230 y(X.500)f(name.)42 b(In)31 b(the)g(latter)h(case,)h Fj(gss_display_name)26 b Fp(w)m(ould)31 b(most)g(lik)m(ely)i(generate)f (a)g(prin)m(table)150 5340 y(X.500)g(name,)f(rather)f(than)g(the)h (original)g(DNS)g(name.)p eop end %%Page: 13 17 TeXDict begin 13 16 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(13)275 299 y(The)32 b(pro)s(cess)g(of)h(authen)m(tication)i(deliv)m(ers)e(to)h(the)f(con)m (text)i(acceptor)f(an)e(in)m(ternal)i(name.)48 b(Since)150 408 y(this)37 b(name)g(has)g(b)s(een)f(authen)m(ticated)j(b)m(y)e(a)g (single)h(mec)m(hanism,)h(it)f(con)m(tains)g(only)f(a)g(single)h(name) 150 518 y(\(ev)m(en)j(if)f(the)g(in)m(ternal)h(name)f(presen)m(ted)g(b) m(y)g(the)g(con)m(text)i(initiator)g(to)e Fj(gss_init_sec_context)150 628 y Fp(had)33 b(m)m(ultiple)g(comp)s(onen)m(ts\).)50 b(Suc)m(h)32 b(names)h(are)h(termed)f(in)m(ternal)h(mec)m(hanism)f (names,)h(or)f Fj(")p Fp(MN)p Fj(")p Fp(s)150 737 y(and)g(the)i(names)e (emitted)i(b)m(y)f Fj(gss_accept_sec_context)28 b Fp(are)34 b(alw)m(a)m(ys)i(of)e(this)g(t)m(yp)s(e.)52 b(Since)34 b(some)150 847 y(applications)e(ma)m(y)g(require)e(MNs)i(without)f(w)m (an)m(ting)h(to)f(incur)f(the)i(o)m(v)m(erhead)g(of)f(an)g(authen)m (tication)150 956 y(op)s(eration,)43 b(a)d(second)g(function,)j Fj(gss_canonicalize_name)p Fp(,)37 b(is)j(pro)m(vided)f(to)i(con)m(v)m (ert)h(a)e(general)150 1066 y(in)m(ternal)31 b(name)g(in)m(to)g(an)f (MN.)275 1196 y(Comparison)39 b(of)i(in)m(ternal-form)g(names)g(ma)m(y) g(b)s(e)e(accomplished)j(via)f(the)f Fj(gss_compare_name)150 1305 y Fp(routine,)29 b(whic)m(h)g(returns)e(true)h(if)h(the)g(t)m(w)m (o)h(names)e(b)s(eing)g(compared)h(refer)f(to)i(the)e(same)h(en)m(tit)m (y)-8 b(.)43 b(This)150 1415 y(remo)m(v)m(es)d(the)e(need)g(for)g(the)h (application)h(program)e(to)h(understand)d(the)j(syn)m(taxes)g(of)f (the)h(v)-5 b(arious)150 1525 y(prin)m(table)36 b(names)f(that)h(a)g (giv)m(en)h(GSS-API)d(implemen)m(tation)k(ma)m(y)e(supp)s(ort.)54 b(Since)35 b(GSS-API)g(as-)150 1634 y(sumes)g(that)i(all)g(primitiv)m (e)g(names)f(con)m(tained)h(within)e(a)i(giv)m(en)g(in)m(ternal)g(name) f(refer)g(to)g(the)h(same)150 1744 y(en)m(tit)m(y)-8 b(,)46 b Fj(gss_compare_name)37 b Fp(can)k(return)f(true)h(if)g(the)h (t)m(w)m(o)g(names)f(ha)m(v)m(e)i(at)e(least)i(one)e(primitiv)m(e)150 1853 y(name)33 b(in)g(common.)50 b(If)33 b(the)g(implemen)m(tation)i (em)m(b)s(o)s(dies)e(kno)m(wledge)i(of)e(equiv)-5 b(alence)35 b(relationships)150 1963 y(b)s(et)m(w)m(een)e(names)f(tak)m(en)h(from)f (di\013eren)m(t)g(namespaces,)i(this)e(kno)m(wledge)h(ma)m(y)f(also)i (allo)m(w)f(successful)150 2073 y(comparison)e(of)f(in)m(ternal)h (names)f(con)m(taining)i(no)f(o)m(v)m(erlapping)g(primitiv)m(e)g (elemen)m(ts.)275 2202 y(When)e(used)f(in)h(large)i(access)g(con)m (trol)f(lists,)h(the)e(o)m(v)m(erhead)i(of)f(in)m(v)m(oking)g Fj(gss_import_name)c Fp(and)150 2312 y Fj(gss_compare_name)36 b Fp(on)k(eac)m(h)i(name)f(from)f(the)g(A)m(CL)h(ma)m(y)g(b)s(e)f (prohibitiv)m(e.)72 b(As)40 b(an)h(alternativ)m(e)150 2422 y(w)m(a)m(y)31 b(of)f(supp)s(orting)f(this)h(case,)h(GSS-API)f (de\014nes)f(a)h(sp)s(ecial)h(form)e(of)h(the)h(con)m(tiguous)g(string) f(name)150 2531 y(whic)m(h)38 b(ma)m(y)h(b)s(e)f(compared)g(directly)h (\(e.g.)67 b(with)38 b(memcmp\(\)\).)65 b(Con)m(tiguous)39 b(names)f(suitable)h(for)150 2641 y(comparison)24 b(are)h(generated)g (b)m(y)f(the)g Fj(gss_export_name)c Fp(routine,)26 b(whic)m(h)e (requires)g(an)g(MN)g(as)h(input.)150 2750 y(Exp)s(orted)32 b(names)g(ma)m(y)h(b)s(e)f(re-)h(imp)s(orted)f(b)m(y)g(the)h Fj(gss_import_name)c Fp(routine,)k(and)f(the)h(resulting)150 2860 y(in)m(ternal)23 b(name)e(will)h(also)h(b)s(e)e(an)h(MN.)h(The)e Fj(gss_OID)f Fp(constan)m(t)j Fj(GSS_C_NT_EXPORT_NAME)16 b Fp(inden)m(ti\014es)150 2970 y(the)24 b Fj(")p Fp(exp)s(ort)f(name)p Fj(")h Fp(t)m(yp)s(e,)h(and)e(the)h(v)-5 b(alue)24 b(of)g(this)g (constan)m(t)h(is)e(giv)m(en)i(in)e(App)s(endix)f(A.)j(Structurally)-8 b(,)150 3079 y(an)27 b(exp)s(orted)f(name)h(ob)5 b(ject)27 b(consists)g(of)g(a)g(header)g(con)m(taining)h(an)f(OID)f(iden)m (tifying)i(the)f(mec)m(hanism)150 3189 y(that)32 b(authen)m(ticated)h (the)e(name,)g(and)g(a)g(trailer)h(con)m(taining)h(the)e(name)g (itself,)h(where)f(the)g(syn)m(tax)h(of)150 3298 y(the)i(trailer)h(is)f (de\014ned)f(b)m(y)h(the)g(individual)f(mec)m(hanism)h(sp)s (eci\014cation.)53 b(The)33 b(precise)i(format)f(of)g(an)150 3408 y(exp)s(ort)c(name)h(is)f(de\014ned)f(in)h(the)h(language-indep)s (enden)m(t)g(GSS-API)f(sp)s(eci\014cation)h([GSSAPI].)275 3538 y(Note)j(that)h(the)e(results)h(obtained)f(b)m(y)h(using)f Fj(gss_compare_name)c Fp(will)34 b(in)f(general)i(b)s(e)d(di\013eren)m (t)150 3647 y(from)24 b(those)h(obtained)g(b)m(y)g(in)m(v)m(oking)h Fj(gss_canonicalize_name)18 b Fp(and)24 b Fj(gss_export_name)p Fp(,)e(and)i(then)150 3757 y(comparing)h(the)g(exp)s(orted)f(names.)39 b(The)24 b(\014rst)f(series)i(of)g(op)s(eration)g(determines)g(whether) e(t)m(w)m(o)j(\(unau-)150 3867 y(then)m(ticated\))j(names)d(iden)m (tify)h(the)g(same)f(principal;)i(the)f(second)f(whether)g(a)h (particular)g(mec)m(hanism)150 3976 y(w)m(ould)33 b(authen)m(ticate)j (them)d(as)h(the)f(same)h(principal.)49 b(These)33 b(t)m(w)m(o)i(op)s (erations)e(will)h(in)f(general)h(giv)m(e)150 4086 y(the)d(same)f (results)g(only)h(for)f(MNs.)275 4216 y(The)f Fj(gss_name_t)e Fp(datat)m(yp)s(e)j(should)f(b)s(e)g(implemen)m(ted)h(as)g(a)g(p)s(oin) m(ter)g(t)m(yp)s(e.)41 b(T)-8 b(o)30 b(allo)m(w)h(the)f(com-)150 4325 y(piler)f(to)g(aid)g(the)g(application)i(programmer)d(b)m(y)h(p)s (erforming)e(t)m(yp)s(e-c)m(hec)m(king,)32 b(the)d(use)g(of)g(\(v)m (oid)g(*\))h(is)150 4435 y(discouraged.)41 b(A)31 b(p)s(oin)m(ter)f(to) h(an)f(implemen)m(tation-de\014ned)h(t)m(yp)s(e)g(is)f(the)h(preferred) e(c)m(hoice.)275 4565 y(Storage)44 b(is)f(allo)s(cated)i(b)m(y)e (routines)g(that)g(return)f Fj(gss_name_t)f Fp(v)-5 b(alues.)79 b(A)43 b(pro)s(cedure,)i Fj(gss_)150 4674 y(release_name)p Fp(,)27 b(is)k(pro)m(vided)f(to)h(free)f(storage)i(asso)s(ciated)g (with)e(an)g(in)m(ternal-form)h(name.)150 4864 y Fi(3.2.6)63 b(Channel)40 b(Bindings)150 5011 y Fp(GSS-API)g(supp)s(orts)f(the)i (use)g(of)g(user-sp)s(eci\014ed)f(tags)i(to)g(iden)m(tify)f(a)g(giv)m (en)h(con)m(text)h(to)e(the)h(p)s(eer)150 5121 y(application.)k(These) 31 b(tags)h(are)g(in)m(tended)g(to)g(b)s(e)f(used)g(to)h(iden)m(tify)g (the)g(particular)g(comm)m(unications)150 5230 y(c)m(hannel)24 b(that)f(carries)h(the)g(con)m(text.)40 b(Channel)22 b(bindings)g(are)i(comm)m(unicated)g(to)g(the)g(GSS-API)e(using)150 5340 y(the)31 b(follo)m(wing)g(structure:)p eop end %%Page: 14 18 TeXDict begin 14 17 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(14)293 299 y Fj(typedef)46 b(struct)g(gss_channel_bindings_stru)o(ct)41 b({)436 408 y(OM_uint32)332 b(initiator_addrtype;)436 518 y(gss_buffer_desc)44 b(initiator_address;)436 628 y(OM_uint32)332 b(acceptor_addrtype;)436 737 y(gss_buffer_desc)44 b(acceptor_address;)436 847 y(gss_buffer_desc)g(application_data;)293 956 y(})k (*gss_channel_bindings_t)o(;)275 1121 y Fp(The)34 b(initiator)p 794 1121 28 4 v 41 w(addrt)m(yp)s(e)g(and)g(acceptor)p 1739 1121 V 42 w(addrt)m(yp)s(e)g(\014elds)g(denote)h(the)g(t)m(yp)s(e) g(of)g(addresses)f(con-)150 1230 y(tained)i(in)f(the)h(initiator)p 1034 1230 V 41 w(address)f(and)g(acceptor)p 1919 1230 V 42 w(address)f(bu\013ers.)56 b(The)35 b(address)f(t)m(yp)s(e)i (should)f(b)s(e)150 1340 y(one)c(of)f(the)h(follo)m(wing:)293 1504 y Fj(GSS_C_AF_UNSPEC)235 b(Unspecified)44 b(address)i(type)293 1614 y(GSS_C_AF_LOCAL)283 b(Host-local)45 b(address)h(type)293 1724 y(GSS_C_AF_INET)331 b(Internet)45 b(address)h(type)h(\(e.g.)f (IP\))293 1833 y(GSS_C_AF_IMPLINK)187 b(ARPAnet)46 b(IMP)g(address)g (type)293 1943 y(GSS_C_AF_PUP)379 b(pup)47 b(protocols)e(\(eg)i(BSP\))f (address)g(type)293 2052 y(GSS_C_AF_CHAOS)283 b(MIT)47 b(CHAOS)f(protocol)g(address)f(type)293 2162 y(GSS_C_AF_NS)427 b(XEROX)46 b(NS)h(address)f(type)293 2271 y(GSS_C_AF_NBS)379 b(nbs)47 b(address)e(type)293 2381 y(GSS_C_AF_ECMA)331 b(ECMA)46 b(address)g(type)293 2491 y(GSS_C_AF_DATAKIT)187 b(datakit)46 b(protocols)f(address)h(type)293 2600 y(GSS_C_AF_CCITT)283 b(CCITT)46 b(protocols)293 2710 y(GSS_C_AF_SNA)379 b(IBM)47 b(SNA)g(address)e(type)293 2819 y(GSS_C_AF_DECnet)235 b(DECnet)46 b(address)g(type)293 2929 y(GSS_C_AF_DLI)379 b(Direct)46 b(data)g(link)h(interface)e(address)h(type)293 3039 y(GSS_C_AF_LAT)379 b(LAT)47 b(address)e(type)293 3148 y(GSS_C_AF_HYLINK)235 b(NSC)47 b(Hyperchannel)d(address)i(type)293 3258 y(GSS_C_AF_APPLETALK)91 b(AppleTalk)45 b(address)h(type)293 3367 y(GSS_C_AF_BSC)379 b(BISYNC)46 b(2780/3780)f(address)h(type)293 3477 y(GSS_C_AF_DSS)379 b(Distributed)44 b(system)j(services)e(address) h(type)293 3587 y(GSS_C_AF_OSI)379 b(OSI)47 b(TP4)g(address)e(type)293 3696 y(GSS_C_AF_X25)379 b(X.25)293 3806 y(GSS_C_AF_NULLADDR)139 b(No)47 b(address)f(specified)275 3970 y Fp(Note)32 b(that)f(these)h (sym)m(b)s(ols)f(name)g(address)f(families)i(rather)f(than)f(sp)s (eci\014c)h(addressing)f(formats.)150 4080 y(F)-8 b(or)24 b(address)e(families)h(that)h(con)m(tain)g(sev)m(eral)g(alternativ)m(e) h(address)d(forms,)i(the)f(initiator)p 3251 4080 V 42 w(address)f(and)150 4189 y(acceptor)p 488 4189 V 42 w(address)h (\014elds)i(m)m(ust)f(con)m(tain)i(su\016cien)m(t)g(information)f(to)g (determine)g(whic)m(h)g(address)e(form)150 4299 y(is)30 b(used.)41 b(When)30 b(not)g(otherwise)h(sp)s(eci\014ed,)f(addresses)g (should)g(b)s(e)f(sp)s(eci\014ed)h(in)g(net)m(w)m(ork)h(b)m(yte-order) 150 4408 y(\(that)g(is,)g(nativ)m(e)h(b)m(yte-ordering)f(for)f(the)h (address)e(family\).)275 4573 y(Conceptually)-8 b(,)40 b(the)e(GSS-API)f(concatenates)j(the)d(initiator)p 2455 4573 V 42 w(addrt)m(yp)s(e,)i(initiator)p 3240 4573 V 41 w(address,)g(ac-)150 4682 y(ceptor)p 403 4682 V 41 w(addrt)m(yp)s(e,)24 b(acceptor)p 1182 4682 V 42 w(address)f(and)h (application)p 2151 4682 V 41 w(data)h(to)f(form)g(an)g(o)s(ctet)h (string.)39 b(The)23 b(mec)m(h-)150 4792 y(anism)30 b(calculates)i(a)f (MIC)e(o)m(v)m(er)j(this)e(o)s(ctet)h(string,)f(and)g(binds)e(the)j (MIC)e(to)i(the)f(con)m(text)i(establish-)150 4902 y(men)m(t)j(tok)m (en)g(emitted)h(b)m(y)e Fj(gss_init_sec_context)p Fp(.)47 b(The)34 b(same)h(bindings)e(are)i(presen)m(ted)f(b)m(y)h(the)150 5011 y(con)m(text)h(acceptor)g(to)f Fj(gss_accept_sec_context)p Fp(,)30 b(and)j(a)i(MIC)f(is)h(calculated)h(in)e(the)h(same)f(w)m(a)m (y)-8 b(.)150 5121 y(The)41 b(calculated)j(MIC)e(is)g(compared)g(with)g (that)g(found)f(in)h(the)g(tok)m(en,)k(and)41 b(if)h(the)g(MICs)g (di\013er,)150 5230 y Fj(gss_accept_sec_context)31 b Fp(will)37 b(return)e(a)i Fj(GSS_S_BAD_BINDINGS)32 b Fp(error,)38 b(and)e(the)h(con)m(text)i(will)150 5340 y(not)33 b(b)s(e)e(established.)47 b(Some)33 b(mec)m(hanisms)f(ma)m(y)h (include)f(the)h(actual)h(c)m(hannel)e(binding)g(data)h(in)f(the)p eop end %%Page: 15 19 TeXDict begin 15 18 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(15)150 299 y(tok)m(en)34 b(\(rather)f(than)g(just)f(a)i(MIC\);)f(applications)h(should)e (therefore)h(not)g(use)g(con\014den)m(tial)h(data)g(as)150 408 y(c)m(hannel-binding)c(comp)s(onen)m(ts.)275 545 y(Individual)19 b(mec)m(hanisms)i(ma)m(y)g(imp)s(ose)g(additional)g (constrain)m(ts)h(on)f(addresses)f(and)g(address)g(t)m(yp)s(es)150 654 y(that)45 b(ma)m(y)f(app)s(ear)g(in)f(c)m(hannel)i(bindings.)80 b(F)-8 b(or)45 b(example,)j(a)d(mec)m(hanism)f(ma)m(y)h(v)m(erify)f (that)h(the)150 764 y(initiator)p 478 764 28 4 v 41 w(address)22 b(\014eld)g(of)h(the)g(c)m(hannel)g(bindings)f(presen)m(ted)g(to)i Fj(gss_init_sec_context)17 b Fp(con)m(tains)150 873 y(the)43 b(correct)h(net)m(w)m(ork)g(address)e(of)h(the)g(host)f(system.)79 b(P)m(ortable)44 b(applications)g(should)d(therefore)150 983 y(ensure)23 b(that)i(they)f(either)h(pro)m(vide)f(correct)i (information)e(for)g(the)g(address)f(\014elds,)j(or)e(omit)h (addressing)150 1093 y(information,)31 b(sp)s(ecifying)f Fj(GSS_C_AF_NULLADDR)c Fp(as)k(the)h(address-t)m(yp)s(es.)150 1328 y Fo(3.3)68 b(Optional)46 b(P)l(arameters)150 1487 y Fp(V)-8 b(arious)38 b(parameters)f(are)h(describ)s(ed)e(as)i (optional.)62 b(This)36 b(means)i(that)f(they)h(follo)m(w)g(a)g(con)m (v)m(en)m(tion)150 1597 y(whereb)m(y)29 b(a)i(default)f(v)-5 b(alue)30 b(ma)m(y)h(b)s(e)e(requested.)40 b(The)30 b(follo)m(wing)h (con)m(v)m(en)m(tions)h(are)e(used)f(for)h(omitted)150 1706 y(parameters.)66 b(These)39 b(con)m(v)m(en)m(tions)h(apply)f(only) g(to)g(those)g(parameters)h(that)f(are)g(explicitly)h(do)s(cu-)150 1816 y(men)m(ted)31 b(as)f(optional.)225 1952 y Fn(\017)60 b Fp(gss)p 453 1952 V 40 w(bu\013er)p 724 1952 V 39 w(t)33 b(t)m(yp)s(es.)49 b(Sp)s(ecify)32 b(GSS)p 1606 1952 V 39 w(C)p 1711 1952 V 40 w(NO)p 1890 1952 V 40 w(BUFFER)h(as)g(a)h(v)-5 b(alue.)48 b(F)-8 b(or)34 b(an)f(input)e(parameter)330 2062 y(this)f(signi\014es)g(that)h(default)f(b)s(eha)m(vior)g(is)h (requested,)f(while)g(for)g(an)g(output)g(parameter)h(it)f(indi-)330 2171 y(cates)37 b(that)g(the)f(information)g(that)g(w)m(ould)g(b)s(e)f (returned)g(via)h(the)g(parameter)h(is)f(not)g(required)330 2281 y(b)m(y)30 b(the)h(application.)225 2416 y Fn(\017)60 b Fp(In)m(teger)35 b(t)m(yp)s(es)g(\(input\).)52 b(Individual)33 b(parameter)i(do)s(cumen)m(tation)g(lists)g(v)-5 b(alues)34 b(to)h(b)s(e)f(used)f(to)330 2526 y(indicate)e(default)g(actions.)225 2661 y Fn(\017)60 b Fp(In)m(teger)31 b(t)m(yp)s(es)g(\(output\).)41 b(Sp)s(ecify)29 b(NULL)i(as)f(the)h(v)-5 b(alue)31 b(for)f(the)g(p)s (oin)m(ter.)225 2797 y Fn(\017)60 b Fp(P)m(oin)m(ter)32 b(t)m(yp)s(es.)40 b(Sp)s(ecify)30 b(NULL)g(as)h(the)g(v)-5 b(alue.)225 2932 y Fn(\017)60 b Fp(Ob)5 b(ject)31 b(IDs.)40 b(Sp)s(ecify)30 b(GSS)p 1329 2932 V 39 w(C)p 1434 2932 V 40 w(NO)p 1613 2932 V 40 w(OID)g(as)h(the)f(v)-5 b(alue.)225 3067 y Fn(\017)60 b Fp(Ob)5 b(ject)31 b(ID)f(Sets.)41 b(Sp)s(ecify)30 b(GSS)p 1486 3067 V 39 w(C)p 1591 3067 V 40 w(NO)p 1770 3067 V 39 w(OID)p 1982 3067 V 40 w(SET)g(as)g(the)h(v) -5 b(alue.)225 3203 y Fn(\017)60 b Fp(Channel)27 b(Bindings.)40 b(Sp)s(ecify)27 b(GSS)p 1591 3203 V 39 w(C)p 1696 3203 V 40 w(NO)p 1875 3203 V 40 w(CHANNEL)p 2372 3203 V 40 w(BINDINGS)h(to)h(indicate)g(that)f(c)m(han-)330 3312 y(nel)i(bindings)g(are)g(not)h(to)g(b)s(e)f(used.)150 3547 y Fo(3.4)68 b(Error)45 b(Handling)150 3707 y Fp(Ev)m(ery)22 b(GSS-API)g(routine)g(returns)e(t)m(w)m(o)j(distinct)g(v)-5 b(alues)22 b(to)h(rep)s(ort)e(status)h(information)h(to)f(the)g (caller:)150 3816 y(GSS)30 b(status)g(co)s(des)h(and)f(Mec)m(hanism)h (status)g(co)s(des.)150 4017 y Fi(3.4.1)63 b(GSS)41 b(status)g(co)s (des)150 4164 y Fp(GSS-API)27 b(routines)g(return)f(GSS)h(status)h(co)s (des)f(as)h(their)f Fj(OM_uint32)e Fp(function)i(v)-5 b(alue.)41 b(These)27 b(co)s(des)150 4274 y(indicate)38 b(errors)e(that)i(are)f(indep)s(enden)m(t)f(of)h(the)g(underlying)f (mec)m(hanism\(s\))i(used)e(to)i(pro)m(vide)f(the)150 4383 y(securit)m(y)32 b(service.)43 b(The)30 b(errors)h(that)g(can)g(b) s(e)g(indicated)g(via)h(a)f(GSS)f(status)h(co)s(de)g(are)h(either)f (generic)150 4493 y(API)i(routine)h(errors)e(\(errors)i(that)f(are)h (de\014ned)e(in)h(the)h(GSS-API)f(sp)s(eci\014cation\))h(or)g(calling)g (errors)150 4603 y(\(errors)c(that)h(are)g(sp)s(eci\014c)f(to)h(these)g (language)h(bindings\).)275 4739 y(A)k(GSS)g(status)h(co)s(de)f(can)h (indicate)h(a)f(single)g(fatal)g(generic)h(API)e(error)g(from)g(the)h (routine)g(and)150 4848 y(a)32 b(single)h(calling)g(error.)45 b(In)31 b(addition,)i(supplemen)m(tary)e(status)h(information)g(ma)m(y) h(b)s(e)e(indicated)h(via)150 4958 y(the)f(setting)g(of)g(bits)f(in)g (the)g(supplemen)m(tary)g(info)h(\014eld)f(of)g(a)h(GSS)f(status)g(co)s (de.)275 5094 y(These)g(errors)g(are)g(enco)s(ded)g(in)m(to)i(the)e (32-bit)i(GSS)d(status)i(co)s(de)g(as)f(follo)m(ws:)436 5230 y Fj(MSB)2672 b(LSB)436 5340 y(|-------------------------)o(---)o (----)o(----)o(---)o(----)o(----)o(---)o(----)o(----)o(--|)p eop end %%Page: 16 20 TeXDict begin 16 19 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(16)436 299 y Fj(|)96 b(Calling)45 b(Error)i(|)g(Routine)f(Error)94 b(|)191 b(Supplementary)44 b(Info)190 b(|)436 408 y(|-------------------------) o(---)o(----)o(----)o(---)o(----)o(----)o(---)o(----)o(----)o(--|)293 518 y(Bit)47 b(31)572 b(24)47 b(23)573 b(16)47 b(15)1097 b(0)275 664 y Fp(Hence)36 b(if)f(a)g(GSS-API)g(routine)g(returns)f(a)i (GSS)e(status)i(co)s(de)g(whose)f(upp)s(er)e(16)j(bits)f(con)m(tain)i (a)150 774 y(non-zero)24 b(v)-5 b(alue,)25 b(the)e(call)i(failed.)38 b(If)23 b(the)g(calling)i(error)e(\014eld)f(is)h(non-zero,)j(the)d(in)m (v)m(oking)h(application's)150 883 y(call)j(of)f(the)f(routine)h(w)m (as)g(erroneous.)39 b(Calling)26 b(errors)f(are)h(de\014ned)e(in)h (table)i(3-1.)40 b(If)25 b(the)h(routine)f(error)150 993 y(\014eld)35 b(is)h(non-zero,)i(the)e(routine)f(failed)i(for)e(one) h(of)g(the)g(routine-)g(sp)s(eci\014c)f(reasons)h(listed)g(b)s(elo)m(w) g(in)150 1103 y(table)29 b(3-2.)41 b(Whether)28 b(or)g(not)h(the)f(upp) s(er)e(16)j(bits)f(indicate)h(a)f(failure)h(or)f(a)g(success,)h(the)f (routine)g(ma)m(y)150 1212 y(indicate)i(additional)g(information)g(b)m (y)f(setting)h(bits)f(in)g(the)g(supplemen)m(tary)f(info)h(\014eld)g (of)g(the)h(status)150 1322 y(co)s(de.)41 b(The)30 b(meaning)g(of)h (individual)f(bits)g(is)g(listed)h(b)s(elo)m(w)g(in)f(table)h(3-3.)293 1468 y Fj(Table)47 b(3-1)94 b(Calling)46 b(Errors)293 1687 y(Name)906 b(Value)46 b(in)h(field)524 b(Meaning)293 1797 y(----)906 b(--------------)521 b(-------)293 1906 y(GSS_S_CALL_INACCESSIBLE_R)o(EAD)89 b(1)334 b(A)47 b(required)f(input) g(parameter)2107 2016 y(could)g(not)h(be)g(read)293 2125 y(GSS_S_CALL_INACCESSIBLE_W)o(RITE)41 b(2)334 b(A)47 b(required)f(output)g(parameter)2155 2235 y(could)g(not)h(be)g (written.)293 2345 y(GSS_S_CALL_BAD_STRUCTURE)280 b(3)334 b(A)47 b(parameter)f(was)g(malformed)293 2491 y(Table)h(3-2)94 b(Routine)46 b(Errors)293 2710 y(Name)906 b(Value)46 b(in)h(field)524 b(Meaning)293 2819 y(----)906 b(--------------)521 b(-------)293 2929 y(GSS_S_BAD_MECH)760 b(1)334 b(An)47 b(unsupported)e(mechanism)2107 3039 y(was)i(requested)293 3148 y(GSS_S_BAD_NAME)760 b(2)334 b(An)47 b(invalid)f(name)g(was)2107 3258 y(supplied)293 3367 y(GSS_S_BAD_NAMETYPE)568 b(3)334 b(A)47 b(supplied)f(name)g(was)h(of)h(an)2107 3477 y(unsupported)d (type)293 3587 y(GSS_S_BAD_BINDINGS)568 b(4)334 b(Incorrect)45 b(channel)h(bindings)2107 3696 y(were)g(supplied)293 3806 y(GSS_S_BAD_STATUS)664 b(5)334 b(An)47 b(invalid)f(status)g(code)h (was)2107 3915 y(supplied)293 4025 y(GSS_S_BAD_MIC)d(GSS_S_BAD_SIG)140 b(6)334 b(A)47 b(token)g(had)g(an)g(invalid)f(MIC)293 4134 y(GSS_S_NO_CRED)808 b(7)334 b(No)47 b(credentials)e(were)2107 4244 y(supplied,)g(or)i(the)2107 4354 y(credentials)e(were)2107 4463 y(unavailable)g(or)2107 4573 y(inaccessible.)293 4682 y(GSS_S_NO_CONTEXT)664 b(8)334 b(No)47 b(context)f(has)h(been)2107 4792 y(established)293 4902 y(GSS_S_DEFECTIVE_TOKEN)424 b(9)334 b(A)47 b(token)g(was)g(invalid)293 5011 y (GSS_S_DEFECTIVE_CREDENTIA)o(L)137 b(10)334 b(A)47 b(credential)e(was)i (invalid)293 5121 y(GSS_S_CREDENTIALS_EXPIRED)184 b(11)334 b(The)47 b(referenced)e(credentials)2107 5230 y(have)h(expired)293 5340 y(GSS_S_CONTEXT_EXPIRED)376 b(12)334 b(The)47 b(context)f(has)g (expired)p eop end %%Page: 17 21 TeXDict begin 17 20 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(17)293 299 y Fj(GSS_S_FAILURE)760 b(13)334 b(Miscellaneous)44 b(failure)i(\(see)2107 408 y(text\))293 518 y(GSS_S_BAD_QOP)760 b(14)334 b(The)47 b(quality-of-protection)2107 628 y(requested)e(could)h(not)h(be)2107 737 y(provided)293 847 y(GSS_S_UNAUTHORIZED)520 b(15)334 b(The)47 b(operation)e(is)i(forbidden)2107 956 y(by)g(local)f(security) g(policy)293 1066 y(GSS_S_UNAVAILABLE)568 b(16)334 b(The)47 b(operation)e(or)i(option)f(is)2107 1176 y(unavailable)293 1285 y(GSS_S_DUPLICATE_ELEMENT)280 b(17)334 b(The)47 b(requested)e(credential)2107 1395 y(element)h(already)f(exists)293 1504 y(GSS_S_NAME_NOT_MN)568 b(18)334 b(The)47 b(provided)e(name)i(was) g(not)g(a)2107 1614 y(mechanism)e(name)293 1797 y(Table)i(3-3)94 b(Supplementary)44 b(Status)i(Bits)293 2016 y(Name)906 b(Bit)47 b(Number)523 b(Meaning)293 2125 y(----)906 b(----------)522 b(-------)293 2235 y(GSS_S_CONTINUE_NEEDED)138 b(0)47 b(\(LSB\))142 b(Returned)45 b(only)i(by)1916 2345 y (gss_init_sec_context)42 b(or)1916 2454 y(gss_accept_sec_context.)f (The)1916 2564 y(routine)46 b(must)g(be)i(called)e(again)1916 2673 y(to)h(complete)f(its)h(function.)1916 2783 y(See)g(routine)f (documentation)e(for)1916 2892 y(detailed)h(description)293 3002 y(GSS_S_DUPLICATE_TOKEN)138 b(1)429 b(The)47 b(token)f(was)h(a)h (duplicate)d(of)1916 3112 y(an)i(earlier)f(token)293 3221 y(GSS_S_OLD_TOKEN)426 b(2)j(The)47 b(token's)f(validity)f(period) 1916 3331 y(has)i(expired)293 3440 y(GSS_S_UNSEQ_TOKEN)330 b(3)429 b(A)47 b(later)g(token)f(has)h(already)f(been)1916 3550 y(processed)293 3660 y(GSS_S_GAP_TOKEN)426 b(4)j(An)47 b(expected)f(per-message)e(token)1916 3769 y(was)j(not)g(received)275 3952 y Fp(The)39 b(routine)h(do)s(cumen)m(tation)g(also)h(uses)f(the)g (name)g(GSS)p 2416 3952 28 4 v 39 w(S)p 2506 3952 V 40 w(COMPLETE,)e(whic)m(h)i(is)g(a)g(zero)150 4061 y(v)-5 b(alue,)31 b(to)g(indicate)h(an)e(absence)h(of)f(an)m(y)h(API)f(errors) g(or)g(supplemen)m(tary)g(information)h(bits.)275 4244 y(All)44 b(GSS)p 616 4244 V 39 w(S)p 706 4244 V 40 w(xxx)g(sym)m(b)s (ols)f(equate)i(to)g(complete)g Fj(OM_uint32)c Fp(status)j(co)s(des,)k (rather)c(than)f(to)150 4354 y(bit\014eld)36 b(v)-5 b(alues.)58 b(F)-8 b(or)37 b(example,)i(the)d(actual)i(v)-5 b(alue)36 b(of)h(the)f(sym)m(b)s(ol)g Fj(GSS_S_BAD_NAMETYPE)31 b Fp(\(v)-5 b(alue)150 4463 y(3)43 b(in)g(the)h(routine)f(error)f (\014eld\))h(is)h(3)p Fj(<<)p Fp(16.)79 b(The)43 b(macros)g Fj(GSS_CALLING_ERROR)p Fp(,)f Fj(GSS_ROUTINE_)150 4573 y(ERROR)29 b Fp(and)g Fj(GSS_SUPPLEMENTARY_INFO)24 b Fp(are)30 b(pro)m(vided,)g(eac)m(h)h(of)g(whic)m(h)e(tak)m(es)j(a)e (GSS)f(status)i(co)s(de)150 4682 y(and)i(remo)m(v)m(es)i(all)g(but)d (the)i(relev)-5 b(an)m(t)35 b(\014eld.)50 b(F)-8 b(or)35 b(example,)g(the)f(v)-5 b(alue)34 b(obtained)g(b)m(y)g(applying)f Fj(GSS_)150 4792 y(ROUTINE_ERROR)d Fp(to)k(a)g(status)g(co)s(de)g(remo) m(v)m(es)h(the)f(calling)h(errors)e(and)g(supplemen)m(tary)g(info)g (\014elds,)150 4902 y(lea)m(ving)f(only)f(the)f(routine)h(errors)e (\014eld.)41 b(The)30 b(v)-5 b(alues)30 b(deliv)m(ered)i(b)m(y)e(these) h(macros)g(ma)m(y)f(b)s(e)g(directly)150 5011 y(compared)f(with)f(a)h Fj(GSS_S_xxx)d Fp(sym)m(b)s(ol)i(of)h(the)g(appropriate)g(t)m(yp)s(e.) 40 b(The)28 b(macro)h Fj(GSS_ERROR)d Fp(is)j(also)150 5121 y(pro)m(vided,)34 b(whic)m(h)f(when)f(applied)i(to)g(a)f(GSS)g (status)h(co)s(de)f(returns)f(a)i(non-zero)g(v)-5 b(alue)34 b(if)f(the)h(status)150 5230 y(co)s(de)29 b(indicated)g(a)g(calling)h (or)e(routine)h(error,)f(and)g(a)h(zero)g(v)-5 b(alue)29 b(otherwise.)41 b(All)29 b(macros)g(de\014ned)e(b)m(y)150 5340 y(GSS-API)j(ev)-5 b(aluate)32 b(their)e(argumen)m(t\(s\))i (exactly)g(once.)p eop end %%Page: 18 22 TeXDict begin 18 21 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(18)275 299 y(A)38 b(GSS-API)h (implemen)m(tation)h(ma)m(y)f(c)m(ho)s(ose)h(to)f(signal)h(calling)g (errors)e(in)h(a)g(platform-sp)s(eci\014c)150 408 y(manner)c(instead)i (of,)h(or)e(in)g(addition)h(to)g(the)f(routine)h(v)-5 b(alue;)40 b(routine)c(errors)g(and)f(supplemen)m(tary)150 518 y(info)30 b(should)g(b)s(e)f(returned)h(via)h(ma)5 b(jor)30 b(status)h(v)-5 b(alues)30 b(only)-8 b(.)275 784 y(The)22 b(GSS)f(ma)5 b(jor)23 b(status)g(co)s(de)f Fj(GSS_S_FAILURE)d Fp(is)k(used)e(to)j(indicate)f(that)g(the)g (underlying)e(mec)m(h-)150 893 y(anism)31 b(detected)h(an)e(error)h (for)f(whic)m(h)h(no)g(sp)s(eci\014c)f(GSS)g(status)h(co)s(de)g(is)g (de\014ned.)41 b(The)30 b(mec)m(hanism-)150 1003 y(sp)s(eci\014c)g (status)h(co)s(de)f(will)h(pro)m(vide)g(more)f(details)i(ab)s(out)e (the)g(error.)275 1269 y(In)58 b(addition)h(to)h(the)g(explicit)g(ma)5 b(jor)59 b(status)h(co)s(des)f(for)g(eac)m(h)h(API)f(function,)66 b(the)60 b(co)s(de)150 1378 y Fj(GSS_S_FAILURE)42 b Fp(ma)m(y)j(b)s(e)g (returned)f(b)m(y)h(an)m(y)h(routine,)j(indicating)d(an)f(implemen)m (tation-sp)s(eci\014c)150 1488 y(or)58 b(mec)m(hanism-sp)s(eci\014c)g (error)f(condition,)65 b(further)56 b(details)j(of)e(whic)m(h)h(are)g (rep)s(orted)f(via)h(the)150 1597 y Fj(minor_status)27 b Fp(parameter.)150 1928 y Fi(3.4.2)63 b(Mec)m(hanism-sp)s(eci\014c)41 b(status)g(co)s(des)150 2075 y Fp(GSS-API)35 b(routines)h(return)f(a)i (minor)p 1511 2075 28 4 v 39 w(status)g(parameter,)h(whic)m(h)e(is)g (used)f(to)i(indicate)g(sp)s(ecialized)150 2184 y(errors)47 b(from)f(the)h(underlying)f(securit)m(y)i(mec)m(hanism.)91 b(This)46 b(parameter)i(ma)m(y)f(con)m(tain)i(a)e(single)150 2294 y(mec)m(hanism-sp)s(eci\014c)31 b(error,)f(indicated)h(b)m(y)f(a)h Fj(OM_uint32)d Fp(v)-5 b(alue.)275 2560 y(The)28 b(minor)p 699 2560 V 40 w(status)h(parameter)h(will)f(alw)m(a)m(ys)i(b)s(e)d(set) i(b)m(y)f(a)g(GSS-API)g(routine,)h(ev)m(en)f(if)h(it)f(returns)150 2669 y(a)40 b(calling)i(error)d(or)h(one)g(of)h(the)f(generic)h(API)e (errors)h(indicated)g(ab)s(o)m(v)m(e)h(as)f(fatal,)k(although)d(most) 150 2779 y(other)h(output)f(parameters)g(ma)m(y)h(remain)g(unset)e(in)i (suc)m(h)f(cases.)74 b(Ho)m(w)m(ev)m(er,)47 b(output)41 b(parameters)150 2888 y(that)35 b(are)f(exp)s(ected)h(to)f(return)f(p)s (oin)m(ters)h(to)h(storage)h(allo)s(cated)g(b)m(y)e(a)g(routine)g(m)m (ust)g(alw)m(a)m(ys)i(b)s(e)d(set)150 2998 y(b)m(y)g(the)f(routine,)i (ev)m(en)f(in)f(the)h(ev)m(en)m(t)h(of)f(an)g(error,)g(although)g(in)f (suc)m(h)g(cases)i(the)f(GSS-API)f(routine)150 3108 y(ma)m(y)39 b(elect)g(to)g(set)g(the)f(returned)f(parameter)h(v)-5 b(alue)39 b(to)g(NULL)f(to)g(indicate)h(that)g(no)f(storage)i(w)m(as) 150 3217 y(actually)g(allo)s(cated.)68 b(An)m(y)38 b(length)h(\014eld)f (asso)s(ciated)j(with)d(suc)m(h)g(p)s(oin)m(ters)h(\(as)g(in)f(a)h Fj(gss_buffer_)150 3327 y(desc)29 b Fp(structure\))h(should)g(also)h(b) s(e)f(set)h(to)g(zero)g(in)f(suc)m(h)g(cases.)150 3756 y Fo(3.5)68 b(Creden)l(tial)47 b(Managemen)l(t)293 3915 y Fj(GSS-API)f(Credential-management)c(Routines)293 4134 y(Routine)1191 b(Function)293 4244 y(-------)g(--------)293 4354 y(gss_acquire_cred)759 b(Assume)47 b(a)g(global)f(identity;)f (Obtain)1820 4463 y(a)j(GSS-API)e(credential)f(handle)h(for)1820 4573 y(pre-existing)f(credentials.)293 4682 y(gss_add_cred)951 b(Construct)46 b(credentials)1820 4792 y(incrementally.)293 4902 y(gss_inquire_cred)759 b(Obtain)47 b(information)d(about)j(a)1820 5011 y(credential.)293 5121 y(gss_inquire_cred_by_mech)375 b(Obtain)47 b(per-mechanism)d(information)1820 5230 y(about)j(a)g (credential.)293 5340 y(gss_release_cred)759 b(Discard)46 b(a)i(credential)d(handle.)p eop end %%Page: 19 23 TeXDict begin 19 22 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(19)150 299 y Fi(gss)p 316 299 37 5 v 55 w(acquire)p 759 299 V 54 w(cred)3350 494 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_acquire_cred)50 b Fg(\()p Ff(OM)p 1750 494 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)34 b(const)565 604 y(gss)p 688 604 V 40 w(name)p 940 604 V 40 w(t)d Fe(desired_name)12 b Ff(,)34 b(OM)p 1895 604 V 40 w(uin)m(t32)d Fe(time_req)12 b Ff(,)33 b(const)e(gss)p 3056 604 V 40 w(OID)p 3269 604 V 40 w(set)565 714 y Fe(desired_mechs)12 b Ff(,)34 b(gss)p 1435 714 V 40 w(cred)p 1642 714 V 40 w(usage)p 1899 714 V 41 w(t)d Fe(cred_usage)12 b Ff(,)33 b(gss)p 2713 714 V 40 w(cred)p 2920 714 V 40 w(id)p 3036 714 V 40 w(t)d(*)565 823 y Fe(output_cred_handle)12 b Ff(,)36 b(gss)p 1697 823 V 40 w(OID)p 1910 823 V 40 w(set)31 b(*)f Fe(actual_mechs)12 b Ff(,)34 b(OM)p 3016 823 V 40 w(uin)m(t32)e(*)565 933 y Fe(time_rec)12 b Fg(\))390 1042 y Ff(minor)p 629 1042 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 1176 y Ff(desired)p 675 1176 V 40 w(name)5 b Fp(:)46 b(\(gss)p 1155 1176 V 40 w(name)p 1407 1176 V 40 w(t,)34 b(read\))g(Name)f(of)h(principal)e(whose)h(creden)m(tial)h(should)e(b)s (e)h(ac-)390 1286 y(quired.)390 1420 y Ff(time)p 572 1420 V 41 w(req)r Fp(:)64 b(\(In)m(teger,)47 b(read,)f(optional\))e (Num)m(b)s(er)d(of)h(seconds)h(that)g(creden)m(tials)g(should)f(re-)390 1529 y(main)c(v)-5 b(alid.)64 b(Sp)s(ecify)37 b(GSS)p 1405 1529 V 39 w(C)p 1510 1529 V 40 w(INDEFINITE)h(to)h(request)e(that) i(the)f(creden)m(tials)i(ha)m(v)m(e)f(the)390 1639 y(maxim)m(um)30 b(p)s(ermitted)g(lifetime.)390 1773 y Ff(desired)p 675 1773 V 40 w(mec)m(hs)t Fp(:)93 b(\(Set)58 b(of)f(Ob)5 b(ject)57 b(IDs,)63 b(read,)h(optional\))58 b(Set)f(of)g(underlying)f (securit)m(y)390 1882 y(mec)m(hanisms)43 b(that)g(ma)m(y)g(b)s(e)f (used.)77 b(GSS)p 1919 1882 V 39 w(C)p 2024 1882 V 40 w(NO)p 2203 1882 V 40 w(OID)p 2416 1882 V 40 w(SET)41 b(ma)m(y)j(b)s(e)e(used)g(to)h(obtain)g(an)390 1992 y(implemen)m (tation-sp)s(eci\014c)32 b(default.)390 2126 y Ff(cred)p 563 2126 V 40 w(usage)5 b Fp(:)39 b(\(gss)p 1041 2126 V 41 w(cred)p 1249 2126 V 40 w(usage)p 1506 2126 V 40 w(t,)28 b(read\))f(GSS)p 2041 2126 V 39 w(C)p 2146 2126 V 40 w(BOTH)f(-)h(Creden)m(tials)g(ma)m(y)g(b)s(e)f(used)f(either)390 2235 y(to)34 b(initiate)h(or)e(accept)h(securit)m(y)g(con)m(texts.)51 b(GSS)p 2143 2235 V 39 w(C)p 2248 2235 V 40 w(INITIA)-8 b(TE)33 b(-)g(Creden)m(tials)h(will)f(only)h(b)s(e)390 2345 y(used)f(to)i(initiate)h(securit)m(y)f(con)m(texts.)54 b(GSS)p 1961 2345 V 39 w(C)p 2066 2345 V 40 w(A)m(CCEPT)33 b(-)i(Creden)m(tials)f(will)h(only)f(b)s(e)g(used)390 2455 y(to)d(accept)h(securit)m(y)f(con)m(texts.)390 2588 y Ff(output)p 664 2588 V 40 w(cred)p 871 2588 V 40 w(handle)5 b Fp(:)65 b(\(gss)p 1421 2588 V 40 w(cred)p 1628 2588 V 40 w(id)p 1744 2588 V 40 w(t,)46 b(mo)s(dify\))c(The)g(returned)g (creden)m(tial)i(handle.)77 b(Re-)390 2698 y(sources)40 b(asso)s(ciated)h(with)e(this)h(creden)m(tial)h(handle)f(m)m(ust)f(b)s (e)g(released)i(b)m(y)f(the)g(application)390 2808 y(after)31 b(use)f(with)g(a)h(call)g(to)h(gss)p 1446 2808 V 40 w(release)p 1748 2808 V 41 w(cred\(\).)390 2941 y Ff(actual)p 637 2941 V 41 w(mec)m(hs)t Fp(:)39 b(\(Set)28 b(of)f(Ob)5 b(ject)27 b(IDs,)h(mo)s(dify)-8 b(,)27 b(optional\))i(The)d(set)h(of)h (mec)m(hanisms)f(for)f(whic)m(h)390 3051 y(the)f(creden)m(tial)i(is)d (v)-5 b(alid.)40 b(Storage)26 b(asso)s(ciated)g(with)f(the)g(returned)e (OID-set)j(m)m(ust)f(b)s(e)f(released)390 3161 y(b)m(y)30 b(the)g(application)h(after)g(use)e(with)h(a)g(call)h(to)g(gss)p 2194 3161 V 40 w(release)p 2496 3161 V 42 w(oid)p 2659 3161 V 40 w(set\(\).)42 b(Sp)s(ecify)29 b(NULL)h(if)g(not)390 3270 y(required.)390 3404 y Ff(time)p 572 3404 V 41 w(rec)6 b Fp(:)36 b(\(In)m(teger,)26 b(mo)s(dify)-8 b(,)24 b(optional\))g (Actual)g(n)m(um)m(b)s(er)d(of)h(seconds)h(for)f(whic)m(h)g(the)h (returned)390 3514 y(creden)m(tials)37 b(will)g(remain)e(v)-5 b(alid.)58 b(If)36 b(the)g(implemen)m(tation)h(do)s(es)f(not)g(supp)s (ort)e(expiration)j(of)390 3623 y(creden)m(tials,)j(the)d(v)-5 b(alue)37 b(GSS)p 1459 3623 V 40 w(C)p 1565 3623 V 39 w(INDEFINITE)g(will)g(b)s(e)f(returned.)59 b(Sp)s(ecify)36 b(NULL)h(if)g(not)390 3733 y(required.)390 3867 y(Allo)m(ws)27 b(an)e(application)j(to)e(acquire)g(a)h(handle)e(for)g(a)i (pre-existing)f(creden)m(tial)h(b)m(y)f(name.)39 b(GSS-)390 3976 y(API)45 b(implemen)m(tations)i(m)m(ust)e(imp)s(ose)g(a)g(lo)s (cal)i(access-con)m(trol)h(p)s(olicy)d(on)g(callers)i(of)e(this)390 4086 y(routine)32 b(to)h(prev)m(en)m(t)g(unauthorized)e(callers)i(from) f(acquiring)g(creden)m(tials)i(to)f(whic)m(h)e(they)i(are)390 4196 y(not)23 b(en)m(titled.)39 b(This)22 b(routine)g(is)h(not)f(in)m (tended)h(to)g(pro)m(vide)f(a)h Fj(")p Fp(login)g(to)g(the)g(net)m(w)m (ork)p Fj(")g Fp(function,)390 4305 y(as)34 b(suc)m(h)f(a)h(function)f (w)m(ould)h(in)m(v)m(olv)m(e)h(the)f(creation)h(of)f(new)f(creden)m (tials)i(rather)e(than)h(merely)390 4415 y(acquiring)44 b(a)f(handle)g(to)h(existing)h(creden)m(tials.)81 b(Suc)m(h)42 b(functions,)47 b(if)c(required,)j(should)d(b)s(e)390 4524 y(de\014ned)29 b(in)h(implemen)m(tation-sp)s(eci\014c)i (extensions)f(to)g(the)g(API.)390 4658 y(If)i(desired)p 769 4658 V 39 w(name)g(is)g(GSS)p 1320 4658 V 40 w(C)p 1426 4658 V 39 w(NO)p 1604 4658 V 40 w(NAME,)h(the)f(call)i(is)e(in)m (terpreted)g(as)g(a)h(request)f(for)g(a)g(cre-)390 4768 y(den)m(tial)26 b(handle)f(that)h(will)g(in)m(v)m(ok)m(e)h(default)f(b) s(eha)m(vior)f(when)f(passed)h(to)h(gss)p 3019 4768 V 40 w(init)p 3195 4768 V 41 w(sec)p 3352 4768 V 40 w(con)m(text\(\))390 4877 y(\(if)g(cred)p 677 4877 V 40 w(usage)g(is)g(GSS)p 1220 4877 V 39 w(C)p 1325 4877 V 40 w(INITIA)-8 b(TE)25 b(or)h(GSS)p 2091 4877 V 39 w(C)p 2196 4877 V 40 w(BOTH\))f(or)h(gss)p 2789 4877 V 40 w(accept)p 3080 4877 V 42 w(sec)p 3238 4877 V 40 w(con)m(text\(\))j(\(if)390 4987 y(cred)p 563 4987 V 40 w(usage)i(is)f(GSS)p 1115 4987 V 40 w(C)p 1221 4987 V 39 w(A)m(CCEPT)g(or)g(GSS)p 1961 4987 V 40 w(C)p 2067 4987 V 39 w(BOTH\).)390 5121 y(Mec)m(hanisms)f(should)f(honor)g (the)h(desired)p 1882 5121 V 39 w(mec)m(hs)g(parameter,)h(and)e(return) f(a)i(creden)m(tial)h(that)390 5230 y(is)36 b(suitable)h(to)f(use)g (only)g(with)g(the)g(requested)g(mec)m(hanisms.)58 b(An)36 b(exception)h(to)g(this)f(is)g(the)390 5340 y(case)29 b(where)e(one)i(underlying)d(creden)m(tial)k(elemen)m(t)f(can)g(b)s(e)e (shared)g(b)m(y)h(m)m(ultiple)h(mec)m(hanisms;)p eop end %%Page: 20 24 TeXDict begin 20 23 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(20)390 299 y(in)34 b(this)g(case)i(it) f(is)f(p)s(ermissible)g(for)g(an)h(implemen)m(tation)h(to)f(indicate)g (all)h(mec)m(hanisms)e(with)390 408 y(whic)m(h)25 b(the)h(creden)m (tial)h(elemen)m(t)h(ma)m(y)e(b)s(e)f(used.)38 b(If)26 b(desired)p 2465 408 28 4 v 39 w(mec)m(hs)g(is)g(an)f(empt)m(y)h(set,)i (b)s(eha)m(vior)390 518 y(is)i(unde\014ned.)390 650 y(This)h(routine)h (is)g(exp)s(ected)g(to)h(b)s(e)e(used)g(primarily)g(b)m(y)h(con)m(text) i(acceptors,)g(since)e(implemen-)390 760 y(tations)40 b(are)f(lik)m(ely)i(to)e(pro)m(vide)g(mec)m(hanism-sp)s(eci\014c)h(w)m (a)m(ys)g(of)f(obtaining)g(GSS-API)g(initia-)390 869 y(tor)34 b(creden)m(tials)h(from)e(the)g(system)h(login)g(pro)s(cess.) 50 b(Some)33 b(implemen)m(tations)i(ma)m(y)f(therefore)390 979 y(not)39 b(supp)s(ort)e(the)i(acquisition)h(of)f(GSS)p 1827 979 V 39 w(C)p 1932 979 V 40 w(INITIA)-8 b(TE)38 b(or)h(GSS)p 2724 979 V 39 w(C)p 2829 979 V 40 w(BOTH)f(creden)m(tials) i(via)390 1089 y(gss)p 513 1089 V 40 w(acquire)p 838 1089 V 41 w(cred)35 b(for)g(an)m(y)g(name)g(other)g(than)g(GSS)p 2280 1089 V 40 w(C)p 2386 1089 V 39 w(NO)p 2564 1089 V 40 w(NAME,)h(or)f(a)g(name)h(pro)s(duced)390 1198 y(b)m(y)28 b(applying)f(either)h(gss)p 1260 1198 V 41 w(inquire)p 1577 1198 V 39 w(cred)g(to)g(a)g(v)-5 b(alid)28 b(creden)m(tial,)j(or)c (gss)p 2875 1198 V 40 w(inquire)p 3191 1198 V 40 w(con)m(text)j(to)e (an)390 1308 y(activ)m(e)33 b(con)m(text.)390 1440 y(If)67 b(creden)m(tial)i(acquisition)g(is)f(time-consuming)g(for)f(a)h(mec)m (hanism,)78 b(the)68 b(mec)m(hanism)390 1550 y(ma)m(y)50 b(c)m(ho)s(ose)h(to)f(dela)m(y)h(the)f(actual)h(acquisition)g(un)m(til) f(the)g(creden)m(tial)h(is)e(required)g(\(e.g.)390 1659 y(b)m(y)78 b(gss)p 687 1659 V 40 w(init)p 863 1659 V 41 w(sec)p 1020 1659 V 40 w(con)m(text)j(or)d(gss)p 1708 1659 V 40 w(accept)p 1999 1659 V 42 w(sec)p 2157 1659 V 40 w(con)m(text\).)187 b(Suc)m(h)77 b(mec)m(hanism-sp)s(eci\014c)390 1769 y(implemen)m(tation)41 b(decisions)f(should)e(b)s(e)h(in)m (visible)g(to)h(the)g(calling)h(application;)k(th)m(us)39 b(a)h(call)390 1878 y(of)i(gss)p 628 1878 V 40 w(inquire)p 944 1878 V 40 w(cred)g(immediately)h(follo)m(wing)h(the)e(call)h(of)f (gss)p 2696 1878 V 41 w(acquire)p 3022 1878 V 40 w(cred)g(m)m(ust)g (return)390 1988 y(v)-5 b(alid)35 b(creden)m(tial)g(data,)i(and)c(ma)m (y)i(therefore)g(incur)e(the)i(o)m(v)m(erhead)g(of)f(a)h(deferred)e (creden)m(tial)390 2097 y(acquisition.)390 2230 y(Return)d(v)-5 b(alue:)390 2362 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2494 y Fj(GSS_S_BAD_MECH)p Fp(:)37 b(Una)m(v)-5 b(ailable)32 b(mec)m(hanism)f(requested.)390 2626 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)56 b(T)m(yp)s(e)40 b(con)m(tained)h(within)f(desired)p 2579 2626 V 40 w(name)g(parameter)h (is)f(not)h(sup-)390 2736 y(p)s(orted.)390 2868 y Fj(GSS_S_BAD_NAME)p Fp(:)c(V)-8 b(alue)31 b(supplied)e(for)i(desired)p 2160 2868 V 39 w(name)g(parameter)f(is)h(ill)g(formed.)390 3000 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)45 b(The)35 b(creden)m(tials)i(could)e(not)h(b)s(e)f(acquired)g(Because)i(they)390 3110 y(ha)m(v)m(e)32 b(expired.)390 3242 y Fj(GSS_S_NO_CRED)p Fp(:)37 b(No)31 b(creden)m(tials)h(w)m(ere)f(found)e(for)h(the)g(sp)s (eci\014ed)g(name.)150 3436 y Fi(gss)p 316 3436 37 5 v 55 w(add)p 567 3436 V 54 w(cred)3350 3628 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_add_cred)49 b Fg(\()p Ff(OM)p 1541 3628 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)33 b(const)565 3738 y(gss)p 688 3738 V 40 w(cred)p 895 3738 V 40 w(id)p 1011 3738 V 40 w(t)e Fe(input_cred_handle)12 b Ff(,)35 b(const)c(gss)p 2428 3738 V 40 w(name)p 2680 3738 V 40 w(t)g Fe(desired_name)12 b Ff(,)33 b(const)565 3848 y(gss)p 688 3848 V 40 w(OID)e Fe(desired_mech)12 b Ff(,)33 b(gss)p 1743 3848 V 40 w(cred)p 1950 3848 V 40 w(usage)p 2207 3848 V 41 w(t)e Fe(cred_usage)12 b Ff(,)33 b(OM)p 3058 3848 V 40 w(uin)m(t32)565 3957 y Fe(initiator_time_req)12 b Ff(,)36 b(OM)p 1734 3957 V 40 w(uin)m(t32)31 b Fe(acceptor_time_req)12 b Ff(,)35 b(gss)p 3127 3957 V 40 w(cred)p 3334 3957 V 40 w(id)p 3450 3957 V 40 w(t)c(*)565 4067 y Fe(output_cred_handle)12 b Ff(,)36 b(gss)p 1697 4067 V 40 w(OID)p 1910 4067 V 40 w(set)31 b(*)f Fe(actual_mechs)12 b Ff(,)34 b(OM)p 3016 4067 V 40 w(uin)m(t32)e(*)565 4176 y Fe(initiator_time_rec)12 b Ff(,)36 b(OM)p 1734 4176 V 40 w(uin)m(t32)31 b(*)g Fe(acceptor_time_rec)12 b Fg(\))390 4286 y Ff(minor)p 629 4286 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d (Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 4418 y Ff(input)p 609 4418 V 39 w(cred)p 815 4418 V 40 w(handle)5 b Fp(:)109 b(\(gss)p 1409 4418 V 40 w(cred)p 1616 4418 V 40 w(id)p 1732 4418 V 40 w(t,)74 b(read,)f(optional\))66 b(The)e(creden)m(tial)i(to)f(whic)m(h)g(a)390 4528 y(creden)m (tial-elemen)m(t)50 b(will)c(b)s(e)g(added.)88 b(If)46 b(GSS)p 2123 4528 V 39 w(C)p 2228 4528 V 40 w(NO)p 2407 4528 V 40 w(CREDENTIAL)f(is)i(sp)s(eci\014ed,)j(the)390 4637 y(routine)35 b(will)g(comp)s(ose)g(the)f(new)h(creden)m(tial)h (based)e(on)h(default)f(b)s(eha)m(vior)h(\(see)h(text\).)55 b(Note)390 4747 y(that,)39 b(while)e(the)g(creden)m(tial-handle)i(is)d (not)i(mo)s(di\014ed)d(b)m(y)i(gss)p 2643 4747 V 40 w(add)p 2830 4747 V 40 w(cred\(\),)i(the)e(underlying)390 4856 y(creden)m(tial)32 b(will)f(b)s(e)e(mo)s(di\014ed)h(if)g(output)p 1831 4856 V 40 w(creden)m(tial)p 2256 4856 V 41 w(handle)g(is)h(NULL.) 390 4989 y Ff(desired)p 675 4989 V 40 w(name)5 b Fp(:)63 b(\(gss)p 1172 4989 V 41 w(name)p 1425 4989 V 40 w(t,)45 b(read.\))76 b(Name)42 b(of)g(principal)g(whose)f(creden)m(tial)j (should)d(b)s(e)390 5098 y(acquired.)390 5230 y Ff(desired)p 675 5230 V 40 w(mec)m(h)p Fp(:)f(\(Ob)5 b(ject)30 b(ID,)h(read\))e (Underlying)h(securit)m(y)g(mec)m(hanism)g(with)f(whic)m(h)g(the)h (cre-)390 5340 y(den)m(tial)i(ma)m(y)e(b)s(e)g(used.)p eop end %%Page: 21 25 TeXDict begin 21 24 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(21)390 299 y Ff(cred)p 563 299 28 4 v 40 w(usage)5 b Fp(:)42 b(\(gss)p 1044 299 V 40 w(cred)p 1251 299 V 40 w(usage)p 1508 299 V 41 w(t,)31 b(read\))g(GSS)p 2051 299 V 40 w(C)p 2157 299 V 39 w(BOTH)g(-)g(Creden)m(tial)g(ma)m(y)h(b)s(e)e(used)f(either) 390 408 y(to)37 b(initiate)g(or)f(accept)i(securit)m(y)e(con)m(texts.) 59 b(GSS)p 2165 408 V 40 w(C)p 2271 408 V 39 w(INITIA)-8 b(TE)35 b(-)i(Creden)m(tial)f(will)h(only)f(b)s(e)390 518 y(used)27 b(to)i(initiate)h(securit)m(y)f(con)m(texts.)41 b(GSS)p 1924 518 V 40 w(C)p 2030 518 V 39 w(A)m(CCEPT)28 b(-)g(Creden)m(tial)h(will)f(only)g(b)s(e)g(used)f(to)390 628 y(accept)32 b(securit)m(y)f(con)m(texts.)390 765 y Ff(initiator)p 718 765 V 41 w(time)p 935 765 V 41 w(req)r Fp(:)60 b(\(In)m(teger,)43 b(read,)g(optional\))e(n)m(um)m(b)s(er)d(of) i(seconds)g(that)g(the)g(creden)m(tial)390 874 y(should)32 b(remain)i(v)-5 b(alid)34 b(for)f(initiating)i(securit)m(y)f(con)m (texts.)52 b(This)32 b(argumen)m(t)i(is)g(ignored)f(if)h(the)390 984 y(comp)s(osed)27 b(creden)m(tials)h(are)f(of)g(t)m(yp)s(e)h(GSS)p 1882 984 V 39 w(C)p 1987 984 V 40 w(A)m(CCEPT.)e(Sp)s(ecify)g(GSS)p 2950 984 V 40 w(C)p 3056 984 V 39 w(INDEFINITE)h(to)390 1093 y(request)j(that)h(the)g(creden)m(tials)h(ha)m(v)m(e)f(the)g (maxim)m(um)f(p)s(ermitted)g(initiator)i(lifetime.)390 1230 y Ff(acceptor)p 728 1230 V 42 w(time)p 946 1230 V 40 w(req)r Fp(:)58 b(\(In)m(teger,)42 b(read,)f(optional\))g(n)m(um)m (b)s(er)c(of)i(seconds)g(that)g(the)g(creden)m(tial)390 1340 y(should)32 b(remain)g(v)-5 b(alid)33 b(for)g(accepting)h(securit) m(y)g(con)m(texts.)49 b(This)32 b(argumen)m(t)h(is)g(ignored)g(if)g (the)390 1450 y(comp)s(osed)k(creden)m(tials)i(are)f(of)g(t)m(yp)s(e)f (GSS)p 1934 1450 V 39 w(C)p 2039 1450 V 40 w(INITIA)-8 b(TE.)37 b(Sp)s(ecify)g(GSS)p 3058 1450 V 39 w(C)p 3163 1450 V 40 w(INDEFINITE)390 1559 y(to)31 b(request)g(that)f(the)h (creden)m(tials)h(ha)m(v)m(e)f(the)g(maxim)m(um)f(p)s(ermitted)g (initiator)i(lifetime.)390 1696 y Ff(output)p 664 1696 V 40 w(cred)p 871 1696 V 40 w(handle)5 b Fp(:)50 b(\(gss)p 1406 1696 V 41 w(cred)p 1614 1696 V 40 w(id)p 1730 1696 V 40 w(t,)37 b(mo)s(dify)-8 b(,)37 b(optional\))g(The)e(returned)f (creden)m(tial)j(han-)390 1806 y(dle,)k(con)m(taining)e(the)g(new)f (creden)m(tial-elemen)m(t)j(and)d(all)h(the)g(creden)m(tial-elemen)m (ts)i(from)d(in-)390 1915 y(put)p 533 1915 V 39 w(cred)p 739 1915 V 40 w(handle.)45 b(If)31 b(a)h(v)-5 b(alid)32 b(p)s(oin)m(ter)g(to)h(a)f(gss)p 2124 1915 V 40 w(cred)p 2331 1915 V 40 w(id)p 2447 1915 V 40 w(t)g(is)f(supplied)g(for)h(this)f (parameter,)390 2025 y(gss)p 513 2025 V 40 w(add)p 700 2025 V 40 w(cred)f(creates)i(a)f(new)f(creden)m(tial)i(handle)e(con)m (taining)i(all)g(creden)m(tial-elemen)m(ts)h(from)390 2134 y(the)j(input)p 771 2134 V 39 w(cred)p 977 2134 V 40 w(handle)g(and)f(the)h(newly)g(acquired)g(creden)m(tial-elemen)m (t;)42 b(if)36 b(NULL)g(is)g(sp)s(ec-)390 2244 y(i\014ed)e(for)g(this)h (parameter,)h(the)f(newly)f(acquired)g(creden)m(tial-elemen)m(t)k(will) d(b)s(e)f(added)g(to)h(the)390 2354 y(creden)m(tial)27 b(iden)m(ti\014ed)e(b)m(y)g(input)p 1533 2354 V 39 w(cred)p 1739 2354 V 40 w(handle.)38 b(The)25 b(resources)g(asso)s(ciated)i (with)d(an)m(y)i(creden-)390 2463 y(tial)31 b(handle)e(returned)f(via)i (this)f(parameter)h(m)m(ust)g(b)s(e)e(released)j(b)m(y)e(the)h (application)g(after)g(use)390 2573 y(with)g(a)h(call)g(to)h(gss)p 1074 2573 V 40 w(release)p 1376 2573 V 41 w(cred\(\).)390 2710 y Ff(actual)p 637 2710 V 41 w(mec)m(hs)t Fp(:)40 b(\(Set)29 b(of)f(Ob)5 b(ject)28 b(IDs,)h(mo)s(dify)-8 b(,)28 b(optional\))i(The)d(complete)j(set)f(of)f(mec)m(hanisms)390 2819 y(for)g(whic)m(h)g(the)g(new)g(creden)m(tial)i(is)e(v)-5 b(alid.)41 b(Storage)29 b(for)f(the)g(returned)f(OID-set)j(m)m(ust)e(b) s(e)f(freed)390 2929 y(b)m(y)j(the)g(application)h(after)g(use)e(with)h (a)g(call)h(to)g(gss)p 2194 2929 V 40 w(release)p 2496 2929 V 42 w(oid)p 2659 2929 V 40 w(set\(\).)42 b(Sp)s(ecify)29 b(NULL)h(if)g(not)390 3039 y(required.)390 3176 y Ff(initiator)p 718 3176 V 41 w(time)p 935 3176 V 41 w(rec)6 b Fp(:)57 b(\(In)m(teger,)41 b(mo)s(dify)-8 b(,)41 b(optional\))e(Actual)h(n)m (um)m(b)s(er)d(of)h(seconds)g(for)g(whic)m(h)390 3285 y(the)e(returned)f(creden)m(tials)j(will)e(remain)h(v)-5 b(alid)36 b(for)g(initiating)i(con)m(texts)g(using)d(the)i(sp)s (eci\014ed)390 3395 y(mec)m(hanism.)84 b(If)45 b(the)g(implemen)m (tation)h(or)f(mec)m(hanism)g(do)s(es)f(not)h(supp)s(ort)e(expiration)j (of)390 3504 y(creden)m(tials,)40 b(the)d(v)-5 b(alue)37 b(GSS)p 1459 3504 V 40 w(C)p 1565 3504 V 39 w(INDEFINITE)g(will)g(b)s (e)f(returned.)59 b(Sp)s(ecify)36 b(NULL)h(if)g(not)390 3614 y(required)390 3751 y Ff(acceptor)p 728 3751 V 42 w(time)p 946 3751 V 40 w(rec)6 b Fp(:)55 b(\(In)m(teger,)40 b(mo)s(dify)-8 b(,)39 b(optional\))g(Actual)f(n)m(um)m(b)s(er)e(of)i (seconds)f(for)g(whic)m(h)390 3861 y(the)h(returned)f(creden)m(tials)i (will)f(remain)f(v)-5 b(alid)39 b(for)e(accepting)i(securit)m(y)g(con)m (texts)g(using)f(the)390 3970 y(sp)s(eci\014ed)20 b(mec)m(hanism.)38 b(If)20 b(the)h(implemen)m(tation)h(or)f(mec)m(hanism)g(do)s(es)f(not)h (supp)s(ort)e(expiration)390 4080 y(of)28 b(creden)m(tials,)i(the)e(v) -5 b(alue)29 b(GSS)p 1533 4080 V 39 w(C)p 1638 4080 V 40 w(INDEFINITE)f(will)g(b)s(e)f(returned.)39 b(Sp)s(ecify)27 b(NULL)h(if)g(not)390 4189 y(required)390 4326 y(Adds)f(a)i(creden)m (tial-elemen)m(t)i(to)e(a)g(creden)m(tial.)41 b(The)28 b(creden)m(tial-elemen)m(t)j(is)d(iden)m(ti\014ed)h(b)m(y)f(the)390 4436 y(name)36 b(of)g(the)g(principal)g(to)g(whic)m(h)g(it)g(refers.)57 b(GSS-API)36 b(implemen)m(tations)h(m)m(ust)f(imp)s(ose)g(a)390 4545 y(lo)s(cal)i(access-con)m(trol)i(p)s(olicy)c(on)h(callers)h(of)e (this)h(routine)f(to)i(prev)m(en)m(t)f(unauthorized)f(callers)390 4655 y(from)26 b(acquiring)i(creden)m(tial-elemen)m(ts)i(to)e(whic)m(h) e(they)h(are)h(not)f(en)m(titled.)41 b(This)26 b(routine)h(is)g(not)390 4765 y(in)m(tended)33 b(to)i(pro)m(vide)e(a)h Fj(")p Fp(login)h(to)f(the)g(net)m(w)m(ork)p Fj(")g Fp(function,)g(as)g(suc)m (h)f(a)h(function)g(w)m(ould)f(in-)390 4874 y(v)m(olv)m(e)28 b(the)f(creation)h(of)e(new)g(mec)m(hanism-sp)s(eci\014c)h(authen)m (tication)i(data,)f(rather)e(than)h(merely)390 4984 y(acquiring)32 b(a)h(GSS-API)e(handle)h(to)h(existing)g(data.)47 b(Suc)m(h)31 b(functions,)h(if)g(required,)g(should)g(b)s(e)390 5093 y(de\014ned)d(in)h(implemen)m(tation-sp)s(eci\014c)i(extensions)f(to)g (the)g(API.)390 5230 y(If)22 b(desired)p 758 5230 V 39 w(name)h(is)f(GSS)p 1288 5230 V 39 w(C)p 1393 5230 V 40 w(NO)p 1572 5230 V 40 w(NAME,)h(the)f(call)i(is)e(in)m(terpreted)h (as)f(a)h(request)f(to)h(add)f(a)g(cre-)390 5340 y(den)m(tial)g(elemen) m(t)h(that)e(will)h(in)m(v)m(ok)m(e)h(default)e(b)s(eha)m(vior)g(when)f (passed)g(to)i(gss)p 3019 5340 V 40 w(init)p 3195 5340 V 41 w(sec)p 3352 5340 V 40 w(con)m(text\(\))p eop end %%Page: 22 26 TeXDict begin 22 25 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(22)390 299 y(\(if)26 b(cred)p 677 299 28 4 v 40 w(usage)g(is)g(GSS)p 1220 299 V 39 w(C)p 1325 299 V 40 w(INITIA)-8 b(TE)25 b(or)h(GSS)p 2091 299 V 39 w(C)p 2196 299 V 40 w(BOTH\))f(or)h(gss)p 2789 299 V 40 w(accept)p 3080 299 V 42 w(sec)p 3238 299 V 40 w(con)m(text\(\))j(\(if)390 408 y(cred)p 563 408 V 40 w(usage)i(is)f(GSS)p 1115 408 V 40 w(C)p 1221 408 V 39 w(A)m(CCEPT)g(or)g(GSS)p 1961 408 V 40 w(C)p 2067 408 V 39 w(BOTH\).)390 559 y(This)h(routine)h(is)g(exp)s(ected)g(to)h (b)s(e)e(used)g(primarily)g(b)m(y)h(con)m(text)i(acceptors,)g(since)e (implemen-)390 668 y(tations)40 b(are)f(lik)m(ely)i(to)e(pro)m(vide)g (mec)m(hanism-sp)s(eci\014c)h(w)m(a)m(ys)g(of)f(obtaining)g(GSS-API)g (initia-)390 778 y(tor)34 b(creden)m(tials)h(from)e(the)g(system)h (login)g(pro)s(cess.)50 b(Some)33 b(implemen)m(tations)i(ma)m(y)f (therefore)390 888 y(not)39 b(supp)s(ort)e(the)i(acquisition)h(of)f (GSS)p 1827 888 V 39 w(C)p 1932 888 V 40 w(INITIA)-8 b(TE)38 b(or)h(GSS)p 2724 888 V 39 w(C)p 2829 888 V 40 w(BOTH)f(creden)m(tials)i(via)390 997 y(gss)p 513 997 V 40 w(acquire)p 838 997 V 41 w(cred)35 b(for)g(an)m(y)g(name)g(other)g (than)g(GSS)p 2280 997 V 40 w(C)p 2386 997 V 39 w(NO)p 2564 997 V 40 w(NAME,)h(or)f(a)g(name)h(pro)s(duced)390 1107 y(b)m(y)28 b(applying)f(either)h(gss)p 1260 1107 V 41 w(inquire)p 1577 1107 V 39 w(cred)g(to)g(a)g(v)-5 b(alid)28 b(creden)m(tial,)j(or)c(gss)p 2875 1107 V 40 w(inquire)p 3191 1107 V 40 w(con)m(text)j(to)e(an)390 1216 y(activ)m(e)33 b(con)m(text.)390 1367 y(If)67 b(creden)m(tial)i (acquisition)g(is)f(time-consuming)g(for)f(a)h(mec)m(hanism,)78 b(the)68 b(mec)m(hanism)390 1476 y(ma)m(y)50 b(c)m(ho)s(ose)h(to)f (dela)m(y)h(the)f(actual)h(acquisition)g(un)m(til)f(the)g(creden)m (tial)h(is)e(required)g(\(e.g.)390 1586 y(b)m(y)78 b(gss)p 687 1586 V 40 w(init)p 863 1586 V 41 w(sec)p 1020 1586 V 40 w(con)m(text)j(or)d(gss)p 1708 1586 V 40 w(accept)p 1999 1586 V 42 w(sec)p 2157 1586 V 40 w(con)m(text\).)187 b(Suc)m(h)77 b(mec)m(hanism-sp)s(eci\014c)390 1696 y(implemen)m(tation) 41 b(decisions)f(should)e(b)s(e)h(in)m(visible)g(to)h(the)g(calling)h (application;)k(th)m(us)39 b(a)h(call)390 1805 y(of)33 b(gss)p 619 1805 V 40 w(inquire)p 935 1805 V 40 w(cred)f(immediately)i (follo)m(wing)h(the)e(call)h(of)f(gss)p 2632 1805 V 40 w(add)p 2819 1805 V 40 w(cred)f(m)m(ust)h(return)f(v)-5 b(alid)390 1915 y(creden)m(tial)56 b(data,)61 b(and)53 b(ma)m(y)i(therefore)f(incur)g(the)g(o)m(v)m(erhead)h(of)g(a)f (deferred)f(creden)m(tial)390 2024 y(acquisition.)390 2175 y(This)25 b(routine)h(can)g(b)s(e)f(used)g(to)i(either)f(comp)s (ose)g(a)g(new)g(creden)m(tial)h(con)m(taining)g(all)g(creden)m(tial-) 390 2284 y(elemen)m(ts)g(of)f(the)g(original)g(in)g(addition)g(to)g (the)g(newly-acquire)g(creden)m(tial-elemen)m(t,)k(or)c(to)h(add)390 2394 y(the)38 b(new)f(creden)m(tial-)j(elemen)m(t)g(to)e(an)g(existing) h(creden)m(tial.)65 b(If)37 b(NULL)h(is)g(sp)s(eci\014ed)f(for)h(the) 390 2503 y(output)p 664 2503 V 40 w(cred)p 871 2503 V 40 w(handle)e(parameter)i(argumen)m(t,)i(the)d(new)g(creden)m (tial-elemen)m(t)j(will)e(b)s(e)f(added)390 2613 y(to)28 b(the)f(creden)m(tial)i(iden)m(ti\014ed)e(b)m(y)g(input)p 1800 2613 V 40 w(cred)p 2007 2613 V 39 w(handle;)i(if)e(a)g(v)-5 b(alid)28 b(p)s(oin)m(ter)f(is)g(sp)s(eci\014ed)g(for)g(the)390 2723 y(output)p 664 2723 V 40 w(cred)p 871 2723 V 40 w(handle)j(parameter,)h(a)f(new)g(creden)m(tial)i(handle)e(will)h(b)s (e)f(created.)390 2873 y(If)22 b(GSS)p 652 2873 V 39 w(C)p 757 2873 V 40 w(NO)p 936 2873 V 40 w(CREDENTIAL)g(is)g(sp)s (eci\014ed)g(as)h(the)g(input)p 2524 2873 V 39 w(cred)p 2730 2873 V 40 w(handle,)h(gss)p 3199 2873 V 40 w(add)p 3386 2873 V 39 w(cred)f(will)390 2983 y(comp)s(ose)31 b(a)h(creden)m(tial)h(\(and)e(set)g(the)h(output)p 2039 2983 V 39 w(cred)p 2245 2983 V 40 w(handle)f(parameter)h(accordingly\)) g(based)390 3092 y(on)i(default)g(b)s(eha)m(vior.)50 b(That)34 b(is,)h(the)f(call)h(will)f(ha)m(v)m(e)h(the)f(same)g (e\013ect)h(as)f(if)g(the)g(application)390 3202 y(had)k(\014rst)g (made)h(a)g(call)h(to)g(gss)p 1524 3202 V 40 w(acquire)p 1849 3202 V 41 w(cred\(\),)i(sp)s(ecifying)c(the)h(same)g(usage)h(and)e (passing)390 3311 y(GSS)p 569 3311 V 39 w(C)p 674 3311 V 40 w(NO)p 853 3311 V 40 w(NAME)f(as)h(the)f(desired)p 1772 3311 V 39 w(name)g(parameter)h(to)g(obtain)f(an)g(explicit)h (creden)m(tial)390 3421 y(handle)31 b(em)m(b)s(o)s(dying)f(default)h(b) s(eha)m(vior,)h(passed)e(this)h(creden)m(tial)i(handle)e(to)g(gss)p 3266 3421 V 41 w(add)p 3454 3421 V 39 w(cred\(\),)390 3531 y(and)f(\014nally)g(called)i(gss)p 1223 3531 V 40 w(release)p 1525 3531 V 41 w(cred\(\))f(on)f(the)h(\014rst)f(creden)m (tial)h(handle.)390 3681 y(If)22 b(GSS)p 652 3681 V 40 w(C)p 758 3681 V 39 w(NO)p 936 3681 V 40 w(CREDENTIAL)g(is)h(sp)s (eci\014ed)f(as)i(the)f(input)p 2526 3681 V 39 w(cred)p 2732 3681 V 40 w(handle)f(parameter,)j(a)e(non-)390 3790 y(NULL)30 b(output)p 944 3790 V 40 w(cred)p 1151 3790 V 40 w(handle)g(m)m(ust)g(b)s(e)g(supplied.)390 3941 y(Return)g(v)-5 b(alue:)390 4091 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 4242 y Fj(GSS_S_BAD_MECH)p Fp(:)37 b(Una)m(v)-5 b(ailable)32 b(mec)m(hanism)f(requested.)390 4392 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)56 b(T)m(yp)s(e)40 b(con)m(tained)h(within)f(desired)p 2579 4392 V 40 w(name)g(parameter)h (is)f(not)h(sup-)390 4502 y(p)s(orted.)390 4652 y Fj(GSS_S_BAD_NAME)p Fp(:)c(V)-8 b(alue)31 b(supplied)e(for)i(desired)p 2160 4652 V 39 w(name)g(parameter)f(is)h(ill-formed.)390 4802 y Fj(GSS_S_DUPLICATE_ELEMENT)p Fp(:)45 b(The)35 b(creden)m(tial)i (already)f(con)m(tains)g(an)g(elemen)m(t)h(for)e(the)h(re-)390 4912 y(quested)30 b(mec)m(hanism)h(with)f(o)m(v)m(erlapping)i(usage)f (and)e(v)-5 b(alidit)m(y)32 b(p)s(erio)s(d.)390 5062 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)k(The)30 b(required)g(creden)m (tials)i(could)f(not)g(b)s(e)f(added)g(b)s(ecause)390 5172 y(they)h(ha)m(v)m(e)g(expired.)390 5322 y Fj(GSS_S_NO_CRED)p Fp(:)37 b(No)31 b(creden)m(tials)h(w)m(ere)f(found)e(for)h(the)g(sp)s (eci\014ed)g(name.)p eop end %%Page: 23 27 TeXDict begin 23 26 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(23)150 299 y Fi(gss)p 316 299 37 5 v 55 w(inquire)p 746 299 V 55 w(cred)3350 505 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_cred)50 b Fg(\()p Ff(OM)p 1750 505 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)34 b(const)565 614 y(gss)p 688 614 V 40 w(cred)p 895 614 V 40 w(id)p 1011 614 V 40 w(t)d Fe(cred_handle)12 b Ff(,)33 b(gss)p 1876 614 V 40 w(name)p 2128 614 V 40 w(t)e(*)g Fe(name)12 b Ff(,)31 b(OM)p 2740 614 V 40 w(uin)m(t32)g(*)g Fe(lifetime)12 b Ff(,)565 724 y(gss)p 688 724 V 40 w(cred)p 895 724 V 40 w(usage)p 1152 724 V 41 w(t)31 b(*)f Fe(cred_usage)12 b Ff(,)33 b(gss)p 2041 724 V 41 w(OID)p 2255 724 V 40 w(set)d(*)h Fe(mechanisms)12 b Fg(\))390 833 y Ff(minor)p 629 833 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec) m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 977 y Ff(cred)p 563 977 V 40 w(handle)5 b Fp(:)37 b(\(gss)p 1085 977 V 41 w(cred)p 1293 977 V 40 w(id)p 1409 977 V 39 w(t,)26 b(read\))e(A)h(handle)e(that)i(refers)f(to)g(the)h(target) g(creden)m(tial.)40 b(Sp)s(ec-)390 1087 y(ify)30 b(GSS)p 700 1087 V 40 w(C)p 806 1087 V 39 w(NO)p 984 1087 V 40 w(CREDENTIAL)g(to)h(inquire)f(ab)s(out)g(the)h(default)f(initiator)i (principal.)390 1230 y Ff(name)5 b Fp(:)37 b(\(gss)p 827 1230 V 41 w(name)p 1080 1230 V 40 w(t,)25 b(mo)s(dify)-8 b(,)24 b(optional\))h(The)d(name)h(whose)g(iden)m(tit)m(y)i(the)e (creden)m(tial)h(asserts.)390 1340 y(Storage)34 b(asso)s(ciated)h(with) d(this)h(name)g(should)f(b)s(e)g(freed)h(b)m(y)g(the)g(application)h (after)g(use)e(with)390 1449 y(a)f(call)g(to)h(gss)p 867 1449 V 40 w(release)p 1169 1449 V 41 w(name\(\).)42 b(Sp)s(ecify)29 b(NULL)i(if)f(not)g(required.)390 1593 y Ff(lifetime)5 b Fp(:)61 b(\(In)m(teger,)44 b(mo)s(dify)-8 b(,)42 b(optional\))f(The)f(n)m(um)m(b)s(er)e(of)i(seconds)g(for)f (whic)m(h)h(the)g(creden-)390 1703 y(tial)50 b(will)f(remain)f(v)-5 b(alid.)95 b(If)48 b(the)h(creden)m(tial)h(has)e(expired,)53 b(this)c(parameter)g(will)g(b)s(e)e(set)390 1812 y(to)e(zero.)84 b(If)44 b(the)g(implemen)m(tation)j(do)s(es)d(not)g(supp)s(ort)f (creden)m(tial)j(expiration,)j(the)44 b(v)-5 b(alue)390 1922 y(GSS)p 569 1922 V 39 w(C)p 674 1922 V 40 w(INDEFINITE)30 b(will)h(b)s(e)f(returned.)39 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f (required.)390 2065 y Ff(cred)p 563 2065 V 40 w(usage)5 b Fp(:)61 b(\(gss)p 1063 2065 V 40 w(cred)p 1270 2065 V 40 w(usage)p 1527 2065 V 41 w(t,)43 b(mo)s(dify)-8 b(,)42 b(optional\))f(Ho)m(w)g(the)f(creden)m(tial)i(ma)m(y)e(b)s(e)f (used.)390 2175 y(One)31 b(of)g(the)h(follo)m(wing:)44 b(GSS)p 1445 2175 V 39 w(C)p 1550 2175 V 40 w(INITIA)-8 b(TE,)30 b(GSS)p 2239 2175 V 40 w(C)p 2345 2175 V 39 w(A)m(CCEPT,)h(GSS)p 3000 2175 V 40 w(C)p 3106 2175 V 39 w(BOTH.)h(Sp)s(ecify)390 2285 y(NULL)e(if)h(not)f(required.)390 2428 y Ff(mec)m(hanisms)t Fp(:)58 b(\(gss)p 1108 2428 V 40 w(OID)p 1321 2428 V 40 w(set,)42 b(mo)s(dify)-8 b(,)41 b(optional\))f(Set)f(of)g(mec)m(hanisms)g(supp)s(orted)e(b)m(y)i (the)390 2538 y(creden)m(tial.)68 b(Storage)40 b(asso)s(ciated)h(with)d (this)h(OID)g(set)h(m)m(ust)f(b)s(e)f(freed)h(b)m(y)f(the)i (application)390 2647 y(after)31 b(use)f(with)g(a)h(call)g(to)h(gss)p 1446 2647 V 40 w(release)p 1748 2647 V 41 w(oid)p 1910 2647 V 40 w(set\(\).)42 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.) 390 2791 y(Obtains)g(information)h(ab)s(out)f(a)g(creden)m(tial.)390 2934 y(Return)g(v)-5 b(alue:)390 3078 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 3222 y Fj(GSS_S_NO_CRED)p Fp(:)37 b(The)30 b(referenced)g(creden)m(tials)i(could)e(not)h(b)s(e)f (accessed.)390 3365 y Fj(GSS_S_DEFECTIVE_CREDENTI)o(AL)p Fp(:)35 b(The)29 b(referenced)i(creden)m(tials)h(w)m(ere)e(in)m(v)-5 b(alid.)390 3509 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)47 b(The)36 b(referenced)g(creden)m(tials)i(ha)m(v)m(e)g(expired.) 58 b(If)36 b(the)h(life-)390 3618 y(time)31 b(parameter)g(w)m(as)g(not) f(passed)g(as)h(NULL,)f(it)h(will)g(b)s(e)f(set)h(to)g(0.)150 3827 y Fi(gss)p 316 3827 37 5 v 55 w(inquire)p 746 3827 V 55 w(cred)p 1030 3827 V 53 w(b)m(y)p 1213 3827 V 54 w(mec)m(h)3350 4033 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_cred_by_me)q(ch)d Fg(\()p Ff(OM)p 2169 4033 28 4 v 40 w(uin)m(t32)31 b(*)565 4142 y Fe(minor_status)12 b Ff(,)34 b(const)d(gss)p 1621 4142 V 40 w(cred)p 1828 4142 V 40 w(id)p 1944 4142 V 40 w(t)f Fe(cred_handle)12 b Ff(,)34 b(const)d(gss)p 3047 4142 V 40 w(OID)565 4252 y Fe(mech_type)12 b Ff(,)33 b(gss)p 1226 4252 V 40 w(name)p 1478 4252 V 40 w(t)e(*)g Fe(name)12 b Ff(,)31 b(OM)p 2090 4252 V 40 w(uin)m(t32)g(*)g Fe(initiator_lifetime)12 b Ff(,)565 4361 y(OM)p 725 4361 V 40 w(uin)m(t32)31 b(*)g Fe(acceptor_lifetime)12 b Ff(,)35 b(gss)p 2194 4361 V 41 w(cred)p 2402 4361 V 40 w(usage)p 2659 4361 V 40 w(t)c(*)g Fe(cred_usage)12 b Fg(\))390 4471 y Ff(minor)p 629 4471 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m (hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 4614 y Ff(cred)p 563 4614 V 40 w(handle)5 b Fp(:)37 b(\(gss)p 1085 4614 V 41 w(cred)p 1293 4614 V 40 w(id)p 1409 4614 V 39 w(t,)26 b(read\))e(A)h(handle)e(that)i(refers)f(to)g(the)h(target) g(creden)m(tial.)40 b(Sp)s(ec-)390 4724 y(ify)30 b(GSS)p 700 4724 V 40 w(C)p 806 4724 V 39 w(NO)p 984 4724 V 40 w(CREDENTIAL)g(to)h(inquire)f(ab)s(out)g(the)h(default)f(initiator)i (principal.)390 4868 y Ff(mec)m(h)p 600 4868 V 41 w(t)m(yp)s(e)5 b Fp(:)67 b(\(gss)p 1064 4868 V 41 w(OID,)44 b(read\))g(The)f(mec)m (hanism)h(for)f(whic)m(h)h(information)g(should)f(b)s(e)g(re-)390 4977 y(turned.)390 5121 y Ff(name)5 b Fp(:)37 b(\(gss)p 827 5121 V 41 w(name)p 1080 5121 V 40 w(t,)25 b(mo)s(dify)-8 b(,)24 b(optional\))h(The)d(name)h(whose)g(iden)m(tit)m(y)i(the)e (creden)m(tial)h(asserts.)390 5230 y(Storage)33 b(asso)s(ciated)g(with) f(this)g(name)g(m)m(ust)f(b)s(e)h(freed)f(b)m(y)h(the)g(application)h (after)f(use)g(with)g(a)390 5340 y(call)g(to)f(gss)p 791 5340 V 40 w(release)p 1093 5340 V 41 w(name\(\).)42 b(Sp)s(ecify)29 b(NULL)i(if)f(not)h(required.)p eop end %%Page: 24 28 TeXDict begin 24 27 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(24)390 299 y Ff(initiator)p 718 299 28 4 v 41 w(lifetime)5 b Fp(:)55 b(\(In)m(teger,)40 b(mo)s(dify)-8 b(,)38 b(optional\))h(The)d(n)m(um)m(b)s(er)f(of)i (seconds)g(for)f(whic)m(h)h(the)390 408 y(creden)m(tial)25 b(will)g(remain)e(capable)i(of)f(initiating)i(securit)m(y)e(con)m (texts)i(under)c(the)i(sp)s(eci\014ed)f(mec)m(h-)390 518 y(anism.)39 b(If)27 b(the)g(creden)m(tial)i(can)e(no)g(longer)h(b)s (e)e(used)h(to)g(initiate)i(con)m(texts,)h(or)d(if)g(the)g(creden)m (tial)390 628 y(usage)42 b(for)f(this)g(mec)m(hanism)g(is)g(GSS)p 1746 628 V 40 w(C)p 1852 628 V 39 w(A)m(CCEPT,)g(this)g(parameter)g (will)h(b)s(e)e(set)i(to)g(zero.)390 737 y(If)33 b(the)g(implemen)m (tation)i(do)s(es)e(not)g(supp)s(ort)f(expiration)i(of)f(initiator)i (creden)m(tials,)g(the)e(v)-5 b(alue)390 847 y(GSS)p 569 847 V 39 w(C)p 674 847 V 40 w(INDEFINITE)30 b(will)h(b)s(e)f (returned.)39 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)390 980 y Ff(acceptor)p 728 980 V 42 w(lifetime)5 b Fp(:)53 b(\(In)m(teger,)38 b(mo)s(dify)-8 b(,)38 b(optional\))f(The)e(n)m(um)m (b)s(er)g(of)h(seconds)g(for)f(whic)m(h)h(the)390 1090 y(creden)m(tial)24 b(will)g(remain)f(capable)g(of)g(accepting)i (securit)m(y)f(con)m(texts)g(under)e(the)h(sp)s(eci\014ed)f(mec)m(h-) 390 1200 y(anism.)40 b(If)29 b(the)g(creden)m(tial)i(can)f(no)f(longer) g(b)s(e)g(used)g(to)g(accept)i(con)m(texts,)h(or)d(if)g(the)g(creden)m (tial)390 1309 y(usage)39 b(for)f(this)g(mec)m(hanism)h(is)f(GSS)p 1732 1309 V 39 w(C)p 1837 1309 V 40 w(INITIA)-8 b(TE,)38 b(this)g(parameter)h(will)f(b)s(e)g(set)h(to)g(zero.)390 1419 y(If)32 b(the)g(implemen)m(tation)i(do)s(es)e(not)h(supp)s(ort)d (expiration)j(of)g(acceptor)h(creden)m(tials,)g(the)e(v)-5 b(alue)390 1528 y(GSS)p 569 1528 V 39 w(C)p 674 1528 V 40 w(INDEFINITE)30 b(will)h(b)s(e)f(returned.)39 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)390 1662 y Ff(cred)p 563 1662 V 40 w(usage)5 b Fp(:)37 b(\(gss)p 1039 1662 V 40 w(cred)p 1246 1662 V 40 w(usage)p 1503 1662 V 41 w(t,)24 b(mo)s(dify)-8 b(,)23 b(optional\))g(Ho)m(w)f(the)g(creden)m(tial)h(ma) m(y)f(b)s(e)f(used)f(with)390 1772 y(the)i(sp)s(eci\014ed)e(mec)m (hanism.)38 b(One)21 b(of)h(the)g(follo)m(wing:)37 b(GSS)p 2414 1772 V 40 w(C)p 2520 1772 V 39 w(INITIA)-8 b(TE,)21 b(GSS)p 3199 1772 V 40 w(C)p 3305 1772 V 39 w(A)m(CCEPT,)390 1881 y(GSS)p 569 1881 V 39 w(C)p 674 1881 V 40 w(BOTH.)30 b(Sp)s(ecify)g(NULL)g(if)h(not)f(required.)390 2015 y(Obtains)g(p)s (er-mec)m(hanism)g(information)h(ab)s(out)f(a)g(creden)m(tial.)390 2149 y(Return)g(v)-5 b(alue:)390 2282 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2416 y Fj(GSS_S_NO_CRED)p Fp(:)37 b(The)30 b(referenced)g(creden)m(tials)i(could)e(not)h(b)s(e)f (accessed.)390 2550 y Fj(GSS_S_DEFECTIVE_CREDENTI)o(AL)p Fp(:)35 b(The)29 b(referenced)i(creden)m(tials)h(w)m(ere)e(in)m(v)-5 b(alid.)390 2683 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)47 b(The)36 b(referenced)g(creden)m(tials)i(ha)m(v)m(e)g(expired.) 58 b(If)36 b(the)h(life-)390 2793 y(time)31 b(parameter)g(w)m(as)g(not) f(passed)g(as)h(NULL,)f(it)h(will)g(b)s(e)f(set)h(to)g(0.)150 2990 y Fi(gss)p 316 2990 37 5 v 55 w(release)p 731 2990 V 54 w(cred)3350 3186 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_release_cred)50 b Fg(\()p Ff(OM)p 1750 3186 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)565 3295 y(gss)p 688 3295 V 40 w(cred)p 895 3295 V 40 w(id)p 1011 3295 V 40 w(t)31 b(*)f Fe(cred_handle)12 b Fg(\))390 3405 y Ff(minor)p 629 3405 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 3538 y Ff(cred)p 563 3538 V 40 w(handle)5 b Fp(:)48 b(\(gss)p 1096 3538 V 41 w(cred)p 1304 3538 V 40 w(id)p 1420 3538 V 40 w(t,)35 b(mo)s(dify)-8 b(,)36 b(optional\))g(Opaque)d(handle)h (iden)m(tifying)h(creden)m(tial)390 3648 y(to)f(b)s(e)f(released.)51 b(If)33 b(GSS)p 1293 3648 V 40 w(C)p 1399 3648 V 39 w(NO)p 1577 3648 V 40 w(CREDENTIAL)g(is)h(supplied,)f(the)h(routine)g(will)f (complete)390 3758 y(successfully)-8 b(,)31 b(but)f(will)g(do)h (nothing.)390 3891 y(Informs)67 b(GSS-API)i(that)g(the)g(sp)s (eci\014ed)f(creden)m(tial)i(handle)e(is)h(no)f(longer)i(required)390 4001 y(b)m(y)56 b(the)f(application,)64 b(and)55 b(frees)h(asso)s (ciated)h(resources.)117 b(The)55 b(cred)p 3033 4001 V 40 w(handle)g(is)h(set)g(to)390 4110 y(GSS)p 569 4110 V 39 w(C)p 674 4110 V 40 w(NO)p 853 4110 V 40 w(CREDENTIAL)30 b(on)g(successful)g(completion)i(of)e(this)g(call.)390 4244 y(Return)g(v)-5 b(alue:)390 4378 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 4511 y Fj(GSS_S_NO_CRED)p Fp(:)37 b(Creden)m(tials)31 b(could)g(not)f(b)s(e)g(accessed.)150 4742 y Fo(3.6)68 b(Con)l(text-Lev)l(el)47 b(Routines)293 4902 y Fj(GSS-API)f(Context-Level)e(Routines)293 5121 y(Routine)1191 b(Function)293 5230 y(-------)g(--------)293 5340 y(gss_init_sec_context)567 b(Initiate)46 b(a)h(security)f(context) g(with)p eop end %%Page: 25 29 TeXDict begin 25 28 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(25)1820 299 y Fj(a)48 b(peer)f(application.)293 408 y(gss_accept_sec_context)471 b(Accept)47 b(a)g(security)f(context)1820 518 y(initiated)g(by)h(a)g (peer)g(application.)293 628 y(gss_delete_sec_context)471 b(Discard)46 b(a)i(security)d(context.)293 737 y (gss_process_context_token)327 b(Process)46 b(a)i(token)e(on)h(a)h (security)1820 847 y(context)e(from)h(a)g(peer)g(application.)293 956 y(gss_context_time)759 b(Determine)46 b(for)h(how)g(long)f(a)i (context)1820 1066 y(will)f(remain)f(valid.)293 1176 y(gss_inquire_context)615 b(Obtain)47 b(information)d(about)j(a)1820 1285 y(security)f(context.)293 1395 y(gss_wrap_size_limit)615 b(Determine)46 b(token-size)f(limit)h(for)1820 1504 y(gss_wrap)g(on)h (a)h(context.)293 1614 y(gss_export_sec_context)471 b(Transfer)46 b(a)h(security)f(context)g(to)1820 1724 y(another)g(process.)293 1833 y(gss_import_sec_context)471 b(Import)47 b(a)g(transferred)e (context.)150 2028 y Fi(gss)p 316 2028 37 5 v 55 w(init)p 555 2028 V 54 w(sec)p 768 2028 V 54 w(con)m(text)3350 2221 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_init_sec_context)d Fg(\()p Ff(OM)p 1960 2221 28 4 v 40 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)565 2331 y(const)31 b(gss)p 926 2331 V 40 w(cred)p 1133 2331 V 40 w(id)p 1249 2331 V 40 w(t)f Fe(initiator_cred_handl)q(e)12 b Ff(,)36 b(gss)p 2637 2331 V 40 w(ctx)p 2800 2331 V 41 w(id)p 2917 2331 V 40 w(t)30 b(*)565 2440 y Fe(context_handle)12 b Ff(,)34 b(const)d(gss)p 1725 2440 V 40 w(name)p 1977 2440 V 41 w(t)f Fe(target_name)12 b Ff(,)34 b(const)d(gss)p 3081 2440 V 40 w(OID)565 2550 y Fe(mech_type)12 b Ff(,)33 b(OM)p 1263 2550 V 40 w(uin)m(t32)e Fe(req_flags)12 b Ff(,)33 b(OM)p 2275 2550 V 40 w(uin)m(t32)e Fe(time_req)12 b Ff(,)33 b(const)565 2659 y(gss)p 688 2659 V 40 w(c)m(hannel)p 1028 2659 V 41 w(bindings)p 1404 2659 V 39 w(t)d Fe (input_chan_bindings)12 b Ff(,)36 b(const)31 b(gss)p 2924 2659 V 40 w(bu\013er)p 3195 2659 V 39 w(t)565 2769 y Fe(input_token)12 b Ff(,)34 b(gss)p 1331 2769 V 40 w(OID)c(*)h Fe(actual_mech_type)12 b Ff(,)35 b(gss)p 2671 2769 V 40 w(bu\013er)p 2942 2769 V 39 w(t)c Fe(output_token)12 b Ff(,)565 2879 y(OM)p 725 2879 V 40 w(uin)m(t32)31 b(*)g Fe(ret_flags)12 b Ff(,)33 b(OM)p 1813 2879 V 40 w(uin)m(t32)e(*)g Fe(time_rec)12 b Fg(\))390 2988 y Ff(minor)p 629 2988 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m (hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 3121 y Ff(initiator)p 718 3121 V 41 w(cred)p 926 3121 V 40 w(handle)5 b Fp(:)41 b(\(gss)p 1452 3121 V 41 w(cred)p 1660 3121 V 40 w(id)p 1776 3121 V 40 w(t,)31 b(read,)g(optional\))h (Handle)f(for)g(creden)m(tials)h(claimed.)390 3230 y(Supply)g(GSS)p 878 3230 V 40 w(C)p 984 3230 V 39 w(NO)p 1162 3230 V 40 w(CREDENTIAL)i(to)g(act)h(as)g(a)f(default)g(initiator)i(principal.) 51 b(If)34 b(no)g(de-)390 3340 y(fault)d(initiator)g(is)g(de\014ned,)e (the)i(function)f(will)h(return)e(GSS)p 2530 3340 V 39 w(S)p 2620 3340 V 40 w(NO)p 2799 3340 V 40 w(CRED.)390 3472 y Ff(con)m(text)p 687 3472 V 42 w(handle)5 b Fp(:)38 b(\(gss)p 1212 3472 V 41 w(ctx)p 1376 3472 V 40 w(id)p 1492 3472 V 40 w(t,)28 b(read/mo)s(dify\))e(Con)m(text)h(handle)e(for)h (new)g(con)m(text.)41 b(Supply)390 3582 y(GSS)p 569 3582 V 39 w(C)p 674 3582 V 40 w(NO)p 853 3582 V 40 w(CONTEXT)g(for)g (\014rst)g(call;)49 b(use)42 b(v)-5 b(alue)42 b(returned)f(b)m(y)h (\014rst)f(call)i(in)e(con)m(tin)m(ua-)390 3691 y(tion)g(calls.)73 b(Resources)41 b(asso)s(ciated)h(with)f(this)f(con)m(text-handle)j(m)m (ust)e(b)s(e)f(released)h(b)m(y)g(the)390 3801 y(application)32 b(after)f(use)f(with)g(a)g(call)i(to)f(gss)p 1915 3801 V 40 w(delete)p 2186 3801 V 42 w(sec)p 2344 3801 V 40 w(con)m(text\(\).)390 3933 y Ff(target)p 632 3933 V 42 w(name)5 b Fp(:)40 b(\(gss)p 1108 3933 V 41 w(name)p 1361 3933 V 40 w(t,)31 b(read\))g(Name)g(of)f(target.)390 4066 y Ff(mec)m(h)p 600 4066 V 41 w(t)m(yp)s(e)5 b Fp(:)100 b(\(OID,)61 b(read,)68 b(optional\))62 b(Ob)5 b(ject)60 b(ID)h(of)f(desired)g(mec)m(hanism.)131 b(Supply)390 4175 y(GSS)p 569 4175 V 39 w(C)p 674 4175 V 40 w(NO)p 853 4175 V 40 w(OID)30 b(to)h(obtain)g(an)f(implemen)m(tation)i(sp)s (eci\014c)f(default.)390 4308 y Ff(req)p 520 4308 V 40 w(\015ags)t Fp(:)38 b(\(bit-mask,)26 b(read\))e(Con)m(tains)h(v)-5 b(arious)24 b(indep)s(enden)m(t)f(\015ags,)j(eac)m(h)f(of)f(whic)m(h)g (requests)390 4418 y(that)34 b(the)f(con)m(text)h(supp)s(ort)e(a)h(sp)s (eci\014c)g(service)h(option.)48 b(Sym)m(b)s(olic)33 b(names)g(are)h(pro)m(vided)e(for)390 4527 y(eac)m(h)46 b(\015ag,)i(and)c(the)h(sym)m(b)s(olic)f(names)h(corresp)s(onding)e(to) i(the)g(required)f(\015ags)g(should)g(b)s(e)390 4637 y(logically-ORed)33 b(together)f(to)f(form)f(the)g(bit-mask)h(v)-5 b(alue.)41 b(See)31 b(b)s(elo)m(w)f(for)h(the)f(\015ags.)390 4769 y Ff(time)p 572 4769 V 41 w(req)r Fp(:)72 b(\(In)m(teger,)52 b(read,)e(optional\))e(Desired)f(n)m(um)m(b)s(er)e(of)h(seconds)g(for)g (whic)m(h)g(con)m(text)390 4879 y(should)29 b(remain)i(v)-5 b(alid.)41 b(Supply)28 b(0)j(to)g(request)g(a)f(default)h(v)-5 b(alidit)m(y)32 b(p)s(erio)s(d.)390 5011 y Ff(input)p 609 5011 V 39 w(c)m(han)p 832 5011 V 40 w(bindings)t Fp(:)51 b(\(c)m(hannel)37 b(bindings,)f(read,)i(optional\))f (Application-sp)s(eci\014ed)g(bind-)390 5121 y(ings.)66 b(Allo)m(ws)40 b(application)g(to)f(securely)g(bind)f(c)m(hannel)h (iden)m(ti\014cation)h(information)f(to)h(the)390 5230 y(securit)m(y)46 b(con)m(text.)86 b(Sp)s(ecify)44 b(GSS)p 1655 5230 V 40 w(C)p 1761 5230 V 39 w(NO)p 1939 5230 V 40 w(CHANNEL)p 2436 5230 V 40 w(BINDINGS)i(if)f(c)m(hannel)g (bindings)390 5340 y(are)31 b(not)f(used.)p eop end %%Page: 26 30 TeXDict begin 26 29 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(26)390 299 y Ff(input)p 609 299 28 4 v 39 w(tok)m(en)p Fp(:)80 b(\(bu\013er,)54 b(opaque,)h(read,)f(optional\))d(T)-8 b(ok)m(en)50 b(receiv)m(ed)h (from)e(p)s(eer)g(applica-)390 408 y(tion.)76 b(Supply)40 b(GSS)p 1143 408 V 39 w(C)p 1248 408 V 40 w(NO)p 1427 408 V 40 w(BUFFER,)j(or)e(a)i(p)s(oin)m(ter)e(to)i(a)f(bu\013er)f(con)m (taining)i(the)f(v)-5 b(alue)390 518 y(GSS)p 569 518 V 39 w(C)p 674 518 V 40 w(EMPTY)p 1055 518 V 40 w(BUFFER)31 b(on)g(initial)g(call.)390 659 y Ff(actual)p 637 659 V 41 w(mec)m(h)p 882 659 V 41 w(t)m(yp)s(e)5 b Fp(:)59 b(\(OID,)40 b(mo)s(dify)-8 b(,)41 b(optional\))g(Actual)f(mec)m(hanism) g(used.)67 b(The)38 b(OID)i(re-)390 769 y(turned)25 b(via)j(this)e (parameter)h(will)g(b)s(e)f(a)i(p)s(oin)m(ter)e(to)i(static)g(storage)g (that)f(should)f(b)s(e)g(treated)i(as)390 878 y(read-only;)j(In)e (particular)i(the)f(application)h(should)f(not)g(attempt)h(to)g(free)f (it.)42 b(Sp)s(ecify)29 b(NULL)390 988 y(if)h(not)h(required.)390 1129 y Ff(output)p 664 1129 V 40 w(tok)m(en)p Fp(:)47 b(\(bu\013er,)34 b(opaque,)g(mo)s(dify\))f(T)-8 b(ok)m(en)34 b(to)g(b)s(e)e(sen)m(t)i(to)g(p)s(eer)e(application.)51 b(If)33 b(the)390 1238 y(length)22 b(\014eld)e(of)i(the)f(returned)f (bu\013er)g(is)i(zero,)i(no)d(tok)m(en)h(need)f(b)s(e)g(sen)m(t)g(to)h (the)g(p)s(eer)e(application.)390 1348 y(Storage)32 b(asso)s(ciated)g (with)e(this)h(bu\013er)e(m)m(ust)i(b)s(e)f(freed)g(b)m(y)g(the)h (application)h(after)f(use)f(with)h(a)390 1457 y(call)h(to)f(gss)p 791 1457 V 40 w(release)p 1093 1457 V 41 w(bu\013er\(\).)390 1598 y Ff(ret)p 507 1598 V 40 w(\015ags)t Fp(:)58 b(\(bit-mask,)43 b(mo)s(dify)-8 b(,)41 b(optional\))f(Con)m(tains)g(v)-5 b(arious)39 b(indep)s(enden)m(t)f(\015ags,)k(eac)m(h)e(of)390 1708 y(whic)m(h)e(indicates)h(that)f(the)h(con)m(text)g(supp)s(orts)e (a)h(sp)s(eci\014c)g(service)h(option.)64 b(Sp)s(ecify)37 b(NULL)390 1817 y(if)32 b(not)h(required.)45 b(Sym)m(b)s(olic)33 b(names)f(are)h(pro)m(vided)e(for)h(eac)m(h)i(\015ag,)f(and)f(the)g (sym)m(b)s(olic)h(names)390 1927 y(corresp)s(onding)22 b(to)i(the)g(required)e(\015ags)h(should)g(b)s(e)f(logically-ANDed)27 b(with)c(the)h(ret)p 3311 1927 V 40 w(\015ags)f(v)-5 b(alue)390 2037 y(to)31 b(test)g(whether)f(a)h(giv)m(en)g(option)g(is)f (supp)s(orted)f(b)m(y)h(the)h(con)m(text.)42 b(See)31 b(b)s(elo)m(w)g(for)f(the)g(\015ags.)390 2178 y Ff(time)p 572 2178 V 41 w(rec)6 b Fp(:)52 b(\(In)m(teger,)39 b(mo)s(dify)-8 b(,)37 b(optional\))g(Num)m(b)s(er)e(of)h(seconds)g(for)g(whic)m(h)g (the)g(con)m(text)i(will)390 2287 y(remain)d(v)-5 b(alid.)55 b(If)34 b(the)h(implemen)m(tation)i(do)s(es)d(not)h(supp)s(ort)f(con)m (text)i(expiration,)h(the)e(v)-5 b(alue)390 2397 y(GSS)p 569 2397 V 39 w(C)p 674 2397 V 40 w(INDEFINITE)30 b(will)h(b)s(e)f (returned.)39 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)390 2538 y(Initiates)53 b(the)e(establishmen)m(t)h(of)g(a)g(securit)m(y)g (con)m(text)h(b)s(et)m(w)m(een)f(the)g(application)h(and)e(a)390 2647 y(remote)h(p)s(eer.)102 b(Initially)-8 b(,)57 b(the)51 b(input)p 1793 2647 V 40 w(tok)m(en)h(parameter)f(should)f(b)s(e)g(sp)s (eci\014ed)g(either)i(as)390 2757 y(GSS)p 569 2757 V 39 w(C)p 674 2757 V 40 w(NO)p 853 2757 V 40 w(BUFFER,)h(or)e(as)h(a)g (p)s(oin)m(ter)g(to)g(a)h(gss)p 2394 2757 V 40 w(bu\013er)p 2665 2757 V 39 w(desc)f(ob)5 b(ject)52 b(whose)g(length)390 2866 y(\014eld)34 b(con)m(tains)j(the)e(v)-5 b(alue)35 b(zero.)55 b(The)34 b(routine)h(ma)m(y)h(return)d(a)j(output)p 2942 2866 V 39 w(tok)m(en)g(whic)m(h)f(should)390 2976 y(b)s(e)53 b(transferred)g(to)i(the)f(p)s(eer)f(application,)61 b(where)53 b(the)h(p)s(eer)g(application)h(will)f(presen)m(t)390 3086 y(it)49 b(to)g(gss)p 751 3086 V 41 w(accept)p 1043 3086 V 41 w(sec)p 1200 3086 V 41 w(con)m(text.)97 b(If)48 b(no)g(tok)m(en)i(need)e(b)s(e)g(sen)m(t,)54 b(gss)p 2900 3086 V 40 w(init)p 3076 3086 V 41 w(sec)p 3233 3086 V 40 w(con)m(text)d(will)390 3195 y(indicate)39 b(this)g(b)m(y)f (setting)h(the)g(length)f(\014eld)g(of)h(the)f(output)p 2572 3195 V 40 w(tok)m(en)h(argumen)m(t)g(to)g(zero.)65 b(T)-8 b(o)390 3305 y(complete)52 b(the)f(con)m(text)i(establishmen)m (t,)k(one)52 b(or)e(more)i(reply)e(tok)m(ens)i(ma)m(y)f(b)s(e)g (required)390 3414 y(from)35 b(the)g(p)s(eer)f(application;)39 b(if)c(so,)h(gss)p 1830 3414 V 41 w(init)p 2007 3414 V 40 w(sec)p 2163 3414 V 41 w(con)m(text)h(will)e(return)f(a)h(status)g (con)m(taining)390 3524 y(the)57 b(supplemen)m(tary)g(information)g (bit)g(GSS)p 2078 3524 V 40 w(S)p 2169 3524 V 39 w(CONTINUE)p 2710 3524 V 39 w(NEEDED.)h(In)f(this)g(case,)390 3634 y(gss)p 513 3634 V 40 w(init)p 689 3634 V 41 w(sec)p 846 3634 V 40 w(con)m(text)31 b(should)d(b)s(e)g(called)i(again)g(when) e(the)h(reply)f(tok)m(en)i(is)f(receiv)m(ed)h(from)f(the)390 3743 y(p)s(eer)i(application,)i(passing)f(the)g(reply)f(tok)m(en)i(to)f (gss)p 2281 3743 V 40 w(init)p 2457 3743 V 41 w(sec)p 2614 3743 V 40 w(con)m(text)i(via)e(the)g(input)p 3500 3743 V 39 w(tok)m(en)390 3853 y(parameters.)390 3994 y(P)m(ortable)27 b(applications)f(should)f(b)s(e)g(constructed)g(to)h (use)g(the)f(tok)m(en)i(length)e(and)g(return)g(status)390 4103 y(to)k(determine)f(whether)g(a)g(tok)m(en)i(needs)d(to)i(b)s(e)f (sen)m(t)g(or)h(w)m(aited)g(for.)40 b(Th)m(us)27 b(a)h(t)m(ypical)i(p)s (ortable)390 4213 y(caller)i(should)d(alw)m(a)m(ys)j(in)m(v)m(ok)m(e)g (gss)p 1615 4213 V 40 w(init)p 1791 4213 V 41 w(sec)p 1948 4213 V 40 w(con)m(text)h(within)d(a)g(lo)s(op:)630 4354 y Fj(int)47 b(context_established)42 b(=)48 b(0;)630 4463 y(gss_ctx_id_t)c(context_hdl)h(=)j(GSS_C_NO_CONTEXT;)964 4573 y(...)630 4682 y(input_token->length)43 b(=)k(0;)630 4902 y(while)f(\(!context_established\))c({)725 5011 y(maj_stat)k(=)h(gss_init_sec_context\(&min_)o(stat)o(,)2253 5121 y(cred_hdl,)2253 5230 y(&context_hdl,)2253 5340 y(target_name,)p eop end %%Page: 27 31 TeXDict begin 27 30 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(27)2253 299 y Fj(desired_mech,)2253 408 y(desired_services,)2253 518 y(desired_time,)2253 628 y(input_bindings,)2253 737 y(input_token,)2253 847 y(&actual_mech,)2253 956 y(output_token,)2253 1066 y(&actual_services,) 2253 1176 y(&actual_time\);)725 1285 y(if)48 b (\(GSS_ERROR\(maj_stat\)\))42 b({)821 1395 y(report_error\(maj_stat,)g (min_stat\);)725 1504 y(};)725 1724 y(if)48 b(\(output_token->length)42 b(!=)47 b(0\))g({)821 1833 y(send_token_to_peer\(outpu)o(t_to)o(ken)o (\);)821 1943 y(gss_release_buffer\(&min_)o(stat)o(,)42 b(output_token\))725 2052 y(};)725 2162 y(if)48 b (\(GSS_ERROR\(maj_stat\)\))42 b({)821 2381 y(if)47 b(\(context_hdl)e (!=)i(GSS_C_NO_CONTEXT\))916 2491 y(gss_delete_sec_context\(&mi)o(n_s)o (tat,)2014 2600 y(&context_hdl,)2014 2710 y(GSS_C_NO_BUFFER\);)821 2819 y(break;)725 2929 y(};)725 3148 y(if)h(\(maj_stat)d(&)i (GSS_S_CONTINUE_NEEDED\))42 b({)821 3258 y(receive_token_from_peer\()o (inpu)o(t_t)o(oken)o(\);)725 3367 y(})48 b(else)f({)821 3477 y(context_established)42 b(=)48 b(1;)725 3587 y(};)630 3696 y(};)390 3845 y Fp(Whenev)m(er)94 b(the)g(routine)g(returns)e(a)i (ma)5 b(jor)93 b(status)h(that)h(includes)e(the)g(v)-5 b(alue)390 3954 y(GSS)p 569 3954 28 4 v 39 w(S)p 659 3954 V 40 w(CONTINUE)p 1201 3954 V 39 w(NEEDED,)29 b(the)e(con)m(text)j (is)e(not)f(fully)h(established)g(and)f(the)g(follo)m(wing)390 4064 y(restrictions)k(apply)f(to)h(the)g(output)f(parameters:)465 4212 y Fn(\017)60 b Fp(The)37 b(v)-5 b(alue)38 b(returned)e(via)i(the)f (time)p 1883 4212 V 41 w(rec)h(parameter)g(is)f(unde\014ned)e(unless)i (the)g(accom-)570 4322 y(pan)m(ying)28 b(ret)p 1028 4322 V 40 w(\015ags)g(parameter)g(con)m(tains)h(the)f(bit)f(GSS)p 2524 4322 V 40 w(C)p 2630 4322 V 39 w(PR)m(OT)p 2932 4322 V 40 w(READ)m(Y)p 3303 4322 V 41 w(FLA)m(G,)i(in-)570 4431 y(dicating)44 b(that)g(p)s(er-message)g(services)f(ma)m(y)h(b)s(e) f(applied)g(in)g(adv)-5 b(ance)43 b(of)h(a)f(successful)570 4541 y(completion)i(status,)k(the)44 b(v)-5 b(alue)45 b(returned)e(via)i(the)f(actual)p 2742 4541 V 41 w(mec)m(h)p 2987 4541 V 41 w(t)m(yp)s(e)g(parameter)h(is)570 4651 y(unde\014ned)24 b(un)m(til)j(the)g(routine)g(returns)e(a)i(ma)5 b(jor)27 b(status)g(v)-5 b(alue)27 b(of)g(GSS)p 3073 4651 V 39 w(S)p 3163 4651 V 40 w(COMPLETE.)465 4792 y Fn(\017)60 b Fp(The)115 b(v)-5 b(alues)117 b(of)f(the)g(GSS)p 1809 4792 V 39 w(C)p 1914 4792 V 40 w(DELEG)p 2275 4792 V 40 w(FLA)m(G,)h(GSS)p 2882 4792 V 40 w(C)p 2988 4792 V 39 w(MUTUAL)p 3437 4792 V 41 w(FLA)m(G,)570 4902 y(GSS)p 749 4902 V 39 w(C)p 854 4902 V 40 w(REPLA)-8 b(Y)p 1270 4902 V 40 w(FLA)m(G,)63 b(GSS)p 1823 4902 V 39 w(C)p 1928 4902 V 40 w(SEQUENCE)p 2478 4902 V 38 w(FLA)m(G,)g(GSS)p 3029 4902 V 39 w(C)p 3134 4902 V 40 w(CONF)p 3438 4902 V 40 w(FLA)m(G,)570 5011 y(GSS)p 749 5011 V 39 w(C)p 854 5011 V 40 w(INTEG)p 1194 5011 V 40 w(FLA)m(G)85 b(and)f(GSS)p 1975 5011 V 39 w(C)p 2080 5011 V 40 w(ANON)p 2395 5011 V 40 w(FLA)m(G)i(bits)e(returned)f(via)i(the)570 5121 y(ret)p 687 5121 V 40 w(\015ags)37 b(parameter)g(should)e(con)m(tain)j (the)e(v)-5 b(alues)37 b(that)g(the)g(implemen)m(tation)h(exp)s(ects) 570 5230 y(w)m(ould)52 b(b)s(e)g(v)-5 b(alid)53 b(if)g(con)m(text)h (establishmen)m(t)f(w)m(ere)h(to)f(succeed.)107 b(In)52 b(particular,)59 b(if)570 5340 y(the)i(application)h(has)f(requested)g (a)g(service)h(suc)m(h)e(as)h(delegation)i(or)e(anon)m(ymous)p eop end %%Page: 28 32 TeXDict begin 28 31 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(28)570 299 y(authen)m(tication)50 b(via)e(the)g(req)p 1661 299 28 4 v 40 w(\015ags)g(argumen)m(t,)53 b(and)47 b(suc)m(h)g(a)h(service)h(is)f(una)m(v)-5 b(ailable)570 408 y(from)43 b(the)g(underlying)f(mec)m(hanism,)47 b(gss)p 2064 408 V 40 w(init)p 2240 408 V 40 w(sec)p 2396 408 V 41 w(con)m(text)e(should)d(generate)i(a)g(tok)m(en)570 518 y(that)38 b(will)g(not)g(pro)m(vide)g(the)g(service,)j(and)c (indicate)i(via)f(the)g(ret)p 2920 518 V 40 w(\015ags)g(argumen)m(t)g (that)570 628 y(the)44 b(service)g(will)g(not)f(b)s(e)g(supp)s(orted.) 78 b(The)43 b(application)i(ma)m(y)f(c)m(ho)s(ose)g(to)g(ab)s(ort)g (the)570 737 y(con)m(text)34 b(establishmen)m(t)e(b)m(y)g(calling)h (gss)p 2010 737 V 40 w(delete)p 2281 737 V 41 w(sec)p 2438 737 V 41 w(con)m(text)h(\(if)e(it)g(cannot)g(con)m(tin)m(ue)h(in) 570 847 y(the)d(absence)g(of)g(the)g(service\),)h(or)f(it)g(ma)m(y)g(c) m(ho)s(ose)h(to)f(transmit)g(the)g(tok)m(en)h(and)e(con)m(tin)m(ue)570 956 y(con)m(text)j(establishmen)m(t)f(\(if)g(the)g(service)g(w)m(as)g (merely)f(desired)g(but)g(not)h(mandatory\).)465 1094 y Fn(\017)60 b Fp(The)43 b(v)-5 b(alues)44 b(of)g(the)f(GSS)p 1519 1094 V 40 w(C)p 1625 1094 V 39 w(PR)m(OT)p 1927 1094 V 40 w(READ)m(Y)p 2298 1094 V 41 w(FLA)m(G)h(and)f(GSS)p 2998 1094 V 40 w(C)p 3104 1094 V 39 w(TRANS)p 3463 1094 V 40 w(FLA)m(G)570 1204 y(bits)94 b(within)f(ret)p 1274 1204 V 40 w(\015ags)h(should)e(indicate)j(the)f(actual)h(state)g(at)f (the)g(time)570 1313 y(gss)p 693 1313 V 40 w(init)p 869 1313 V 41 w(sec)p 1026 1313 V 40 w(con)m(text)32 b(returns,)e(whether)g (or)g(not)h(the)f(con)m(text)i(is)f(fully)f(established.)465 1451 y Fn(\017)60 b Fp(GSS-API)34 b(implemen)m(tations)h(that)g(supp)s (ort)d(p)s(er-message)j(protection)g(are)f(encouraged)570 1561 y(to)46 b(set)f(the)g(GSS)p 1202 1561 V 39 w(C)p 1307 1561 V 40 w(PR)m(OT)p 1610 1561 V 40 w(READ)m(Y)p 1981 1561 V 41 w(FLA)m(G)h(in)e(the)h(\014nal)g(ret)p 2939 1561 V 40 w(\015ags)g(returned)f(to)i(a)570 1670 y(caller)31 b(\(i.e.)42 b(when)28 b(accompanied)j(b)m(y)e(a)h(GSS)p 2159 1670 V 40 w(S)p 2250 1670 V 39 w(COMPLETE)f(status)h(co)s(de\).)41 b(Ho)m(w)m(ev)m(er,)570 1780 y(applications)32 b(should)e(not)h(rely)g (on)g(this)g(b)s(eha)m(vior)g(as)g(the)g(\015ag)g(w)m(as)h(not)f (de\014ned)e(in)i(V)-8 b(er-)570 1889 y(sion)27 b(1)g(of)g(the)g (GSS-API.)f(Instead,)i(applications)g(should)e(determine)h(what)f(p)s (er-message)570 1999 y(services)39 b(are)f(a)m(v)-5 b(ailable)40 b(after)e(a)g(successful)g(con)m(text)i(establishmen)m(t)e(according)h (to)g(the)570 2109 y(GSS)p 749 2109 V 39 w(C)p 854 2109 V 40 w(INTEG)p 1194 2109 V 40 w(FLA)m(G)31 b(and)f(GSS)p 1867 2109 V 39 w(C)p 1972 2109 V 40 w(CONF)p 2276 2109 V 40 w(FLA)m(G)h(v)-5 b(alues.)465 2246 y Fn(\017)60 b Fp(All)31 b(other)g(bits)f(within)g(the)g(ret)p 1690 2246 V 41 w(\015ags)g(argumen)m(t)h(should)e(b)s(e)h(set)h(to)g(zero.) 390 2416 y(If)e(the)g(initial)i(call)f(of)f(gss)p 1287 2416 V 41 w(init)p 1464 2416 V 40 w(sec)p 1620 2416 V 41 w(con)m(text\(\))i(fails,)g(the)e(implemen)m(tation)i(should)d(not)h (create)390 2525 y(a)k(con)m(text)i(ob)5 b(ject,)35 b(and)e(should)f (lea)m(v)m(e)j(the)e(v)-5 b(alue)34 b(of)f(the)g(con)m(text)p 2755 2525 V 42 w(handle)g(parameter)h(set)f(to)390 2635 y(GSS)p 569 2635 V 39 w(C)p 674 2635 V 40 w(NO)p 853 2635 V 40 w(CONTEXT)21 b(to)i(indicate)g(this.)38 b(In)22 b(the)g(ev)m(en)m(t)i(of)f(a)f(failure)h(on)f(a)h(subsequen)m(t)e (call,)390 2744 y(the)29 b(implemen)m(tation)i(is)e(p)s(ermitted)g(to)g (delete)i(the)e Fj(")p Fp(half-built)p Fj(")f Fp(securit)m(y)i(con)m (text)h(\(in)e(whic)m(h)390 2854 y(case)g(it)f(should)e(set)i(the)g (con)m(text)p 1543 2854 V 42 w(handle)f(parameter)h(to)g(GSS)p 2588 2854 V 39 w(C)p 2693 2854 V 40 w(NO)p 2872 2854 V 40 w(CONTEXT\),)f(but)g(the)390 2963 y(preferred)35 b(b)s(eha)m(vior)h(is)g(to)h(lea)m(v)m(e)i(the)d(securit)m(y)h(con)m (text)h(un)m(touc)m(hed)e(for)g(the)h(application)g(to)390 3073 y(delete)32 b(\(using)e(gss)p 1049 3073 V 40 w(delete)p 1320 3073 V 41 w(sec)p 1477 3073 V 41 w(con)m(text\).)390 3214 y(During)42 b(con)m(text)i(establishmen)m(t,)j(the)c (informational)g(status)g(bits)f(GSS)p 3052 3214 V 39 w(S)p 3142 3214 V 40 w(OLD)p 3379 3214 V 40 w(TOKEN)390 3324 y(and)36 b(GSS)p 752 3324 V 40 w(S)p 843 3324 V 39 w(DUPLICA)-8 b(TE)p 1425 3324 V 40 w(TOKEN)36 b(indicate)i(fatal)g (errors,)g(and)e(GSS-API)h(mec)m(hanisms)390 3433 y(should)d(alw)m(a)m (ys)i(return)d(them)i(in)f(asso)s(ciation)i(with)e(a)h(routine)g(error) f(of)h(GSS)p 3197 3433 V 39 w(S)p 3287 3433 V 40 w(F)-10 b(AILURE.)390 3543 y(This)30 b(requiremen)m(t)h(for)g(pairing)g(did)f (not)h(exist)g(in)g(v)m(ersion)g(1)g(of)g(the)h(GSS-API)e(sp)s (eci\014cation,)390 3652 y(so)41 b(applications)h(that)f(wish)f(to)h (run)e(o)m(v)m(er)j(v)m(ersion)f(1)g(implemen)m(tations)h(m)m(ust)f(sp) s(ecial-case)390 3762 y(these)31 b(co)s(des.)390 3903 y(The)f Fj(req_flags)e Fp(v)-5 b(alues:)870 4072 y Fj(GSS_C_DELEG_FLAG) 945 4210 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Delegate)i(creden)m (tials)f(to)f(remote)g(p)s(eer.)945 4348 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Don't)g(delegate.)870 4514 y Fj(GSS_C_MUTUAL_FLAG)945 4651 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Request)f(that)h(remote)g(p)s(eer)f(authen)m(ticate)j (itself.)945 4789 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Authen)m (ticate)h(self)f(to)g(remote)g(p)s(eer)f(only)-8 b(.)870 4955 y Fj(GSS_C_REPLAY_FLAG)945 5093 y Fn(\017)60 b Fp(T)-8 b(rue)26 b(-)g(Enable)g(repla)m(y)h(detection)h(for)e(messages)h (protected)h(with)e(gss)p 3519 5093 V 40 w(wrap)1050 5202 y(or)k(gss)p 1284 5202 V 41 w(get)p 1445 5202 V 41 w(mic.)945 5340 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Don't)g (attempt)g(to)h(detect)f(repla)m(y)m(ed)h(messages.)p eop end %%Page: 29 33 TeXDict begin 29 32 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(29)870 299 y Fj(GSS_C_SEQUENCE_FLAG) 945 432 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Enable)f(detection)i(of)e (out-of-sequence)i(protected)f(messages.)945 565 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Don't)g(attempt)g(to)h(detect)f (out-of-sequence)h(messages.)870 722 y Fj(GSS_C_CONF_FLAG)945 855 y Fn(\017)60 b Fp(T)-8 b(rue)41 b(-)g(Request)g(that)h(con\014den)m (tialit)m(y)h(service)f(b)s(e)e(made)i(a)m(v)-5 b(ailable)43 b(\(via)1050 964 y(gss)p 1173 964 28 4 v 40 w(wrap\).)945 1097 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(No)g(p)s(er-message)f (con\014den)m(tialit)m(y)j(service)e(is)f(required.)870 1254 y Fj(GSS_C_INTEG_FLAG)945 1387 y Fn(\017)60 b Fp(T)-8 b(rue)24 b(-)g(Request)h(that)g(in)m(tegrit)m(y)h(service)f(b)s(e)f (made)g(a)m(v)-5 b(ailable)26 b(\(via)g(gss)p 3519 1387 V 40 w(wrap)1050 1497 y(or)k(gss)p 1284 1497 V 41 w(get)p 1445 1497 V 41 w(mic\).)945 1630 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(No)g(p)s(er-message)f(in)m(tegrit)m(y)j(service)e(is)f (required.)870 1786 y Fj(GSS_C_ANON_FLAG)945 1919 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Do)g(not)f(rev)m(eal)i(the)f(initiator's)h (iden)m(tit)m(y)g(to)f(the)f(acceptor.)945 2052 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Authen)m(ticate)h(normally)-8 b(.)390 2209 y(The)30 b Fj(ret_flags)e Fp(v)-5 b(alues:)870 2365 y Fj(GSS_C_DELEG_FLAG)945 2498 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Creden)m(tials)g(w)m(ere)f(delegated)i(to)g(the)e (remote)h(p)s(eer.)945 2632 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(No)g(creden)m(tials)g(w)m(ere)g(delegated.)870 2788 y Fj(GSS_C_MUTUAL_FLAG)945 2921 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(The)e(remote)j(p)s(eer)d(has)i(authen)m(ticated)h (itself.)945 3054 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Remote)g(p)s (eer)f(has)g(not)h(authen)m(ticated)h(itself.)870 3211 y Fj(GSS_C_REPLAY_FLAG)945 3344 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(repla)m(y)f(of)h(protected)g(messages)h(will)e(b)s(e)g (detected.)945 3477 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(repla)m(y)m(ed)g(messages)g(will)g(not)g(b)s(e)e(detected.)870 3634 y Fj(GSS_C_SEQUENCE_FLAG)945 3767 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(out-of-sequence)g(protected)h(messages)f(will)g (b)s(e)f(detected.)945 3900 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(out-of-sequence)h(messages)f(will)g(not)f(b)s(e)g(detected.)870 4056 y Fj(GSS_C_CONF_FLAG)945 4189 y Fn(\017)60 b Fp(T)-8 b(rue)40 b(-)g(Con\014den)m(tialit)m(y)i(service)f(ma)m(y)g(b)s(e)f(in) m(v)m(ok)m(ed)i(b)m(y)e(calling)i(gss)p 3519 4189 V 40 w(wrap)1050 4299 y(routine.)945 4432 y Fn(\017)60 b Fp(F)-8 b(alse)33 b(-)e(No)h(con\014den)m(tialit)m(y)i(service)e(\(via)g(gss)p 2686 4432 V 40 w(wrap\))f(a)m(v)-5 b(ailable.)46 b(gss)p 3519 4432 V 40 w(wrap)1050 4542 y(will)38 b(pro)m(vide)f(message)i (encapsulation,)h(data-origin)f(authen)m(tication)h(and)1050 4651 y(in)m(tegrit)m(y)32 b(services)f(only)-8 b(.)870 4808 y Fj(GSS_C_INTEG_FLAG)945 4941 y Fn(\017)60 b Fp(T)-8 b(rue)27 b(-)h(In)m(tegrit)m(y)h(service)f(ma)m(y)g(b)s(e)f(in)m(v)m (ok)m(ed)i(b)m(y)e(calling)i(either)f(gss)p 3413 4941 V 40 w(get)p 3573 4941 V 42 w(mic)1050 5050 y(or)i(gss)p 1284 5050 V 41 w(wrap)f(routines.)945 5183 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(P)m(er-message)h(in)m(tegrit)m(y)g(service)f (una)m(v)-5 b(ailable.)870 5340 y Fj(GSS_C_ANON_FLAG)p eop end %%Page: 30 34 TeXDict begin 30 33 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(30)945 299 y Fn(\017)60 b Fp(T)-8 b(rue)27 b(-)h(The)f(initiator's)i(iden)m(tit)m(y)g(has)e (not)h(b)s(een)e(rev)m(ealed,)k(and)d(will)h(not)g(b)s(e)1050 408 y(rev)m(ealed)k(if)e(an)m(y)h(emitted)g(tok)m(en)h(is)e(passed)g (to)h(the)g(acceptor.)945 541 y Fn(\017)60 b Fp(F)-8 b(alse)47 b(-)e(The)f(initiator's)j(iden)m(tit)m(y)f(has)f(b)s(een)f (or)h(will)h(b)s(e)e(authen)m(ticated)1050 650 y(normally)-8 b(.)870 806 y Fj(GSS_C_PROT_READY_FLAG)945 938 y Fn(\017)60 b Fp(T)-8 b(rue)66 b(-)h(Protection)h(services)f(\(as)g(sp)s(eci\014ed) f(b)m(y)h(the)f(states)i(of)f(the)1050 1048 y(GSS)p 1229 1048 28 4 v 39 w(C)p 1334 1048 V 40 w(CONF)p 1638 1048 V 40 w(FLA)m(G)h(and)e(GSS)p 2384 1048 V 39 w(C)p 2489 1048 V 40 w(INTEG)p 2829 1048 V 40 w(FLA)m(G\))i(are)g(a)m(v)-5 b(ailable)1050 1157 y(for)51 b(use)g(if)g(the)g(accompan)m(ying)h(ma)5 b(jor)52 b(status)f(return)f(v)-5 b(alue)51 b(is)g(either)1050 1267 y(GSS)p 1229 1267 V 39 w(S)p 1319 1267 V 40 w(COMPLETE)29 b(or)h(GSS)p 2201 1267 V 40 w(S)p 2292 1267 V 39 w(CONTINUE)p 2833 1267 V 39 w(NEEDED.)945 1399 y Fn(\017)60 b Fp(F)-8 b(alse)88 b(-)f(Protection)h(services)f(\(as)g(sp)s(eci\014ed)e(b)m(y)i (the)f(states)i(of)1050 1509 y(the)121 b(GSS)p 1476 1509 V 40 w(C)p 1582 1509 V 39 w(CONF)p 1885 1509 V 40 w(FLA)m(G)h(and)f (GSS)p 2740 1509 V 39 w(C)p 2845 1509 V 40 w(INTEG)p 3185 1509 V 40 w(FLA)m(G\))i(are)1050 1619 y(a)m(v)-5 b(ailable)54 b(only)d(if)g(the)h(accompan)m(ying)g(ma)5 b(jor)52 b(status)f(return)f(v)-5 b(alue)52 b(is)1050 1728 y(GSS)p 1229 1728 V 39 w(S)p 1319 1728 V 40 w(COMPLETE.)870 1883 y Fj(GSS_C_TRANS_FLAG)945 2016 y Fn(\017)60 b Fp(T)-8 b(rue)39 b(-)h(The)f(resultan)m(t)h(securit)m(y)g(con)m(text)h(ma)m(y)f (b)s(e)f(transferred)f(to)j(other)1050 2125 y(pro)s(cesses)30 b(via)h(a)g(call)h(to)f(gss)p 2069 2125 V 40 w(exp)s(ort)p 2367 2125 V 40 w(sec)p 2523 2125 V 40 w(con)m(text\(\).)945 2258 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(securit)m(y)h(con)m (text)h(is)e(not)h(transferable.)390 2413 y(All)g(other)g(bits)f (should)f(b)s(e)h(set)h(to)g(zero.)390 2545 y(Return)f(v)-5 b(alue:)390 2678 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2810 y Fj(GSS_S_CONTINUE_NEEDED)p Fp(:)h(Indicates)23 b(that)g(a)g(tok)m(en)h(from)e(the)h(p)s(eer)f(application)i(is)f (required)390 2920 y(to)k(complete)g(the)g(con)m(text,)i(and)c(that)i (gss)p 1862 2920 V 40 w(init)p 2038 2920 V 41 w(sec)p 2195 2920 V 40 w(con)m(text)h(m)m(ust)e(b)s(e)g(called)h(again)g(with)f (that)390 3029 y(tok)m(en.)390 3162 y Fj(GSS_S_DEFECTIVE_TOKEN)p Fp(:)63 b(Indicates)45 b(that)f(consistency)i(c)m(hec)m(ks)f(p)s (erformed)e(on)h(the)h(in-)390 3271 y(put)p 533 3271 V 39 w(tok)m(en)32 b(failed.)390 3404 y Fj(GSS_S_DEFECTIVE_CREDENTI)o (AL)p Fp(:)40 b(Indicates)34 b(that)g(consistency)g(c)m(hec)m(ks)h(p)s (erformed)d(on)h(the)390 3513 y(creden)m(tial)f(failed.)390 3646 y Fj(GSS_S_NO_CRED)p Fp(:)j(The)27 b(supplied)f(creden)m(tials)i (w)m(ere)f(not)h(v)-5 b(alid)27 b(for)g(con)m(text)h(initiation,)i(or)d (the)390 3756 y(creden)m(tial)32 b(handle)e(did)f(not)i(reference)g(an) m(y)g(creden)m(tials.)390 3888 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)k(The)30 b(referenced)g(creden)m(tials)i(ha)m(v)m(e)f(expired.)390 4020 y Fj(GSS_S_BAD_BINDINGS)p Fp(:)40 b(The)32 b(input)p 1727 4020 V 39 w(tok)m(en)i(con)m(tains)g(di\013eren)m(t)f(c)m(hannel)g (bindings)e(to)i(those)390 4130 y(sp)s(eci\014ed)d(via)h(the)f(input)p 1281 4130 V 39 w(c)m(han)p 1504 4130 V 41 w(bindings)f(parameter.)390 4262 y Fj(GSS_S_BAD_SIG)p Fp(:)38 b(The)30 b(input)p 1483 4262 V 39 w(tok)m(en)i(con)m(tains)g(an)e(in)m(v)-5 b(alid)32 b(MIC,)e(or)h(a)g(MIC)g(that)g(could)g(not)390 4372 y(b)s(e)f(v)m(eri\014ed.)390 4504 y Fj(GSS_S_OLD_TOKEN)p Fp(:)36 b(The)28 b(input)p 1575 4504 V 39 w(tok)m(en)i(w)m(as)f(to)s(o) h(old.)40 b(This)28 b(is)h(a)g(fatal)h(error)f(during)e(con)m(text)390 4614 y(establishmen)m(t.)390 4746 y Fj(GSS_S_DUPLICATE_TOKEN)p Fp(:)59 b(The)41 b(input)p 1899 4746 V 39 w(tok)m(en)j(is)e(v)-5 b(alid,)46 b(but)41 b(is)h(a)h(duplicate)g(of)f(a)h(tok)m(en)390 4856 y(already)31 b(pro)s(cessed.)40 b(This)30 b(is)g(a)h(fatal)g (error)f(during)g(con)m(text)i(establishmen)m(t.)390 4988 y Fj(GSS_S_NO_CONTEXT)p Fp(:)58 b(Indicates)42 b(that)g(the)f (supplied)f(con)m(text)j(handle)e(did)f(not)i(refer)f(to)h(a)390 5098 y(v)-5 b(alid)31 b(con)m(text.)390 5230 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)37 b(The)31 b(pro)m(vided)g(target)p 2121 5230 V 42 w(name)g(parameter)h(con)m(tained)g(an)f(in)m(v)-5 b(alid)32 b(or)390 5340 y(unsupp)s(orted)c(t)m(yp)s(e)i(of)h(name.)p eop end %%Page: 31 35 TeXDict begin 31 34 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(31)390 299 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(The)30 b(pro)m(vided)g(target)p 1927 299 28 4 v 41 w(name)h(parameter)g(w)m(as)f(ill-formed.)390 434 y Fj(GSS_S_BAD_MECH)p Fp(:)36 b(The)27 b(sp)s(eci\014ed)h(mec)m (hanism)g(is)h(not)f(supp)s(orted)f(b)m(y)h(the)g(pro)m(vided)g (creden-)390 544 y(tial,)k(or)e(is)h(unrecognized)f(b)m(y)h(the)f (implemen)m(tation.)150 744 y Fi(gss)p 316 744 37 5 v 55 w(accept)p 713 744 V 53 w(sec)p 925 744 V 54 w(con)m(text)3350 942 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_accept_sec_context)d Fg(\()p Ff(OM)p 2064 942 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)565 1052 y(gss)p 688 1052 V 40 w(ctx)p 851 1052 V 41 w(id)p 968 1052 V 40 w(t)30 b(*)h Fe(context_handle)12 b Ff(,)35 b(const)30 b(gss)p 2303 1052 V 41 w(cred)p 2511 1052 V 40 w(id)p 2627 1052 V 39 w(t)565 1161 y Fe(acceptor_cred_handle)12 b Ff(,)36 b(const)31 b(gss)p 2039 1161 V 40 w(bu\013er)p 2310 1161 V 39 w(t)g Fe(input_token_buffer)12 b Ff(,)36 b(const)565 1271 y(gss)p 688 1271 V 40 w(c)m(hannel)p 1028 1271 V 41 w(bindings)p 1404 1271 V 39 w(t)30 b Fe (input_chan_bindings)12 b Ff(,)36 b(gss)p 2686 1271 V 40 w(name)p 2938 1271 V 40 w(t)31 b(*)g Fe(src_name)12 b Ff(,)565 1380 y(gss)p 688 1380 V 40 w(OID)31 b(*)f Fe(mech_type)12 b Ff(,)33 b(gss)p 1662 1380 V 40 w(bu\013er)p 1933 1380 V 39 w(t)e Fe(output_token)12 b Ff(,)34 b(OM)p 2887 1380 V 40 w(uin)m(t32)d(*)565 1490 y Fe(ret_flags)12 b Ff(,)33 b(OM)p 1263 1490 V 40 w(uin)m(t32)e(*)g Fe(time_rec)12 b Ff(,)33 b(gss)p 2262 1490 V 40 w(cred)p 2469 1490 V 40 w(id)p 2585 1490 V 39 w(t)e(*)565 1600 y Fe(delegated_cred_handle)12 b Fg(\))390 1709 y Ff(minor)p 629 1709 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 1845 y Ff(con)m(text)p 687 1845 V 42 w(handle)5 b Fp(:)38 b(\(gss)p 1212 1845 V 41 w(ctx)p 1376 1845 V 40 w(id)p 1492 1845 V 40 w(t,)28 b(read/mo)s(dify\))e(Con)m(text)h(handle)e(for)h(new)g(con)m(text.)41 b(Supply)390 1954 y(GSS)p 569 1954 V 39 w(C)p 674 1954 V 40 w(NO)p 853 1954 V 40 w(CONTEXT)35 b(for)h(\014rst)g(call;)41 b(use)36 b(v)-5 b(alue)37 b(returned)e(in)h(subsequen)m(t)g(calls.)60 b(Once)390 2064 y(gss)p 513 2064 V 40 w(accept)p 804 2064 V 42 w(sec)p 962 2064 V 40 w(con)m(text\(\))28 b(has)d(returned)e (a)j(v)-5 b(alue)25 b(via)h(this)f(parameter,)h(resources)f(ha)m(v)m(e) i(b)s(een)390 2174 y(assigned)g(to)h(the)f(corresp)s(onding)f(con)m (text,)j(and)d(m)m(ust)h(b)s(e)f(freed)h(b)m(y)g(the)g(application)h (after)f(use)390 2283 y(with)j(a)h(call)g(to)h(gss)p 1074 2283 V 40 w(delete)p 1345 2283 V 41 w(sec)p 1502 2283 V 41 w(con)m(text\(\).)390 2419 y Ff(acceptor)p 728 2419 V 42 w(cred)p 937 2419 V 40 w(handle)5 b Fp(:)38 b(\(gss)p 1460 2419 V 40 w(cred)p 1667 2419 V 40 w(id)p 1783 2419 V 40 w(t,)27 b(read\))g(Creden)m(tial)f(handle)g(claimed)h(b) m(y)f(con)m(text)i(ac-)390 2528 y(ceptor.)48 b(Sp)s(ecify)32 b(GSS)p 1207 2528 V 40 w(C)p 1313 2528 V 39 w(NO)p 1491 2528 V 40 w(CREDENTIAL)g(to)i(accept)g(the)e(con)m(text)j(as)e(a)g (default)g(prin-)390 2638 y(cipal.)41 b(If)28 b(GSS)p 910 2638 V 40 w(C)p 1016 2638 V 39 w(NO)p 1194 2638 V 40 w(CREDENTIAL)h(is)f(sp)s(eci\014ed,)h(but)f(no)h(default)g(acceptor) h(principal)f(is)390 2747 y(de\014ned,)g(GSS)p 907 2747 V 40 w(S)p 998 2747 V 39 w(NO)p 1176 2747 V 40 w(CRED)h(will)h(b)s(e)f (returned.)390 2883 y Ff(input)p 609 2883 V 39 w(tok)m(en)p 864 2883 V 41 w(bu\013er)7 b Fp(:)40 b(\(bu\013er,)29 b(opaque,)i(read\))g(T)-8 b(ok)m(en)31 b(obtained)g(from)f(remote)h (application.)390 3018 y Ff(input)p 609 3018 V 39 w(c)m(han)p 832 3018 V 40 w(bindings)t Fp(:)106 b(\(c)m(hannel)65 b(bindings,)70 b(read,)j(optional\))65 b(Application-)g(sp)s(eci\014ed) 390 3128 y(bindings.)171 b(Allo)m(ws)75 b(application)h(to)f(securely)g (bind)e(c)m(hannel)h(iden)m(ti\014cation)i(infor-)390 3238 y(mation)68 b(to)f(the)g(securit)m(y)h(con)m(text.)152 b(If)66 b(c)m(hannel)i(bindings)d(are)j(not)f(used,)75 b(sp)s(ecify)390 3347 y(GSS)p 569 3347 V 39 w(C)p 674 3347 V 40 w(NO)p 853 3347 V 40 w(CHANNEL)p 1350 3347 V 40 w(BINDINGS.)390 3483 y Ff(src)p 508 3483 V 40 w(name)5 b Fp(:)54 b(\(gss)p 996 3483 V 41 w(name)p 1249 3483 V 40 w(t,)39 b(mo)s(dify)-8 b(,)39 b(optional\))f(Authen)m(ticated)h (name)e(of)g(con)m(text)i(initiator.)390 3592 y(After)27 b(use,)g(this)f(name)h(should)e(b)s(e)h(deallo)s(cated)i(b)m(y)f (passing)f(it)h(to)g(gss)p 2847 3592 V 40 w(release)p 3149 3592 V 42 w(name\(\).)40 b(If)26 b(not)390 3702 y(required,)k(sp)s(ecify)g(NULL.)390 3837 y Ff(mec)m(h)p 600 3837 V 41 w(t)m(yp)s(e)5 b Fp(:)53 b(\(Ob)5 b(ject)37 b(ID,)g(mo)s(dify)-8 b(,)37 b(optional\))h(Securit)m(y)f(mec)m(hanism)g (used.)58 b(The)36 b(returned)390 3947 y(OID)27 b(v)-5 b(alue)28 b(will)g(b)s(e)e(a)i(p)s(oin)m(ter)f(in)m(to)h(static)h (storage,)h(and)d(should)f(b)s(e)h(treated)h(as)f(read-only)h(b)m(y)390 4057 y(the)g(caller)h(\(in)f(particular,)h(it)f(do)s(es)f(not)h(need)g (to)g(b)s(e)g(freed\).)39 b(If)28 b(not)g(required,)f(sp)s(ecify)h (NULL.)390 4192 y Ff(output)p 664 4192 V 40 w(tok)m(en)p Fp(:)55 b(\(bu\013er,)39 b(opaque,)h(mo)s(dify\))d(T)-8 b(ok)m(en)38 b(to)g(b)s(e)f(passed)g(to)h(p)s(eer)e(application.)63 b(If)390 4302 y(the)28 b(length)g(\014eld)f(of)h(the)g(returned)f(tok)m (en)i(bu\013er)e(is)g(0,)i(then)f(no)f(tok)m(en)i(need)f(b)s(e)f (passed)g(to)i(the)390 4411 y(p)s(eer)j(application.)48 b(If)32 b(a)g(non-)h(zero)g(length)f(\014eld)g(is)h(returned,)f(the)g (asso)s(ciated)i(storage)g(m)m(ust)390 4521 y(b)s(e)c(freed)g(after)h (use)f(b)m(y)g(the)h(application)g(with)f(a)h(call)h(to)f(gss)p 2547 4521 V 40 w(release)p 2849 4521 V 41 w(bu\013er\(\).)390 4656 y Ff(ret)p 507 4656 V 40 w(\015ags)t Fp(:)58 b(\(bit-mask,)43 b(mo)s(dify)-8 b(,)41 b(optional\))f(Con)m(tains)g(v)-5 b(arious)39 b(indep)s(enden)m(t)f(\015ags,)k(eac)m(h)e(of)390 4766 y(whic)m(h)e(indicates)i(that)f(the)g(con)m(text)h(supp)s(orts)d (a)i(sp)s(eci\014c)f(service)h(option.)66 b(If)38 b(not)h(needed,)390 4876 y(sp)s(ecify)c(NULL.)g(Sym)m(b)s(olic)g(names)h(are)f(pro)m(vided) g(for)g(eac)m(h)h(\015ag,)h(and)e(the)g(sym)m(b)s(olic)h(names)390 4985 y(corresp)s(onding)22 b(to)i(the)g(required)e(\015ags)h(should)g (b)s(e)f(logically-ANDed)27 b(with)c(the)h(ret)p 3311 4985 V 40 w(\015ags)f(v)-5 b(alue)390 5095 y(to)31 b(test)g(whether)f (a)h(giv)m(en)g(option)g(is)f(supp)s(orted)f(b)m(y)h(the)h(con)m(text.) 42 b(See)31 b(b)s(elo)m(w)g(for)f(the)g(\015ags.)390 5230 y Ff(time)p 572 5230 V 41 w(rec)6 b Fp(:)52 b(\(In)m(teger,)39 b(mo)s(dify)-8 b(,)37 b(optional\))g(Num)m(b)s(er)e(of)h(seconds)g(for) g(whic)m(h)g(the)g(con)m(text)i(will)390 5340 y(remain)30 b(v)-5 b(alid.)41 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)p eop end %%Page: 32 36 TeXDict begin 32 35 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(32)390 299 y Ff(delegated)p 768 299 28 4 v 42 w(cred)p 977 299 V 40 w(handle)5 b Fp(:)58 b(\(gss)p 1520 299 V 40 w(cred)p 1727 299 V 40 w(id)p 1843 299 V 40 w(t,)42 b(mo)s(dify)-8 b(,)41 b(optional)f(creden) m(tial\))h(Handle)e(for)g(cre-)390 408 y(den)m(tials)d(receiv)m(ed)g (from)e(con)m(text)j(initiator.)56 b(Only)34 b(v)-5 b(alid)35 b(if)g(deleg)p 2782 408 V 41 w(\015ag)g(in)g(ret)p 3221 408 V 40 w(\015ags)g(is)g(true,)390 518 y(in)27 b(whic)m(h)g(case)h(an) f(explicit)h(creden)m(tial)h(handle)e(\(i.e.)40 b(not)28 b(GSS)p 2611 518 V 39 w(C)p 2716 518 V 40 w(NO)p 2895 518 V 40 w(CREDENTIAL\))f(will)390 628 y(b)s(e)42 b(returned;)47 b(if)42 b(deleg)p 1240 628 V 41 w(\015ag)h(is)f(false,)k(gss)p 1930 628 V 40 w(accept)p 2221 628 V 42 w(sec)p 2379 628 V 40 w(con)m(text\(\))f(will)e(set)f(this)g(parameter)390 737 y(to)33 b(GSS)p 682 737 V 39 w(C)p 787 737 V 40 w(NO)p 966 737 V 40 w(CREDENTIAL.)f(If)g(a)h(creden)m(tial)h(handle)e(is)g (returned,)g(the)h(asso)s(ciated)h(re-)390 847 y(sources)26 b(m)m(ust)g(b)s(e)f(released)i(b)m(y)f(the)h(application)g(after)f(use) g(with)g(a)g(call)i(to)f(gss)p 3150 847 V 40 w(release)p 3452 847 V 41 w(cred\(\).)390 956 y(Sp)s(ecify)j(NULL)g(if)g(not)h (required.)390 1103 y(Allo)m(ws)39 b(a)g(remotely)g(initiated)g (securit)m(y)g(con)m(text)h(b)s(et)m(w)m(een)f(the)f(application)i(and) d(a)i(remote)390 1212 y(p)s(eer)53 b(to)h(b)s(e)f(established.)110 b(The)53 b(routine)g(ma)m(y)h(return)f(a)h(output)p 2905 1212 V 39 w(tok)m(en)h(whic)m(h)e(should)390 1322 y(b)s(e)g (transferred)g(to)i(the)f(p)s(eer)f(application,)61 b(where)53 b(the)h(p)s(eer)g(application)h(will)f(presen)m(t)390 1431 y(it)49 b(to)g(gss)p 751 1431 V 41 w(init)p 928 1431 V 40 w(sec)p 1084 1431 V 41 w(con)m(text.)97 b(If)48 b(no)g(tok)m(en)i(need)e(b)s(e)g(sen)m(t,)54 b(gss)p 2784 1431 V 40 w(accept)p 3075 1431 V 42 w(sec)p 3233 1431 V 40 w(con)m(text)d(will)390 1541 y(indicate)39 b(this)g(b)m(y)f(setting)h(the)g(length)f(\014eld)g(of)h(the)f(output)p 2572 1541 V 40 w(tok)m(en)h(argumen)m(t)g(to)g(zero.)65 b(T)-8 b(o)390 1650 y(complete)52 b(the)f(con)m(text)i(establishmen)m (t,)k(one)52 b(or)e(more)i(reply)e(tok)m(ens)i(ma)m(y)f(b)s(e)g (required)390 1760 y(from)65 b(the)h(p)s(eer)f(application;)85 b(if)66 b(so,)75 b(gss)p 2038 1760 V 40 w(accept)p 2329 1760 V 42 w(sec)p 2487 1760 V 40 w(con)m(text)68 b(will)e(return)f(a)h (status)390 1870 y(\015ag)57 b(of)f(GSS)p 896 1870 V 40 w(S)p 987 1870 V 39 w(CONTINUE)p 1528 1870 V 40 w(NEEDED,)h(in)f (whic)m(h)g(case)i(it)f(should)e(b)s(e)h(called)i(again)390 1979 y(when)43 b(the)h(reply)f(tok)m(en)i(is)f(receiv)m(ed)h(from)f (the)g(p)s(eer)f(application,)49 b(passing)43 b(the)h(tok)m(en)h(to)390 2089 y(gss)p 513 2089 V 40 w(accept)p 804 2089 V 42 w(sec)p 962 2089 V 40 w(con)m(text)33 b(via)e(the)f(input)p 1844 2089 V 39 w(tok)m(en)i(parameters.)390 2235 y(P)m(ortable)27 b(applications)f(should)f(b)s(e)g(constructed)g(to)h(use)g(the)f(tok)m (en)i(length)e(and)g(return)g(status)390 2345 y(to)k(determine)f (whether)g(a)g(tok)m(en)i(needs)d(to)i(b)s(e)f(sen)m(t)g(or)h(w)m (aited)g(for.)40 b(Th)m(us)27 b(a)h(t)m(ypical)i(p)s(ortable)390 2454 y(caller)i(should)d(alw)m(a)m(ys)j(in)m(v)m(ok)m(e)g(gss)p 1615 2454 V 40 w(accept)p 1906 2454 V 42 w(sec)p 2064 2454 V 41 w(con)m(text)g(within)e(a)g(lo)s(op:)630 2600 y Fj(gss_ctx_id_t)44 b(context_hdl)h(=)j(GSS_C_NO_CONTEXT;)630 2819 y(do)f({)725 2929 y(receive_token_from_peer\(in)o(put_)o(tok)o (en\);)725 3039 y(maj_stat)f(=)h(gss_accept_sec_context\(&mi)o(n_st)o (at,)2348 3148 y(&context_hdl,)2348 3258 y(cred_hdl,)2348 3367 y(input_token,)2348 3477 y(input_bindings,)2348 3587 y(&client_name,)2348 3696 y(&mech_type,)2348 3806 y(output_token,)2348 3915 y(&ret_flags,)2348 4025 y(&time_rec,)2348 4134 y(&deleg_cred\);)725 4244 y(if)h(\(GSS_ERROR\(maj_stat\)\))42 b({)821 4354 y(report_error\(maj_stat,)g(min_stat\);)725 4463 y(};)725 4573 y(if)48 b(\(output_token->length)42 b(!=)47 b(0\))g({)821 4682 y(send_token_to_peer\(outpu)o(t_to)o(ken)o (\);)821 4902 y(gss_release_buffer\(&min_)o(stat)o(,)42 b(output_token\);)725 5011 y(};)725 5121 y(if)48 b (\(GSS_ERROR\(maj_stat\)\))42 b({)821 5230 y(if)47 b(\(context_hdl)e (!=)i(GSS_C_NO_CONTEXT\))916 5340 y(gss_delete_sec_context\(&mi)o(n_s)o (tat,)p eop end %%Page: 33 37 TeXDict begin 33 36 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(33)2014 299 y Fj(&context_hdl,)2014 408 y(GSS_C_NO_BUFFER\);)821 518 y(break;)725 628 y(};)630 737 y(})47 b(while)g(\(maj_stat)e(&)j(GSS_S_CONTINUE_NEEDED\);)390 871 y Fp(Whenev)m(er)94 b(the)g(routine)g(returns)e(a)i(ma)5 b(jor)93 b(status)h(that)h(includes)e(the)g(v)-5 b(alue)390 981 y(GSS)p 569 981 28 4 v 39 w(S)p 659 981 V 40 w(CONTINUE)p 1201 981 V 39 w(NEEDED,)29 b(the)e(con)m(text)j(is)e(not)f(fully)h (established)g(and)f(the)g(follo)m(wing)390 1090 y(restrictions)k (apply)f(to)h(the)g(output)f(parameters:)390 1224 y(The)c(v)-5 b(alue)27 b(returned)e(via)i(the)g(time)p 1649 1224 V 40 w(rec)g(parameter)g(is)f(unde\014ned)e(Unless)j(the)f(accompan)m (ying)390 1334 y(ret)p 507 1334 V 40 w(\015ags)34 b(parameter)f(con)m (tains)i(the)e(bit)g(GSS)p 2031 1334 V 39 w(C)p 2136 1334 V 40 w(PR)m(OT)p 2439 1334 V 40 w(READ)m(Y)p 2810 1334 V 41 w(FLA)m(G,)h(indicating)g(that)390 1443 y(p)s(er-message)41 b(services)f(ma)m(y)h(b)s(e)f(applied)g(in)f(adv)-5 b(ance)41 b(of)g(a)f(successful)g(completion)h(status,)390 1553 y(the)32 b(v)-5 b(alue)33 b(returned)e(via)i(the)f(mec)m(h)p 1675 1553 V 40 w(t)m(yp)s(e)h(parameter)f(ma)m(y)h(b)s(e)e(unde\014ned) f(un)m(til)j(the)f(routine)390 1663 y(returns)d(a)i(ma)5 b(jor)30 b(status)h(v)-5 b(alue)31 b(of)f(GSS)p 1831 1663 V 40 w(S)p 1922 1663 V 39 w(COMPLETE.)390 1797 y(The)20 b(v)-5 b(alues)20 b(of)h(the)f(GSS)p 1246 1797 V 40 w(C)p 1352 1797 V 39 w(DELEG)p 1712 1797 V 41 w(FLA)m(G,)h(GSS)p 2224 1797 V 40 w(C)p 2330 1797 V 39 w(MUTUAL)p 2779 1797 V 41 w(FLA)m(G,GSS)p 3270 1797 V 40 w(C)p 3376 1797 V 40 w(REPLA)-8 b(Y)p 3792 1797 V 40 w(FLA)m(G,)390 1906 y(GSS)p 569 1906 V 39 w(C)p 674 1906 V 40 w(SEQUENCE)p 1224 1906 V 39 w(FLA)m(G,)130 b(GSS)p 1843 1906 V 39 w(C)p 1948 1906 V 40 w(CONF)p 2252 1906 V 40 w(FLA)m(G,GSS)p 2742 1906 V 40 w(C)p 2848 1906 V 40 w(INTEG)p 3188 1906 V 40 w(FLA)m(G)g(and)390 2016 y(GSS)p 569 2016 V 39 w(C)p 674 2016 V 40 w(ANON)p 989 2016 V 40 w(FLA)m(G)39 b(bits)e(returned)f (via)i(the)f(ret)p 2310 2016 V 41 w(\015ags)g(parameter)h(should)e(con) m(tain)j(the)390 2125 y(v)-5 b(alues)30 b(that)h(the)f(implemen)m (tation)h(exp)s(ects)f(w)m(ould)g(b)s(e)f(v)-5 b(alid)30 b(if)g(con)m(text)i(establishmen)m(t)e(w)m(ere)390 2235 y(to)h(succeed.)390 2369 y(The)42 b(v)-5 b(alues)42 b(of)g(the)g(GSS)p 1333 2369 V 40 w(C)p 1439 2369 V 39 w(PR)m(OT)p 1741 2369 V 40 w(READ)m(Y)p 2112 2369 V 41 w(FLA)m(G)h(and)e(GSS)p 2809 2369 V 40 w(C)p 2915 2369 V 39 w(TRANS)p 3274 2369 V 40 w(FLA)m(G)i(bits)390 2478 y(within)36 b(ret)p 796 2478 V 40 w(\015ags)h(should)e(indicate)j(the)e(actual)i(state)g(at)f (the)g(time)g(gss)p 2974 2478 V 40 w(accept)p 3265 2478 V 41 w(sec)p 3422 2478 V 41 w(con)m(text)390 2588 y(returns,)29 b(whether)h(or)g(not)h(the)g(con)m(text)h(is)e(fully)g(established.)390 2722 y(Although)20 b(this)h(requires)e(that)i(GSS-API)f(implemen)m (tations)i(set)f(the)f(GSS)p 2985 2722 V 39 w(C)p 3090 2722 V 40 w(PR)m(OT)p 3393 2722 V 40 w(READ)m(Y)p 3764 2722 V 41 w(FLA)m(G)390 2832 y(in)73 b(the)g(\014nal)f(ret)p 1099 2832 V 41 w(\015ags)h(returned)f(to)h(a)h(caller)g(\(i.e.)170 b(when)72 b(accompanied)i(b)m(y)f(a)390 2941 y(GSS)p 569 2941 V 39 w(S)p 659 2941 V 40 w(COMPLETE)36 b(status)h(co)s(de\),)j (applications)e(should)e(not)h(rely)h(on)f(this)g(b)s(eha)m(vior)g(as) 390 3051 y(the)g(\015ag)g(w)m(as)g(not)g(de\014ned)f(in)g(V)-8 b(ersion)38 b(1)f(of)g(the)g(GSS-API.)f(Instead,)j(applications)f (should)390 3160 y(b)s(e)45 b(prepared)f(to)j(use)e(p)s(er-message)h (services)g(after)g(a)g(successful)f(con)m(text)j(establishmen)m(t,)390 3270 y(according)31 b(to)g(the)g(GSS)p 1246 3270 V 39 w(C)p 1351 3270 V 40 w(INTEG)p 1691 3270 V 40 w(FLA)m(G)g(and)f(GSS)p 2364 3270 V 39 w(C)p 2469 3270 V 40 w(CONF)p 2773 3270 V 40 w(FLA)m(G)h(v)-5 b(alues.)390 3404 y(All)30 b(other)h(bits)e (within)h(the)g(ret)p 1508 3404 V 40 w(\015ags)g(argumen)m(t)h(should)e (b)s(e)g(set)h(to)h(zero.)41 b(While)31 b(the)f(routine)390 3513 y(returns)40 b(GSS)p 894 3513 V 39 w(S)p 984 3513 V 40 w(CONTINUE)p 1526 3513 V 39 w(NEEDED,)i(the)f(v)-5 b(alues)41 b(returned)f(via)i(the)f(ret)p 3290 3513 V 40 w(\015ags)h(argu-)390 3623 y(men)m(t)33 b(indicate)g(the)f(services) h(that)g(the)f(implemen)m(tation)i(exp)s(ects)f(to)g(b)s(e)e(a)m(v)-5 b(ailable)35 b(from)d(the)390 3733 y(established)f(con)m(text.)390 3867 y(If)43 b(the)i(initial)g(call)g(of)f(gss)p 1361 3867 V 40 w(accept)p 1652 3867 V 42 w(sec)p 1810 3867 V 40 w(con)m(text\(\))j(fails,)h(the)c(implemen)m(tation)i(should)d (not)390 3976 y(create)22 b(a)g(con)m(text)h(ob)5 b(ject,)23 b(and)e(should)f(lea)m(v)m(e)j(the)e(v)-5 b(alue)21 b(of)h(the)f(con)m (text)p 2894 3976 V 42 w(handle)f(parameter)h(set)390 4086 y(to)30 b(GSS)p 679 4086 V 39 w(C)p 784 4086 V 40 w(NO)p 963 4086 V 39 w(CONTEXT)e(to)i(indicate)g(this.)40 b(In)28 b(the)h(ev)m(en)m(t)h(of)f(a)h(failure)f(on)f(a)i(subsequen)m (t)390 4195 y(call,)38 b(the)d(implemen)m(tation)i(is)e(p)s(ermitted)g (to)h(delete)g(the)f Fj(")p Fp(half-built)p Fj(")g Fp(securit)m(y)h (con)m(text)h(\(in)390 4305 y(whic)m(h)d(case)h(it)g(should)e(set)i (the)f(con)m(text)p 1840 4305 V 42 w(handle)g(parameter)h(to)g(GSS)p 2906 4305 V 39 w(C)p 3011 4305 V 40 w(NO)p 3190 4305 V 39 w(CONTEXT\),)390 4415 y(but)g(the)i(preferred)d(b)s(eha)m(vior)i (is)g(to)h(lea)m(v)m(e)i(the)d(securit)m(y)h(con)m(text)g(\(and)f(the)g (con)m(text)p 3451 4415 V 42 w(handle)390 4524 y(parameter\))31 b(un)m(touc)m(hed)g(for)f(the)g(application)i(to)f(delete)h(\(using)e (gss)p 2835 4524 V 40 w(delete)p 3106 4524 V 41 w(sec)p 3263 4524 V 41 w(con)m(text\).)390 4658 y(During)42 b(con)m(text)i (establishmen)m(t,)j(the)c(informational)g(status)g(bits)f(GSS)p 3052 4658 V 39 w(S)p 3142 4658 V 40 w(OLD)p 3379 4658 V 40 w(TOKEN)390 4768 y(and)36 b(GSS)p 752 4768 V 40 w(S)p 843 4768 V 39 w(DUPLICA)-8 b(TE)p 1425 4768 V 40 w(TOKEN)36 b(indicate)i(fatal)g(errors,)g(and)e(GSS-API)h(mec)m (hanisms)390 4877 y(should)d(alw)m(a)m(ys)i(return)d(them)i(in)f(asso)s (ciation)i(with)e(a)h(routine)g(error)f(of)h(GSS)p 3197 4877 V 39 w(S)p 3287 4877 V 40 w(F)-10 b(AILURE.)390 4987 y(This)30 b(requiremen)m(t)h(for)g(pairing)g(did)f(not)h(exist)g (in)g(v)m(ersion)g(1)g(of)g(the)h(GSS-API)e(sp)s(eci\014cation,)390 5096 y(so)41 b(applications)h(that)f(wish)f(to)h(run)e(o)m(v)m(er)j(v)m (ersion)f(1)g(implemen)m(tations)h(m)m(ust)f(sp)s(ecial-case)390 5206 y(these)31 b(co)s(des.)390 5340 y(The)f Fj(ret_flags)e Fp(v)-5 b(alues:)p eop end %%Page: 34 38 TeXDict begin 34 37 bop 150 -116 a Fp(Chapter)30 b(3:)h(Standard)e(GSS) h(API)2294 b(34)870 299 y Fj(GSS_C_DELEG_FLAG)945 435 y Fn(\017)60 b Fp(T)-8 b(rue)96 b(-)h(Delegated)j(creden)m(tials)e(are) f(a)m(v)-5 b(ailable)99 b(via)e(the)g(dele-)1050 545 y(gated)p 1272 545 28 4 v 41 w(cred)p 1480 545 V 40 w(handle)30 b(parameter.)945 681 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(No)g(creden)m(tials)g(w)m(ere)g(delegated.)870 844 y Fj(GSS_C_MUTUAL_FLAG)945 980 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Remote)g(p)s(eer)f(ask)m(ed)h(for)f(m)m(utual)h(authen)m (tication.)945 1116 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Remote)g(p)s(eer)f(did)g(not)g(ask)h(for)f(m)m(utual)h(authen)m (tication.)870 1279 y Fj(GSS_C_REPLAY_FLAG)945 1415 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(repla)m(y)f(of)h(protected)g (messages)h(will)e(b)s(e)g(detected.)945 1551 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(repla)m(y)m(ed)g(messages)g(will)g(not)g(b)s (e)e(detected.)870 1714 y Fj(GSS_C_SEQUENCE_FLAG)945 1850 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(out-of-sequence)g(protected) h(messages)f(will)g(b)s(e)f(detected.)945 1986 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(out-of-sequence)h(messages)f(will)g(not)f(b)s (e)g(detected.)870 2149 y Fj(GSS_C_CONF_FLAG)945 2285 y Fn(\017)60 b Fp(T)-8 b(rue)23 b(-)h(Con\014den)m(tialit)m(y)h (service)g(ma)m(y)f(b)s(e)f(in)m(v)m(ok)m(ed)i(b)m(y)f(calling)h(the)f (gss)p 3519 2285 V 40 w(wrap)1050 2394 y(routine.)945 2531 y Fn(\017)60 b Fp(F)-8 b(alse)33 b(-)e(No)h(con\014den)m(tialit)m (y)i(service)e(\(via)g(gss)p 2686 2531 V 40 w(wrap\))f(a)m(v)-5 b(ailable.)46 b(gss)p 3519 2531 V 40 w(wrap)1050 2640 y(will)38 b(pro)m(vide)f(message)i(encapsulation,)h(data-origin)f (authen)m(tication)h(and)1050 2750 y(in)m(tegrit)m(y)32 b(services)f(only)-8 b(.)870 2912 y Fj(GSS_C_INTEG_FLAG)945 3049 y Fn(\017)60 b Fp(T)-8 b(rue)27 b(-)h(In)m(tegrit)m(y)h(service)f (ma)m(y)g(b)s(e)f(in)m(v)m(ok)m(ed)i(b)m(y)e(calling)i(either)f(gss)p 3413 3049 V 40 w(get)p 3573 3049 V 42 w(mic)1050 3158 y(or)i(gss)p 1284 3158 V 41 w(wrap)f(routines.)945 3294 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(P)m(er-message)h(in)m(tegrit)m (y)g(service)f(una)m(v)-5 b(ailable.)870 3457 y Fj(GSS_C_ANON_FLAG)945 3593 y Fn(\017)60 b Fp(T)-8 b(rue)26 b(-)g(The)g(initiator)i(do)s(es)d (not)i(wish)e(to)i(b)s(e)f(authen)m(ticated;)k(the)c(src)p 3504 3593 V 40 w(name)1050 3703 y(parameter)31 b(\(if)g(requested\))f (con)m(tains)i(an)e(anon)m(ymous)g(in)m(ternal)h(name.)945 3839 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(initiator)h(has)f(b)s (een)g(authen)m(ticated)i(normally)-8 b(.)870 4002 y Fj(GSS_C_PROT_READY_FLAG)945 4138 y Fn(\017)60 b Fp(T)-8 b(rue)66 b(-)h(Protection)h(services)f(\(as)g(sp)s(eci\014ed)f(b)m(y)h (the)f(states)i(of)f(the)1050 4247 y(GSS)p 1229 4247 V 39 w(C)p 1334 4247 V 40 w(CONF)p 1638 4247 V 40 w(FLA)m(G)h(and)e (GSS)p 2384 4247 V 39 w(C)p 2489 4247 V 40 w(INTEG)p 2829 4247 V 40 w(FLA)m(G\))i(are)g(a)m(v)-5 b(ailable)1050 4357 y(if)93 b(the)h(accompan)m(ying)g(ma)5 b(jor)94 b(status)f(return)f(v)-5 b(alue)94 b(is)f(either)1050 4467 y(GSS)p 1229 4467 V 39 w(S)p 1319 4467 V 40 w(COMPLETE)29 b(or)h(GSS)p 2201 4467 V 40 w(S)p 2292 4467 V 39 w(CONTINUE)p 2833 4467 V 39 w(NEEDED.)945 4603 y Fn(\017)60 b Fp(F)-8 b(alse)88 b(-)f(Protection)h(services)f(\(as)g(sp)s(eci\014ed)e(b)m(y)i (the)f(states)i(of)1050 4712 y(the)121 b(GSS)p 1476 4712 V 40 w(C)p 1582 4712 V 39 w(CONF)p 1885 4712 V 40 w(FLA)m(G)h(and)f (GSS)p 2740 4712 V 39 w(C)p 2845 4712 V 40 w(INTEG)p 3185 4712 V 40 w(FLA)m(G\))i(are)1050 4822 y(a)m(v)-5 b(ailable)54 b(only)d(if)g(the)h(accompan)m(ying)g(ma)5 b(jor)52 b(status)f(return)f(v)-5 b(alue)52 b(is)1050 4932 y(GSS)p 1229 4932 V 39 w(S)p 1319 4932 V 40 w(COMPLETE.)870 5094 y Fj(GSS_C_TRANS_FLAG)945 5230 y Fn(\017)60 b Fp(T)-8 b(rue)39 b(-)h(The)f(resultan)m(t)h(securit)m(y)g(con)m(text)h(ma)m(y)f (b)s(e)f(transferred)f(to)j(other)1050 5340 y(pro)s(cesses)30 b(via)h(a)g(call)h(to)f(gss)p 2069 5340 V 40 w(exp)s(ort)p 2367 5340 V 40 w(sec)p 2523 5340 V 40 w(con)m(text\(\).)p eop end %%Page: 35 39 TeXDict begin 35 38 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(35)945 299 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(securit)m(y)h(con)m(text)h(is)e(not)h (transferable.)390 453 y(All)g(other)g(bits)f(should)f(b)s(e)h(set)h (to)g(zero.)390 585 y(Return)f(v)-5 b(alue:)390 717 y Fj(GSS_S_CONTINUE_NEEDED)p Fp(:)31 b(Indicates)23 b(that)g(a)g(tok)m (en)h(from)e(the)h(p)s(eer)f(application)i(is)f(required)390 827 y(to)34 b(complete)g(the)g(con)m(text,)i(and)c(that)i(gss)p 1904 827 28 4 v 40 w(accept)p 2195 827 V 42 w(sec)p 2353 827 V 40 w(con)m(text)h(m)m(ust)e(b)s(e)g(called)h(again)g(with)390 936 y(that)d(tok)m(en.)390 1068 y Fj(GSS_S_DEFECTIVE_TOKEN)p Fp(:)63 b(Indicates)45 b(that)f(consistency)i(c)m(hec)m(ks)f(p)s (erformed)e(on)h(the)h(in-)390 1178 y(put)p 533 1178 V 39 w(tok)m(en)32 b(failed.)390 1310 y Fj(GSS_S_DEFECTIVE_CREDENTI)o (AL)p Fp(:)40 b(Indicates)34 b(that)g(consistency)g(c)m(hec)m(ks)h(p)s (erformed)d(on)h(the)390 1420 y(creden)m(tial)f(failed.)390 1552 y Fj(GSS_S_NO_CRED)p Fp(:)47 b(The)35 b(supplied)f(creden)m(tials) j(w)m(ere)e(not)h(v)-5 b(alid)36 b(for)f(con)m(text)i(acceptance,)i(or) 390 1661 y(the)31 b(creden)m(tial)g(handle)f(did)g(not)h(reference)f (an)m(y)h(creden)m(tials.)390 1793 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)k(The)30 b(referenced)g(creden)m(tials)i(ha)m(v)m(e)f(expired.)390 1925 y Fj(GSS_S_BAD_BINDINGS)p Fp(:)40 b(The)32 b(input)p 1727 1925 V 39 w(tok)m(en)i(con)m(tains)g(di\013eren)m(t)f(c)m(hannel)g (bindings)e(to)i(those)390 2035 y(sp)s(eci\014ed)d(via)h(the)f(input)p 1281 2035 V 39 w(c)m(han)p 1504 2035 V 41 w(bindings)f(parameter.)390 2167 y Fj(GSS_S_NO_CONTEXT)p Fp(:)58 b(Indicates)42 b(that)g(the)f (supplied)f(con)m(text)j(handle)e(did)f(not)i(refer)f(to)h(a)390 2276 y(v)-5 b(alid)31 b(con)m(text.)390 2408 y Fj(GSS_S_BAD_SIG)p Fp(:)37 b(The)30 b(input)p 1482 2408 V 39 w(tok)m(en)i(con)m(tains)f (an)f(in)m(v)-5 b(alid)31 b(MIC.)390 2540 y Fj(GSS_S_OLD_TOKEN)p Fp(:)36 b(The)28 b(input)p 1575 2540 V 39 w(tok)m(en)i(w)m(as)f(to)s(o) h(old.)40 b(This)28 b(is)h(a)g(fatal)h(error)f(during)e(con)m(text)390 2650 y(establishmen)m(t.)390 2782 y Fj(GSS_S_DUPLICATE_TOKEN)p Fp(:)59 b(The)41 b(input)p 1899 2782 V 39 w(tok)m(en)j(is)e(v)-5 b(alid,)46 b(but)41 b(is)h(a)h(duplicate)g(of)f(a)h(tok)m(en)390 2892 y(already)31 b(pro)s(cessed.)40 b(This)30 b(is)g(a)h(fatal)g (error)f(during)g(con)m(text)i(establishmen)m(t.)390 3024 y Fj(GSS_S_BAD_MECH)p Fp(:)j(The)26 b(receiv)m(ed)i(tok)m(en)f(sp) s(eci\014ed)f(a)h(mec)m(hanism)g(that)g(is)g(not)f(supp)s(orted)f(b)m (y)390 3133 y(the)31 b(implemen)m(tation)h(or)e(the)g(pro)m(vided)g (creden)m(tial.)150 3328 y Fi(gss)p 316 3328 37 5 v 55 w(delete)p 689 3328 V 54 w(sec)p 902 3328 V 54 w(con)m(text)3350 3519 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_delete_sec_context)d Fg(\()p Ff(OM)p 2064 3519 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)565 3629 y(gss)p 688 3629 V 40 w(ctx)p 851 3629 V 41 w(id)p 968 3629 V 40 w(t)30 b(*)h Fe(context_handle)12 b Ff(,)35 b(gss)p 2066 3629 V 40 w(bu\013er)p 2337 3629 V 39 w(t)30 b Fe(output_token)12 b Fg(\))390 3738 y Ff(minor)p 629 3738 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m (hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 3870 y Ff(con)m(text)p 687 3870 V 42 w(handle)5 b Fp(:)111 b(\(gss)p 1285 3870 V 41 w(ctx)p 1449 3870 V 40 w(id)p 1565 3870 V 40 w(t,)75 b(mo)s(dify\))66 b(Con)m(text)h(handle)e(iden)m (tifying)i(con)m(text)g(to)390 3980 y(delete.)92 b(After)47 b(deleting)h(the)f(con)m(text,)53 b(the)47 b(GSS-API)f(will)i(set)f (this)g(con)m(text)i(handle)d(to)390 4090 y(GSS)p 569 4090 V 39 w(C)p 674 4090 V 40 w(NO)p 853 4090 V 40 w(CONTEXT.)390 4222 y Ff(output)p 664 4222 V 40 w(tok)m(en)p Fp(:)52 b(\(bu\013er,)36 b(opaque,)h(mo)s(dify)-8 b(,)36 b(optional\))h(T)-8 b(ok)m(en)37 b(to)f(b)s(e)e(sen)m(t)i(to)g(remote)h(appli-)390 4331 y(cation)d(to)g(instruct)e(it)i(to)f(also)h(delete)g(the)f(con)m (text.)50 b(It)33 b(is)g(recommended)f(that)i(applications)390 4441 y(sp)s(ecify)d(GSS)p 871 4441 V 40 w(C)p 977 4441 V 39 w(NO)p 1155 4441 V 40 w(BUFFER)i(for)e(this)h(parameter,)h (requesting)f(lo)s(cal)g(deletion)h(only)-8 b(.)45 b(If)32 b(a)390 4550 y(bu\013er)g(parameter)h(is)g(pro)m(vided)f(b)m(y)h(the)g (application,)i(the)e(mec)m(hanism)g(ma)m(y)g(return)f(a)h(tok)m(en)390 4660 y(in)k(it;)42 b(mec)m(hanisms)c(that)g(implemen)m(t)h(only)e(lo)s (cal)i(deletion)g(should)e(set)h(the)g(length)g(\014eld)f(of)390 4770 y(this)g(tok)m(en)h(to)g(zero)g(to)g(indicate)g(to)g(the)g (application)g(that)g(no)f(tok)m(en)h(is)g(to)g(b)s(e)e(sen)m(t)i(to)g (the)390 4879 y(p)s(eer.)390 5011 y(Delete)31 b(a)f(securit)m(y)f(con)m (text.)43 b(gss)p 1564 5011 V 40 w(delete)p 1835 5011 V 41 w(sec)p 1992 5011 V 41 w(con)m(text)31 b(will)e(delete)h(the)g(lo) s(cal)g(data)g(structures)390 5121 y(asso)s(ciated)41 b(with)e(the)h(sp)s(eci\014ed)f(securit)m(y)i(con)m(text,)j(and)39 b(ma)m(y)h(generate)h(an)f(output)p 3474 5121 V 40 w(tok)m(en,)390 5230 y(whic)m(h)33 b(when)g(passed)f(to)j(the)e(p)s(eer)g(gss)p 1785 5230 V 40 w(pro)s(cess)p 2112 5230 V 40 w(con)m(text)p 2443 5230 V 42 w(tok)m(en)h(will)g(instruct)f(it)h(to)g(do)f(lik)m(e-) 390 5340 y(wise.)50 b(If)34 b(no)f(tok)m(en)i(is)e(required)g(b)m(y)h (the)f(mec)m(hanism,)i(the)f(GSS-API)f(should)g(set)h(the)g(length)p eop end %%Page: 36 40 TeXDict begin 36 39 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(36)390 299 y(\014eld)35 b(of)g(the)g(output)p 1135 299 28 4 v 40 w(tok)m(en)h(\(if)f(pro)m (vided\))g(to)h(zero.)55 b(No)36 b(further)d(securit)m(y)j(services)g (ma)m(y)g(b)s(e)390 408 y(obtained)31 b(using)f(the)g(con)m(text)i(sp)s (eci\014ed)e(b)m(y)g(con)m(text)p 2271 408 V 42 w(handle.)390 555 y(In)25 b(addition)h(to)g(deleting)g(established)g(securit)m(y)h (con)m(texts,)h(gss)p 2596 555 V 40 w(delete)p 2867 555 V 42 w(sec)p 3025 555 V 40 w(con)m(text)g(m)m(ust)d(also)390 665 y(b)s(e)h(able)h(to)h(delete)f Fj(")p Fp(half-built)p Fj(")g Fp(securit)m(y)g(con)m(texts)h(resulting)f(from)f(an)h (incomplete)h(sequence)390 775 y(of)j(gss)p 617 775 V 40 w(init)p 793 775 V 40 w(sec)p 949 775 V 41 w(con)m(text\(\)/gss)p 1513 775 V 43 w(accept)p 1807 775 V 42 w(sec)p 1965 775 V 40 w(con)m(text\(\))i(calls.)390 921 y(The)c(output)p 850 921 V 40 w(tok)m(en)h(parameter)g(is)g(retained)f(for)h (compatibilit)m(y)h(with)e(v)m(ersion)h(1)g(of)g(the)f(GSS-)390 1031 y(API.)41 b(It)h(is)f(recommended)g(that)h(b)s(oth)f(p)s(eer)g (applications)i(in)m(v)m(ok)m(e)g(gss)p 2994 1031 V 40 w(delete)p 3265 1031 V 41 w(sec)p 3422 1031 V 41 w(con)m(text)390 1141 y(passing)35 b(the)g(v)-5 b(alue)35 b(GSS)p 1293 1141 V 39 w(C)p 1398 1141 V 40 w(NO)p 1577 1141 V 40 w(BUFFER)h(for)f(the)g(output)p 2605 1141 V 39 w(tok)m(en)h(parameter,) h(indicating)390 1250 y(that)53 b(no)e(tok)m(en)i(is)f(required,)57 b(and)52 b(that)g(gss)p 2087 1250 V 40 w(delete)p 2358 1250 V 42 w(sec)p 2516 1250 V 40 w(con)m(text)i(should)d(simply)h (delete)390 1360 y(lo)s(cal)60 b(con)m(text)h(data)e(structures.)125 b(If)59 b(the)f(application)j(do)s(es)d(pass)g(a)h(v)-5 b(alid)59 b(bu\013er)f(to)390 1469 y(gss)p 513 1469 V 40 w(delete)p 784 1469 V 41 w(sec)p 941 1469 V 41 w(con)m(text,)50 b(mec)m(hanisms)45 b(are)g(encouraged)g(to)h(return)d(a)i(zero-length)i (tok)m(en,)390 1579 y(indicating)34 b(that)g(no)f(p)s(eer)f(action)i (is)f(necessary)-8 b(,)35 b(and)e(that)g(no)g(tok)m(en)h(should)f(b)s (e)f(transferred)390 1688 y(b)m(y)e(the)h(application.)390 1835 y(Return)f(v)-5 b(alue:)390 1982 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2129 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(No)31 b(v)-5 b(alid)31 b(con)m(text)h(w)m(as)f(supplied.)150 2341 y Fi(gss)p 316 2341 37 5 v 55 w(pro)s(cess)p 760 2341 V 56 w(con)m(text)p 1214 2341 V 53 w(tok)m(en)3350 2550 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_process_context_to)q(ken)d Fg(\()p Ff(OM)p 2221 2550 28 4 v 40 w(uin)m(t32)32 b(*)565 2659 y Fe(minor_status)12 b Ff(,)34 b(const)d(gss)p 1621 2659 V 40 w(ctx)p 1784 2659 V 41 w(id)p 1901 2659 V 39 w(t)g Fe(context_handle)12 b Ff(,)34 b(const)d(gss)p 3160 2659 V 40 w(bu\013er)p 3431 2659 V 39 w(t)565 2769 y Fe(token_buffer)12 b Fg(\))390 2879 y Ff(minor)p 629 2879 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Implemen)m(tation)i(sp)s(eci\014c)e(status)h(co)s(de.) 390 3025 y Ff(con)m(text)p 687 3025 V 42 w(handle)5 b Fp(:)43 b(\(gss)p 1217 3025 V 41 w(ctx)p 1381 3025 V 41 w(id)p 1498 3025 V 39 w(t,)33 b(read\))f(Con)m(text)h(handle)f(of)g (con)m(text)i(on)e(whic)m(h)f(tok)m(en)i(is)f(to)390 3135 y(b)s(e)e(pro)s(cessed)390 3282 y Ff(tok)m(en)p 612 3282 V 41 w(bu\013er)7 b Fp(:)39 b(\(bu\013er,)30 b(opaque,)h(read\))g(T)-8 b(ok)m(en)31 b(to)g(pro)s(cess.)390 3429 y(Pro)m(vides)f(a)g(w)m(a)m(y)h(to)g(pass)e(an)h(async)m(hronous)f (tok)m(en)i(to)f(the)g(securit)m(y)h(service.)41 b(Most)31 b(con)m(text-)390 3538 y(lev)m(el)46 b(tok)m(ens)f(are)g(emitted)g(and) e(pro)s(cessed)h(sync)m(hronously)f(b)m(y)h(gss)p 2899 3538 V 40 w(init)p 3075 3538 V 41 w(sec)p 3232 3538 V 41 w(con)m(text)i(and)390 3648 y(gss)p 513 3648 V 40 w(accept)p 804 3648 V 42 w(sec)p 962 3648 V 40 w(con)m(text,)33 b(and)c(the)i(application)g(is)g(informed)e(as)h(to)h(whether)f (further)f(tok)m(ens)390 3758 y(are)35 b(exp)s(ected)f(b)m(y)g(the)h (GSS)p 1398 3758 V 39 w(C)p 1503 3758 V 40 w(CONTINUE)p 2045 3758 V 39 w(NEEDED)g(ma)5 b(jor)34 b(status)g(bit.)52 b(Occasionally)-8 b(,)390 3867 y(a)30 b(mec)m(hanism)g(ma)m(y)g(need)f (to)i(emit)f(a)g(con)m(text-lev)m(el)j(tok)m(en)e(at)f(a)g(p)s(oin)m(t) g(when)e(the)i(p)s(eer)f(en)m(tit)m(y)390 3977 y(is)e(not)g(exp)s (ecting)g(a)h(tok)m(en.)40 b(F)-8 b(or)28 b(example,)g(the)f (initiator's)i(\014nal)d(call)i(to)g(gss)p 3090 3977 V 40 w(init)p 3266 3977 V 40 w(sec)p 3422 3977 V 41 w(con)m(text)390 4086 y(ma)m(y)41 b(emit)h(a)f(tok)m(en)h(and)e(return)g(a)h(status)g (of)g(GSS)p 2293 4086 V 40 w(S)p 2384 4086 V 39 w(COMPLETE,)f(but)g (the)h(acceptor's)390 4196 y(call)48 b(to)g(gss)p 824 4196 V 41 w(accept)p 1116 4196 V 41 w(sec)p 1273 4196 V 41 w(con)m(text)h(ma)m(y)e(fail.)92 b(The)47 b(acceptor's)i(mec)m (hanism)e(ma)m(y)h(wish)e(to)390 4306 y(send)h(a)h(tok)m(en)h(con)m (taining)g(an)e(error)h(indication)g(to)h(the)e(initiator,)54 b(but)47 b(the)h(initiator)h(is)390 4415 y(not)38 b(exp)s(ecting)g(a)g (tok)m(en)h(at)f(this)f(p)s(oin)m(t,)j(b)s(elieving)e(that)g(the)g(con) m(text)i(is)d(fully)g(established.)390 4525 y(Gss)p 539 4525 V 40 w(pro)s(cess)p 866 4525 V 40 w(con)m(text)p 1197 4525 V 42 w(tok)m(en)31 b(pro)m(vides)f(a)g(w)m(a)m(y)i(to)e(pass) g(suc)m(h)g(a)g(tok)m(en)i(to)e(the)h(mec)m(hanism)f(at)390 4634 y(an)m(y)h(time.)390 4781 y(Return)f(v)-5 b(alue:)390 4928 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 5075 y Fj(GSS_S_DEFECTIVE_TOKEN)p Fp(:)38 b(Indicates)33 b(that)f(consistency)h(c)m(hec)m(ks)g(p)s(erformed)e(on)h(the)g(tok)m (en)390 5184 y(failed.)390 5331 y Fj(GSS_S_NO_CONTEXT)p Fp(:)k(The)30 b(con)m(text)p 1703 5331 V 42 w(handle)g(did)g(not)g (refer)g(to)h(a)g(v)-5 b(alid)31 b(con)m(text.)p eop end %%Page: 37 41 TeXDict begin 37 40 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(37)150 299 y Fi(gss)p 316 299 37 5 v 55 w(con)m(text)p 769 299 V 53 w(time)3350 500 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_context_time)50 b Fg(\()p Ff(OM)p 1750 500 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)34 b(const)565 610 y(gss)p 688 610 V 40 w(ctx)p 851 610 V 41 w(id)p 968 610 V 40 w(t)c Fe(context_handle)12 b Ff(,)35 b(OM)p 2027 610 V 40 w(uin)m(t32)c(*)g Fe(time_rec)12 b Fg(\))390 719 y Ff(minor)p 629 719 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Implemen)m(tation)i(sp)s(eci\014c)e(status)h(co)s(de.) 390 858 y Ff(con)m(text)p 687 858 V 42 w(handle)5 b Fp(:)40 b(\(gss)p 1214 858 V 41 w(ctx)p 1378 858 V 41 w(id)p 1495 858 V 39 w(t,)31 b(read\))g(Iden)m(ti\014es)f(the)h(con)m(text)h (to)f(b)s(e)f(in)m(terrogated.)390 997 y Ff(time)p 572 997 V 41 w(rec)6 b Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))d(Num)m(b)s (er)g(of)h(seconds)f(that)i(the)f(con)m(text)i(will)e(remain)g(v)-5 b(alid.)40 b(If)390 1106 y(the)31 b(con)m(text)h(has)e(already)h (expired,)f(zero)h(will)g(b)s(e)f(returned.)390 1245 y(Determines)h(the)g(n)m(um)m(b)s(er)e(of)h(seconds)h(for)f(whic)m(h)g (the)h(sp)s(eci\014ed)e(con)m(text)j(will)f(remain)f(v)-5 b(alid.)390 1384 y(Return)30 b(v)-5 b(alue:)390 1523 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1662 y Fj(GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e (already)h(expired.)390 1801 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)p 1703 1801 V 42 w(handle)g(parameter)h (did)e(not)i(iden)m(tify)g(a)g(v)-5 b(alid)30 b(con)m(text)150 2004 y Fi(gss)p 316 2004 37 5 v 55 w(inquire)p 746 2004 V 55 w(con)m(text)3350 2205 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_context)c Fg(\()p Ff(OM)p 1907 2205 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)33 b(const)565 2315 y(gss)p 688 2315 V 40 w(ctx)p 851 2315 V 41 w(id)p 968 2315 V 40 w(t)d Fe(context_handle)12 b Ff(,)35 b(gss)p 1990 2315 V 40 w(name)p 2242 2315 V 40 w(t)c(*)f Fe(src_name)12 b Ff(,)33 b(gss)p 3026 2315 V 40 w(name)p 3278 2315 V 40 w(t)e(*)565 2425 y Fe(targ_name)12 b Ff(,)33 b(OM)p 1263 2425 V 40 w(uin)m(t32)e(*)g Fe(lifetime_rec)12 b Ff(,)34 b(gss)p 2471 2425 V 40 w(OID)c(*)h Fe(mech_type)12 b Ff(,)565 2534 y(OM)p 725 2534 V 40 w(uin)m(t32)31 b(*)g Fe(ctx_flags)12 b Ff(,)33 b(in)m(t)e(*)g Fe(locally_initiated)12 b Ff(,)35 b(in)m(t)c(*)g Fe(open)12 b Fg(\))390 2644 y Ff(minor)p 629 2644 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 2783 y Ff(con)m(text)p 687 2783 V 42 w(handle)5 b Fp(:)40 b(\(gss)p 1214 2783 V 41 w(ctx)p 1378 2783 V 41 w(id)p 1495 2783 V 39 w(t,)31 b(read\))g(A)f(handle)g(that)h(refers)f(to)h (the)g(securit)m(y)g(con)m(text.)390 2922 y Ff(src)p 508 2922 V 40 w(name)5 b Fp(:)49 b(\(gss)p 991 2922 V 40 w(name)p 1243 2922 V 40 w(t,)36 b(mo)s(dify)-8 b(,)36 b(optional\))g(The)e(name)g(of)h(the)f(con)m(text)j(initiator.)54 b(If)34 b(the)390 3031 y(con)m(text)25 b(w)m(as)e(established)g(using)f (anon)m(ymous)h(authen)m(tication,)k(and)22 b(if)g(the)h(application)i (in)m(v)m(ok-)390 3141 y(ing)h(gss)p 660 3141 V 40 w(inquire)p 976 3141 V 39 w(con)m(text)i(is)e(the)f(con)m(text)j(acceptor,)g(an)e (anon)m(ymous)f(name)h(will)g(b)s(e)f(returned.)390 3250 y(Storage)33 b(asso)s(ciated)g(with)f(this)g(name)g(m)m(ust)f(b)s(e)h (freed)f(b)m(y)h(the)g(application)h(after)f(use)g(with)g(a)390 3360 y(call)g(to)f(gss)p 791 3360 V 40 w(release)p 1093 3360 V 41 w(name\(\).)42 b(Sp)s(ecify)29 b(NULL)i(if)f(not)h(required.) 390 3499 y Ff(targ)p 557 3499 V 41 w(name)5 b Fp(:)36 b(\(gss)p 1028 3499 V 40 w(name)p 1280 3499 V 40 w(t,)24 b(mo)s(dify)-8 b(,)22 b(optional\))g(The)e(name)h(of)g(the)f(con)m (text)j(acceptor.)39 b(Storage)390 3608 y(asso)s(ciated)e(with)d(this)h (name)h(m)m(ust)f(b)s(e)f(freed)h(b)m(y)g(the)g(application)i(after)f (use)e(with)h(a)h(call)g(to)390 3718 y(gss)p 513 3718 V 40 w(release)p 815 3718 V 42 w(name\(\).)74 b(If)40 b(the)i(con)m(text)h(acceptor)g(did)d(not)h(authen)m(ticate)j(itself,)h (and)c(if)g(the)390 3828 y(initiator)33 b(did)e(not)h(sp)s(ecify)g(a)g (target)i(name)e(in)f(its)h(call)i(to)e(gss)p 2599 3828 V 40 w(init)p 2775 3828 V 41 w(sec)p 2932 3828 V 40 w(con)m(text\(\),)j (the)d(v)-5 b(alue)390 3937 y(GSS)p 569 3937 V 39 w(C)p 674 3937 V 40 w(NO)p 853 3937 V 40 w(NAME)31 b(will)f(b)s(e)g (returned.)40 b(Sp)s(ecify)29 b(NULL)i(if)f(not)h(required.)390 4076 y Ff(lifetime)p 690 4076 V 41 w(rec)6 b Fp(:)39 b(\(In)m(teger,)28 b(mo)s(dify)-8 b(,)27 b(optional\))h(The)d(n)m(um)m (b)s(er)g(of)h(seconds)g(for)g(whic)m(h)g(the)g(con)m(text)390 4186 y(will)h(remain)f(v)-5 b(alid.)40 b(If)26 b(the)h(con)m(text)i (has)d(expired,)h(this)g(parameter)g(will)g(b)s(e)f(set)h(to)g(zero.)41 b(If)26 b(the)390 4295 y(implemen)m(tation)h(do)s(es)f(not)g(supp)s (ort)e(con)m(text)k(expiration,)g(the)e(v)-5 b(alue)26 b(GSS)p 3058 4295 V 39 w(C)p 3163 4295 V 40 w(INDEFINITE)390 4405 y(will)31 b(b)s(e)e(returned.)40 b(Sp)s(ecify)30 b(NULL)g(if)g(not)h(required.)390 4544 y Ff(mec)m(h)p 600 4544 V 41 w(t)m(yp)s(e)5 b Fp(:)44 b(\(gss)p 1041 4544 V 40 w(OID,)32 b(mo)s(dify)-8 b(,)32 b(optional\))i(The)d(securit) m(y)i(mec)m(hanism)f(pro)m(viding)g(the)g(con-)390 4653 y(text.)44 b(The)31 b(returned)f(OID)h(will)h(b)s(e)e(a)i(p)s(oin)m (ter)f(to)h(static)h(storage)g(that)f(should)e(b)s(e)g(treated)j(as)390 4763 y(read-only)c(b)m(y)f(the)g(application;)j(in)c(particular)i(the)f (application)i(should)d(not)i(attempt)g(to)g(free)390 4872 y(it.)41 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)390 5011 y Ff(ctx)p 519 5011 V 41 w(\015ags)t Fp(:)56 b(\(bit-mask,)40 b(mo)s(dify)-8 b(,)40 b(optional\))f(Con)m(tains)g(v)-5 b(arious)38 b(indep)s(enden)m(t)e(\015ags,)41 b(eac)m(h)e(of)390 5121 y(whic)m(h)34 b(indicates)h(that)g(the)g(con)m(text)h(supp)s(orts) d(\(or)i(is)f(exp)s(ected)h(to)g(supp)s(ort,)f(if)g(ctx)p 3430 5121 V 41 w(op)s(en)g(is)390 5230 y(false\))41 b(a)f(sp)s (eci\014c)g(service)g(option.)70 b(If)39 b(not)h(needed,)i(sp)s(ecify)e (NULL.)g(Sym)m(b)s(olic)g(names)g(are)390 5340 y(pro)m(vided)c(for)g (eac)m(h)h(\015ag,)h(and)e(the)g(sym)m(b)s(olic)h(names)f(corresp)s (onding)f(to)i(the)f(required)g(\015ags)p eop end %%Page: 38 42 TeXDict begin 38 41 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(38)390 299 y(should)30 b(b)s(e)h(logically-ANDed)k(with)c(the)h(ret)p 1971 299 28 4 v 40 w(\015ags)g(v)-5 b(alue)32 b(to)g(test)g(whether)f(a)h(giv)m (en)g(option)g(is)390 408 y(supp)s(orted)d(b)m(y)h(the)g(con)m(text.)43 b(See)31 b(b)s(elo)m(w)f(for)g(the)h(\015ags.)390 550 y Ff(lo)s(cally)p 652 550 V 42 w(initiated)t Fp(:)36 b(\(Bo)s(olean,)25 b(mo)s(dify\))20 b(Non-zero)h(if)g(the)f(in)m(v)m (oking)i(application)g(is)e(the)h(con)m(text)390 660 y(initiator.)42 b(Sp)s(ecify)30 b(NULL)g(if)g(not)h(required.)390 801 y Ff(op)s(en)p Fp(:)37 b(\(Bo)s(olean,)27 b(mo)s(dify\))d(Non-zero) h(if)f(the)h(con)m(text)h(is)e(fully)f(established;)k(Zero)d(if)g(a)h (con)m(text-)390 911 y(establishmen)m(t)45 b(tok)m(en)h(is)e(exp)s (ected)h(from)f(the)g(p)s(eer)g(application.)84 b(Sp)s(ecify)43 b(NULL)h(if)h(not)390 1021 y(required.)390 1162 y(Obtains)26 b(information)h(ab)s(out)f(a)h(securit)m(y)h(con)m(text.)41 b(The)26 b(caller)i(m)m(ust)f(already)g(ha)m(v)m(e)h(obtained)390 1272 y(a)c(handle)f(that)i(refers)e(to)i(the)f(con)m(text,)j(although)d (the)g(con)m(text)h(need)f(not)g(b)s(e)f(fully)g(established.)390 1413 y(The)30 b Fj(ctx_flags)e Fp(v)-5 b(alues:)870 1584 y Fj(GSS_C_DELEG_FLAG)945 1722 y Fn(\017)60 b Fp(T)-8 b(rue)28 b(-)h(Creden)m(tials)g(w)m(ere)g(delegated)h(from)e(the)g (initiator)i(to)g(the)e(acceptor.)945 1860 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(No)g(creden)m(tials)g(w)m(ere)g(delegated.) 870 2026 y Fj(GSS_C_MUTUAL_FLAG)945 2164 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(The)e(acceptor)j(w)m(as)f(authen)m(ticated)h (to)f(the)g(initiator.)945 2302 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(acceptor)h(did)f(not)h(authen)m(ticate)h(itself.) 870 2469 y Fj(GSS_C_REPLAY_FLAG)945 2607 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(repla)m(y)f(of)h(protected)g(messages)h(will)e (b)s(e)g(detected.)945 2745 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(repla)m(y)m(ed)g(messages)g(will)g(not)g(b)s(e)e(detected.)870 2912 y Fj(GSS_C_SEQUENCE_FLAG)945 3050 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(out-of-sequence)g(protected)h(messages)f(will)g (b)s(e)f(detected.)945 3188 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(out-of-sequence)h(messages)f(will)g(not)f(b)s(e)g(detected.)870 3354 y Fj(GSS_C_CONF_FLAG)945 3492 y Fn(\017)60 b Fp(T)-8 b(rue)40 b(-)g(Con\014den)m(tialit)m(y)i(service)f(ma)m(y)g(b)s(e)f(in) m(v)m(ok)m(ed)i(b)m(y)e(calling)i(gss)p 3519 3492 V 40 w(wrap)1050 3602 y(routine.)945 3740 y Fn(\017)60 b Fp(F)-8 b(alse)33 b(-)e(No)h(con\014den)m(tialit)m(y)i(service)e(\(via)g(gss)p 2686 3740 V 40 w(wrap\))f(a)m(v)-5 b(ailable.)46 b(gss)p 3519 3740 V 40 w(wrap)1050 3850 y(will)38 b(pro)m(vide)f(message)i (encapsulation,)h(data-origin)f(authen)m(tication)h(and)1050 3959 y(in)m(tegrit)m(y)32 b(services)f(only)-8 b(.)870 4126 y Fj(GSS_C_INTEG_FLAG)945 4264 y Fn(\017)60 b Fp(T)-8 b(rue)27 b(-)h(In)m(tegrit)m(y)h(service)f(ma)m(y)g(b)s(e)f(in)m(v)m (ok)m(ed)i(b)m(y)e(calling)i(either)f(gss)p 3413 4264 V 40 w(get)p 3573 4264 V 42 w(mic)1050 4373 y(or)i(gss)p 1284 4373 V 41 w(wrap)f(routines.)945 4512 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(P)m(er-message)h(in)m(tegrit)m(y)g(service)f (una)m(v)-5 b(ailable.)870 4678 y Fj(GSS_C_ANON_FLAG)945 4816 y Fn(\017)60 b Fp(T)-8 b(rue)34 b(-)i(The)e(initiator's)i(iden)m (tit)m(y)h(will)e(not)g(b)s(e)f(rev)m(ealed)i(to)g(the)f(acceptor.)1050 4926 y(The)i(src)p 1362 4926 V 40 w(name)h(parameter)g(\(if)g (requested\))g(con)m(tains)h(an)e(anon)m(ymous)h(in-)1050 5035 y(ternal)31 b(name.)945 5173 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(initiator)h(has)f(b)s(een)g(authen)m(ticated)i (normally)-8 b(.)870 5340 y Fj(GSS_C_PROT_READY_FLAG)p eop end %%Page: 39 43 TeXDict begin 39 42 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(39)945 299 y Fn(\017)60 b Fp(T)-8 b(rue)66 b(-)h(Protection)h(services)f(\(as)g(sp)s(eci\014ed) f(b)m(y)h(the)f(states)i(of)f(the)1050 408 y(GSS)p 1229 408 28 4 v 39 w(C)p 1334 408 V 40 w(CONF)p 1638 408 V 40 w(FLA)m(G)33 b(and)e(GSS)p 2314 408 V 39 w(C)p 2419 408 V 40 w(INTEG)p 2759 408 V 40 w(FLA)m(G\))i(are)f(a)m(v)-5 b(ailable)34 b(for)1050 518 y(use.)945 649 y Fn(\017)60 b Fp(F)-8 b(alse)67 b(-)e(Protection)i(services)f(\(as)f(sp)s (eci\014ed)g(b)m(y)g(the)g(states)h(of)g(the)1050 759 y(GSS)p 1229 759 V 39 w(C)p 1334 759 V 40 w(CONF)p 1638 759 V 40 w(FLA)m(G)i(and)e(GSS)p 2384 759 V 39 w(C)p 2489 759 V 40 w(INTEG)p 2829 759 V 40 w(FLA)m(G\))i(are)g(a)m(v)-5 b(ailable)1050 868 y(only)32 b(if)h(the)f(con)m(text)i(is)e(fully)g (established)h(\(i.e.)47 b(if)32 b(the)h(op)s(en)e(parameter)i(is)1050 978 y(non-zero\).)870 1130 y Fj(GSS_C_TRANS_FLAG)945 1261 y Fn(\017)60 b Fp(T)-8 b(rue)39 b(-)h(The)f(resultan)m(t)h (securit)m(y)g(con)m(text)h(ma)m(y)f(b)s(e)f(transferred)f(to)j(other) 1050 1371 y(pro)s(cesses)30 b(via)h(a)g(call)h(to)f(gss)p 2069 1371 V 40 w(exp)s(ort)p 2367 1371 V 40 w(sec)p 2523 1371 V 40 w(con)m(text\(\).)945 1502 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(securit)m(y)h(con)m(text)h(is)e(not)h (transferable.)390 1654 y(Return)f(v)-5 b(alue:)390 1785 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1916 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(referenced)g(con)m (text)j(could)d(not)h(b)s(e)e(accessed.)150 2108 y Fi(gss)p 316 2108 37 5 v 55 w(wrap)p 638 2108 V 54 w(size)p 885 2108 V 54 w(limit)3350 2298 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_wrap_size_limit)c Fg(\()p Ff(OM)p 1907 2298 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)33 b(const)565 2408 y(gss)p 688 2408 V 40 w(ctx)p 851 2408 V 41 w(id)p 968 2408 V 40 w(t)d Fe(context_handle)12 b Ff(,)35 b(in)m(t)c Fe(conf_req_flag)12 b Ff(,)34 b(gss)p 2876 2408 V 40 w(qop)p 3060 2408 V 40 w(t)c Fe(qop_req)12 b Ff(,)565 2517 y(OM)p 725 2517 V 40 w(uin)m(t32)31 b Fe(req_output_size)12 b Ff(,)35 b(OM)p 2051 2517 V 40 w(uin)m(t32)c(*)g Fe(max_input_size)12 b Fg(\))390 2627 y Ff(minor)p 629 2627 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 2758 y Ff(con)m(text)p 687 2758 V 42 w(handle)5 b Fp(:)45 b(\(gss)p 1219 2758 V 40 w(ctx)p 1382 2758 V 41 w(id)p 1499 2758 V 40 w(t,)34 b(read\))e(A)h(handle)f(that)i(refers)e(to)h (the)g(securit)m(y)g(o)m(v)m(er)h(whic)m(h)390 2867 y(the)d(messages)g (will)g(b)s(e)e(sen)m(t.)390 2998 y Ff(conf)p 560 2998 V 40 w(req)p 724 2998 V 40 w(\015ag)8 b Fp(:)38 b(\(Bo)s(olean,)27 b(read\))e(Indicates)g(whether)e(gss)p 2453 2998 V 41 w(wrap)g(will)i(b)s(e)e(ask)m(ed)i(to)g(apply)f(con-)390 3108 y(\014den)m(tialit)m(y)31 b(protection)f(in)f(addition)h(to)g(in)m (tegrit)m(y)h(protection.)42 b(See)29 b(the)h(routine)f(description)390 3218 y(for)h(gss)p 652 3218 V 40 w(wrap)g(for)g(more)h(details.)390 3349 y Ff(qop)p 540 3349 V 40 w(req)r Fp(:)64 b(\(gss)p 947 3349 V 41 w(qop)p 1132 3349 V 40 w(t,)45 b(read\))e(Indicates)f (the)h(lev)m(el)g(of)g(protection)g(that)g(gss)p 3200 3349 V 40 w(wrap)e(will)i(b)s(e)390 3458 y(ask)m(ed)31 b(to)g(pro)m(vide.)41 b(See)31 b(the)f(routine)g(description)h(for)f (gss)p 2467 3458 V 40 w(wrap)g(for)g(more)g(details.)390 3589 y Ff(req)p 520 3589 V 40 w(output)p 828 3589 V 40 w(size)5 b Fp(:)64 b(\(In)m(teger,)45 b(read\))d(The)f(desired)g(maxim) m(um)h(size)g(for)f(tok)m(ens)i(emitted)f(b)m(y)390 3699 y(gss)p 513 3699 V 40 w(wrap.)390 3830 y Ff(max)p 565 3830 V 40 w(input)p 818 3830 V 39 w(size)5 b Fp(:)62 b(\(In)m(teger,)45 b(mo)s(dify\))40 b(The)g(maxim)m(um)g(input)g (message)h(size)g(that)h(ma)m(y)f(b)s(e)390 3939 y(presen)m(ted)27 b(to)i(gss)p 1026 3939 V 40 w(wrap)e(in)g(order)g(to)h(guaran)m(tee)h (that)f(the)g(emitted)h(tok)m(en)f(shall)g(b)s(e)f(no)g(larger)390 4049 y(than)j(req)p 732 4049 V 40 w(output)p 1040 4049 V 40 w(size)h(b)m(ytes.)390 4180 y(Allo)m(ws)k(an)e(application)i(to)f (determine)g(the)g(maxim)m(um)f(message)i(size)f(that,)h(if)f(presen)m (ted)f(to)390 4289 y(gss)p 513 4289 V 40 w(wrap)22 b(with)g(the)h(same) g(conf)p 1505 4289 V 40 w(req)p 1669 4289 V 40 w(\015ag)g(and)f(qop)p 2186 4289 V 40 w(req)g(parameters,)j(will)e(result)g(in)f(an)g(output) 390 4399 y(tok)m(en)31 b(con)m(taining)h(no)f(more)f(than)g(req)p 1775 4399 V 40 w(output)p 2083 4399 V 40 w(size)h(b)m(ytes.)390 4530 y(This)37 b(call)i(is)g(in)m(tended)e(for)h(use)g(b)m(y)g (applications)h(that)g(comm)m(unicate)g(o)m(v)m(er)h(proto)s(cols)e (that)390 4640 y(imp)s(ose)g(a)h(maxim)m(um)f(message)h(size.)66 b(It)38 b(enables)h(the)f(application)i(to)f(fragmen)m(t)g(messages)390 4749 y(prior)30 b(to)h(applying)f(protection.)390 4880 y(GSS-API)e(implemen)m(tations)j(are)e(recommended)g(but)f(not)i (required)e(to)i(detect)g(in)m(v)-5 b(alid)30 b(QOP)390 4990 y(v)-5 b(alues)26 b(when)g(gss)p 1013 4990 V 40 w(wrap)p 1251 4990 V 39 w(size)p 1431 4990 V 41 w(limit\(\))i(is)e (called.)40 b(This)26 b(routine)g(guaran)m(tees)h(only)g(a)f(maxim)m (um)390 5099 y(message)31 b(size,)h(not)f(the)f(a)m(v)-5 b(ailabilit)m(y)34 b(of)c(sp)s(eci\014c)g(QOP)g(v)-5 b(alues)31 b(for)f(message)h(protection.)390 5230 y(Successful)36 b(completion)j(of)e(this)g(call)h(do)s(es)f(not)g(guaran)m(tee)i(that)e (gss)p 2893 5230 V 41 w(wrap)f(will)h(b)s(e)g(able)g(to)390 5340 y(protect)f(a)f(message)g(of)g(length)g(max)p 1706 5340 V 40 w(input)p 1959 5340 V 39 w(size)h(b)m(ytes,)g(since)f(this)g (abilit)m(y)h(ma)m(y)f(dep)s(end)e(on)p eop end %%Page: 40 44 TeXDict begin 40 43 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(40)390 299 y(the)41 b(a)m(v)-5 b(ailabilit)m(y)43 b(of)e(system)g(resources)f(at)h(the)g (time)g(that)g(gss)p 2692 299 28 4 v 40 w(wrap)f(is)g(called.)73 b(Ho)m(w)m(ev)m(er,)390 408 y(if)37 b(the)h(implemen)m(tation)g(itself) g(imp)s(oses)f(an)g(upp)s(er)f(limit)i(on)f(the)g(length)h(of)f (messages)h(that)390 518 y(ma)m(y)k(b)s(e)e(pro)s(cessed)h(b)m(y)g(gss) p 1411 518 V 40 w(wrap,)i(the)f(implemen)m(tation)g(should)f(not)g (return)f(a)i(v)-5 b(alue)41 b(via)390 628 y(max)p 565 628 V 40 w(input)p 818 628 V 39 w(b)m(ytes)31 b(that)g(is)g(greater)g (than)f(this)h(length.)390 761 y(Return)f(v)-5 b(alue:)390 895 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1029 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(referenced)g(con)m (text)j(could)d(not)h(b)s(e)e(accessed.)390 1162 y Fj (GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e (expired.)390 1296 y Fj(GSS_S_BAD_QOP)p Fp(:)37 b(The)30 b(sp)s(eci\014ed)g(QOP)f(is)i(not)f(supp)s(orted)f(b)m(y)h(the)h(mec)m (hanism.)150 1494 y Fi(gss)p 316 1494 37 5 v 55 w(exp)s(ort)p 722 1494 V 55 w(sec)p 936 1494 V 54 w(con)m(text)3350 1689 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_export_sec_context)d Fg(\()p Ff(OM)p 2064 1689 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)565 1798 y(gss)p 688 1798 V 40 w(ctx)p 851 1798 V 41 w(id)p 968 1798 V 40 w(t)30 b(*)h Fe(context_handle)12 b Ff(,)35 b(gss)p 2066 1798 V 40 w(bu\013er)p 2337 1798 V 39 w(t)30 b Fe(interprocess_token)12 b Fg(\))390 1908 y Ff(minor)p 629 1908 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e (Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 2042 y Ff(con)m(text)p 687 2042 V 42 w(handle)5 b Fp(:)70 b(\(gss)p 1244 2042 V 40 w(ctx)p 1407 2042 V 41 w(id)p 1524 2042 V 40 w(t,)49 b(mo)s(dify\))c(Con)m(text)h(handle)e(iden)m (tifying)i(the)f(con)m(text)i(to)390 2151 y(transfer.)390 2285 y Ff(in)m(terpro)s(cess)p 867 2285 V 40 w(tok)m(en)p Fp(:)37 b(\(bu\013er,)22 b(opaque,)h(mo)s(dify\))d(T)-8 b(ok)m(en)21 b(to)g(b)s(e)f(transferred)f(to)i(target)h(pro)s(cess.)390 2394 y(Storage)33 b(asso)s(ciated)g(with)e(this)g(tok)m(en)i(m)m(ust)e (b)s(e)g(freed)g(b)m(y)h(the)f(application)i(after)f(use)f(with)h(a)390 2504 y(call)g(to)f(gss)p 791 2504 V 40 w(release)p 1093 2504 V 41 w(bu\013er\(\).)390 2638 y(Pro)m(vided)24 b(to)h(supp)s(ort)d (the)i(sharing)g(of)g(w)m(ork)g(b)s(et)m(w)m(een)g(m)m(ultiple)h(pro)s (cesses.)38 b(This)24 b(routine)g(will)390 2747 y(t)m(ypically)39 b(b)s(e)d(used)h(b)m(y)g(the)g(con)m(text-acceptor,)43 b(in)36 b(an)h(application)i(where)d(a)i(single)f(pro)s(cess)390 2857 y(receiv)m(es)c(incoming)e(connection)i(requests)e(and)f(accepts)j (securit)m(y)e(con)m(texts)i(o)m(v)m(er)g(them,)e(then)390 2966 y(passes)h(the)g(established)h(con)m(text)g(to)g(one)g(or)f(more)g (other)g(pro)s(cesses)g(for)g(message)h(exc)m(hange.)390 3076 y(gss)p 513 3076 V 40 w(exp)s(ort)p 811 3076 V 40 w(sec)p 967 3076 V 41 w(con)m(text\(\))i(deactiv)-5 b(ates)35 b(the)e(securit)m(y)g(con)m(text)i(for)d(the)h(calling)h(pro)s(cess)f (and)390 3186 y(creates)22 b(an)e(in)m(terpro)s(cess)g(tok)m(en)i(whic) m(h,)g(when)d(passed)h(to)h(gss)p 2536 3186 V 40 w(imp)s(ort)p 2847 3186 V 40 w(sec)p 3003 3186 V 41 w(con)m(text)h(in)e(another)390 3295 y(pro)s(cess,)27 b(will)f(re-activ)-5 b(ate)30 b(the)c(con)m(text) i(in)e(the)h(second)f(pro)s(cess.)39 b(Only)25 b(a)i(single)g(instan)m (tiation)390 3405 y(of)i(a)f(giv)m(en)i(con)m(text)g(ma)m(y)f(b)s(e)f (activ)m(e)j(at)e(an)m(y)g(one)g(time;)h(a)f(subsequen)m(t)e(attempt)j (b)m(y)e(a)h(con)m(text)390 3514 y(exp)s(orter)h(to)h(access)h(the)f (exp)s(orted)f(securit)m(y)h(con)m(text)h(will)f(fail.)390 3648 y(The)41 b(implemen)m(tation)i(ma)m(y)f(constrain)g(the)g(set)g (of)g(pro)s(cesses)f(b)m(y)h(whic)m(h)f(the)h(in)m(terpro)s(cess)390 3758 y(tok)m(en)d(ma)m(y)f(b)s(e)e(imp)s(orted,)j(either)f(as)g(a)f (function)h(of)f(lo)s(cal)i(securit)m(y)f(p)s(olicy)-8 b(,)40 b(or)e(as)f(a)h(result)390 3867 y(of)28 b(implemen)m(tation)h (decisions.)40 b(F)-8 b(or)28 b(example,)h(some)f(implemen)m(tations)h (ma)m(y)f(constrain)g(con-)390 3977 y(texts)g(to)g(b)s(e)f(passed)g (only)h(b)s(et)m(w)m(een)g(pro)s(cesses)f(that)h(run)e(under)g(the)h (same)h(accoun)m(t,)i(or)d(whic)m(h)390 4086 y(are)k(part)f(of)h(the)f (same)h(pro)s(cess)f(group.)390 4220 y(The)d(in)m(terpro)s(cess)h(tok)m (en)g(ma)m(y)h(con)m(tain)f(securit)m(y-sensitiv)m(e)i(information)e (\(for)g(example)g(cryp-)390 4330 y(tographic)e(k)m(eys\).)40 b(While)26 b(mec)m(hanisms)f(are)g(encouraged)h(to)f(either)h(a)m(v)m (oid)g(placing)g(suc)m(h)f(sensi-)390 4439 y(tiv)m(e)f(information)f (within)f(in)m(terpro)s(cess)g(tok)m(ens,)k(or)c(to)h(encrypt)f(the)h (tok)m(en)h(b)s(efore)e(returning)f(it)390 4549 y(to)31 b(the)f(application,)i(in)d(a)i(t)m(ypical)g(ob)5 b(ject-library)31 b(GSS-API)f(implemen)m(tation)h(this)f(ma)m(y)h(not)390 4658 y(b)s(e)j(p)s(ossible.)54 b(Th)m(us)34 b(the)h(application)h(m)m (ust)f(tak)m(e)h(care)g(to)g(protect)f(the)h(in)m(terpro)s(cess)f(tok)m (en,)390 4768 y(and)30 b(ensure)f(that)i(an)m(y)g(pro)s(cess)f(to)h (whic)m(h)f(the)h(tok)m(en)g(is)g(transferred)e(is)h(trust)m(w)m(orth)m (y)-8 b(.)390 4902 y(If)39 b(creation)i(of)e(the)h(in)m(terpro)s(cess)f (tok)m(en)h(is)g(successful,)h(the)f(implemen)m(tation)h(shall)e (deallo-)390 5011 y(cate)32 b(all)f(pro)s(cess-wide)e(resources)h(asso) s(ciated)i(with)e(the)g(securit)m(y)h(con)m(text,)h(and)d(set)i(the)f (con-)390 5121 y(text)p 554 5121 V 41 w(handle)37 b(to)h(GSS)p 1186 5121 V 39 w(C)p 1291 5121 V 40 w(NO)p 1470 5121 V 40 w(CONTEXT.)e(In)h(the)g(ev)m(en)m(t)i(of)f(an)f(error)g(that)h (mak)m(es)g(it)g(im-)390 5230 y(p)s(ossible)27 b(to)i(complete)g(the)f (exp)s(ort)f(of)h(the)g(securit)m(y)h(con)m(text,)h(the)e(implemen)m (tation)h(m)m(ust)f(not)390 5340 y(return)22 b(an)g(in)m(terpro)s(cess) h(tok)m(en,)j(and)c(should)g(striv)m(e)i(to)f(lea)m(v)m(e)j(the)d (securit)m(y)g(con)m(text)i(referenced)p eop end %%Page: 41 45 TeXDict begin 41 44 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(41)390 299 y(b)m(y)37 b(the)g(con)m(text)p 983 299 28 4 v 42 w(handle)g(parameter)g(un)m (touc)m(hed.)61 b(If)37 b(this)g(is)g(imp)s(ossible,)h(it)g(is)f(p)s (ermissible)390 408 y(for)32 b(the)g(implemen)m(tation)h(to)f(delete)i (the)e(securit)m(y)g(con)m(text,)i(pro)m(viding)e(it)g(also)h(sets)f (the)g(con-)390 518 y(text)p 554 518 V 41 w(handle)e(parameter)h(to)g (GSS)p 1607 518 V 39 w(C)p 1712 518 V 40 w(NO)p 1891 518 V 40 w(CONTEXT.)390 651 y(Return)f(v)-5 b(alue:)390 783 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 915 y Fj(GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e (expired.)390 1048 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)i(w)m(as)f(in)m(v)-5 b(alid.)390 1180 y Fj(GSS_S_UNAVAILABLE)p Fp(:)36 b(The)30 b(op)s(eration)h(is)f(not)h (supp)s(orted.)150 1376 y Fi(gss)p 316 1376 37 5 v 55 w(imp)s(ort)p 737 1376 V 55 w(sec)p 951 1376 V 54 w(con)m(text)3350 1568 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_import_sec_context)d Fg(\()p Ff(OM)p 2064 1568 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)565 1678 y(const)31 b(gss)p 926 1678 V 40 w(bu\013er)p 1197 1678 V 39 w(t)g Fe(interprocess_token)12 b Ff(,)35 b(gss)p 2427 1678 V 41 w(ctx)p 2591 1678 V 40 w(id)p 2707 1678 V 40 w(t)c(*)g Fe(context_handle)12 b Fg(\))390 1787 y Ff(minor)p 629 1787 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 1920 y Ff(in)m(terpro)s(cess)p 867 1920 V 40 w(tok)m(en)p Fp(:)42 b(\(bu\013er,)30 b(opaque,)h(mo)s(dify\))f(T)-8 b(ok)m(en)31 b(receiv)m(ed)h(from)e(exp)s(orting)g(pro)s(cess)390 2052 y Ff(con)m(text)p 687 2052 V 42 w(handle)5 b Fp(:)40 b(\(gss)p 1214 2052 V 41 w(ctx)p 1378 2052 V 41 w(id)p 1495 2052 V 39 w(t,)31 b(mo)s(dify\))f(Con)m(text)h(handle)f(of)h (newly)f(reactiv)-5 b(ated)32 b(con)m(text.)390 2162 y(Resources)39 b(asso)s(ciated)h(with)e(this)g(con)m(text)j(handle)d(m) m(ust)g(b)s(e)g(released)h(b)m(y)g(the)g(application)390 2272 y(after)31 b(use)f(with)g(a)h(call)g(to)h(gss)p 1446 2272 V 40 w(delete)p 1717 2272 V 41 w(sec)p 1874 2272 V 41 w(con)m(text\(\).)390 2404 y(Allo)m(ws)27 b(a)f(pro)s(cess)f (to)h(imp)s(ort)f(a)h(securit)m(y)g(con)m(text)i(established)d(b)m(y)h (another)g(pro)s(cess.)38 b(A)26 b(giv)m(en)390 2514 y(in)m(terpro)s(cess)31 b(tok)m(en)g(ma)m(y)g(b)s(e)f(imp)s(orted)f (only)i(once.)41 b(See)31 b(gss)p 2578 2514 V 40 w(exp)s(ort)p 2876 2514 V 40 w(sec)p 3032 2514 V 41 w(con)m(text.)390 2646 y(Return)f(v)-5 b(alue:)390 2778 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2911 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(tok)m(en)i(did)d(not)i(con)m(tain)h(a)e(v)-5 b(alid)31 b(con)m(text)h(reference.)390 3043 y Fj (GSS_S_DEFECTIVE_TOKEN)p Fp(:)j(The)30 b(tok)m(en)h(w)m(as)g(in)m(v)-5 b(alid.)390 3176 y Fj(GSS_S_UNAVAILABLE)p Fp(:)36 b(The)30 b(op)s(eration)h(is)f(una)m(v)-5 b(ailable.)390 3308 y Fj(GSS_S_UNAUTHORIZED)p Fp(:)32 b(Lo)s(cal)25 b(p)s(olicy)f(prev)m (en)m(ts)g(the)g(imp)s(ort)f(of)h(this)f(con)m(text)j(b)m(y)d(the)h (curren)m(t)390 3418 y(pro)s(cess.)150 3646 y Fo(3.7)68 b(P)l(er-Message)46 b(Routines)293 3806 y Fj(GSS-API)g(Per-message)f (Routines)293 4025 y(Routine)1191 b(Function)293 4134 y(-------)g(--------)293 4244 y(gss_get_mic)999 b(Calculate)46 b(a)h(cryptographic)d(message)1820 4354 y(integrity)i(code)g(\(MIC\))h (for)g(a)1820 4463 y(message;)f(integrity)f(service.)293 4573 y(gss_verify_mic)855 b(Check)47 b(a)g(MIC)g(against)f(a)h (message;)1820 4682 y(verify)g(integrity)e(of)i(a)g(received)1820 4792 y(message.)293 4902 y(gss_wrap)1143 b(Attach)47 b(a)g(MIC)g(to)g(a)h(message,)d(and)1820 5011 y(optionally)g(encrypt)h (the)h(message)1820 5121 y(content.)1820 5230 y(confidentiality)d (service)293 5340 y(gss_unwrap)1047 b(Verify)47 b(a)g(message)f(with)g (attached)p eop end %%Page: 42 46 TeXDict begin 42 45 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(42)1820 299 y Fj(MIC,)47 b(and)g(decrypt)f(message)g(content)1820 408 y(if)i(necessary.)150 610 y Fi(gss)p 316 610 37 5 v 55 w(get)p 536 610 V 54 w(mic)3350 809 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_get_mic)49 b Fg(\()p Ff(OM)p 1489 809 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)12 b Ff(,)34 b(const)565 918 y(gss)p 688 918 V 40 w(ctx)p 851 918 V 41 w(id)p 968 918 V 40 w(t)c Fe(context_handle)12 b Ff(,)35 b(gss)p 1990 918 V 40 w(qop)p 2174 918 V 40 w(t)c Fe(qop_req)12 b Ff(,)32 b(const)f(gss)p 3068 918 V 40 w(bu\013er)p 3339 918 V 39 w(t)565 1028 y Fe(message_buffer)12 b Ff(,)34 b(gss)p 1487 1028 V 41 w(bu\013er)p 1759 1028 V 39 w(t)c Fe(message_token)12 b Fg(\))390 1137 y Ff(minor)p 629 1137 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m (hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 1274 y Ff(con)m(text)p 687 1274 V 42 w(handle)5 b Fp(:)40 b(\(gss)p 1214 1274 V 40 w(ctx)p 1377 1274 V 41 w(id)p 1494 1274 V 40 w(t,)30 b(read\))f(Iden)m(ti\014es)h(the)f(con)m(text)i (on)f(whic)m(h)f(the)g(message)i(will)390 1384 y(b)s(e)f(sen)m(t.)390 1520 y Ff(qop)p 540 1520 V 40 w(req)r Fp(:)101 b(\(gss)p 984 1520 V 41 w(qop)p 1169 1520 V 40 w(t,)69 b(read,)f(optional\))62 b(Sp)s(eci\014es)e(requested)h(qualit)m(y)h(of)e(protection.)390 1630 y(Callers)50 b(are)g(encouraged,)55 b(on)50 b(p)s(ortabilit)m(y)g (grounds,)k(to)c(accept)h(the)f(default)g(qualit)m(y)h(of)390 1739 y(protection)37 b(o\013ered)e(b)m(y)h(the)f(c)m(hosen)h(mec)m (hanism,)h(whic)m(h)f(ma)m(y)g(b)s(e)e(requested)i(b)m(y)f(sp)s (ecifying)390 1849 y(GSS)p 569 1849 V 39 w(C)p 674 1849 V 40 w(QOP)p 918 1849 V 39 w(DEF)-10 b(A)m(UL)i(T)36 b(for)f(this)f(parameter.)54 b(If)35 b(an)f(unsupp)s(orted)e (protection)k(strength)390 1959 y(is)30 b(requested,)h(gss)p 1037 1959 V 40 w(get)p 1197 1959 V 41 w(mic)g(will)g(return)e(a)i(ma)5 b(jor)p 2171 1959 V 40 w(status)31 b(of)f(GSS)p 2756 1959 V 40 w(S)p 2847 1959 V 39 w(BAD)p 3087 1959 V 41 w(QOP)-8 b(.)390 2095 y Ff(message)p 714 2095 V 41 w(bu\013er)7 b Fp(:)39 b(\(bu\013er,)30 b(opaque,)h(read\))g(Message)h(to)f(b)s(e)f (protected.)390 2232 y Ff(message)p 714 2232 V 41 w(tok)m(en)p Fp(:)96 b(\(bu\013er,)64 b(opaque,)h(mo)s(dify\))57 b(Bu\013er)h(to)g (receiv)m(e)h(tok)m(en.)124 b(The)57 b(appli-)390 2341 y(cation)62 b(m)m(ust)f(free)f(storage)j(asso)s(ciated)f(with)e(this)h (bu\013er)e(after)i(use)g(with)f(a)h(call)h(to)390 2451 y(gss)p 513 2451 V 40 w(release)p 815 2451 V 42 w(bu\013er\(\).)390 2588 y(Generates)37 b(a)f(cryptographic)h(MIC)e(for)h(the)g(supplied)f (message,)j(and)e(places)g(the)g(MIC)g(in)g(a)390 2697 y(tok)m(en)k(for)e(transfer)h(to)g(the)g(p)s(eer)f(application.)68 b(The)38 b(qop)p 2507 2697 V 40 w(req)h(parameter)g(allo)m(ws)h(a)f(c)m (hoice)390 2807 y(b)s(et)m(w)m(een)31 b(sev)m(eral)h(cryptographic)f (algorithms,)g(if)f(supp)s(orted)f(b)m(y)h(the)h(c)m(hosen)g(mec)m (hanism.)390 2943 y(Since)e(some)g(application-lev)m(el)k(proto)s(cols) d(ma)m(y)f(wish)g(to)g(use)g(tok)m(ens)h(emitted)g(b)m(y)f(gss)p 3448 2943 V 40 w(wrap\(\))390 3053 y(to)h(pro)m(vide)f Fj(")p Fp(secure)f(framing)p Fj(")p Fp(,)h(implemen)m(tations)i(m)m (ust)d(supp)s(ort)f(deriv)-5 b(ation)30 b(of)f(MICs)f(from)390 3162 y(zero-length)k(messages.)390 3299 y(Return)e(v)-5 b(alue:)390 3436 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 3572 y Fj(GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e(already)h(expired.)390 3709 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)p 1703 3709 V 42 w(handle)g(parameter)h(did)e(not)i(iden)m(tify)g(a)g(v) -5 b(alid)30 b(con)m(text.)390 3845 y Fj(GSS_S_BAD_QOP)p Fp(:)37 b(The)30 b(sp)s(eci\014ed)g(QOP)f(is)i(not)f(supp)s(orted)f(b)m (y)h(the)h(mec)m(hanism.)150 4047 y Fi(gss)p 316 4047 37 5 v 55 w(v)m(erify)p 675 4047 V 54 w(mic)3350 4246 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_verify_mic)50 b Fg(\()p Ff(OM)p 1646 4246 28 4 v 40 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)34 b(const)565 4355 y(gss)p 688 4355 V 40 w(ctx)p 851 4355 V 41 w(id)p 968 4355 V 40 w(t)c Fe(context_handle)12 b Ff(,)35 b(const)c(gss)p 2228 4355 V 40 w(bu\013er)p 2499 4355 V 39 w(t)g Fe(message_buffer)12 b Ff(,)34 b(const)565 4465 y(gss)p 688 4465 V 40 w(bu\013er)p 959 4465 V 39 w(t)d Fe(token_buffer)12 b Ff(,)34 b(gss)p 1876 4465 V 40 w(qop)p 2060 4465 V 40 w(t)c(*)h Fe(qop_state)12 b Fg(\))390 4574 y Ff(minor)p 629 4574 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 4711 y Ff(con)m(text)p 687 4711 V 42 w(handle)5 b Fp(:)44 b(\(gss)p 1218 4711 V 40 w(ctx)p 1381 4711 V 41 w(id)p 1498 4711 V 40 w(t,)33 b(read\))f(Iden)m(ti\014es)h(the)f(con)m(text)i(on)e(whic)m(h)g(the)g (message)i(ar-)390 4821 y(riv)m(ed.)390 4957 y Ff(message)p 714 4957 V 41 w(bu\013er)7 b Fp(:)39 b(\(bu\013er,)30 b(opaque,)h(read\))g(Message)h(to)f(b)s(e)f(v)m(eri\014ed.)390 5094 y Ff(tok)m(en)p 612 5094 V 41 w(bu\013er)7 b Fp(:)39 b(\(bu\013er,)30 b(opaque,)h(read\))g(T)-8 b(ok)m(en)31 b(asso)s(ciated)h(with)e(message.)390 5230 y Ff(qop)p 540 5230 V 40 w(state)5 b Fp(:)39 b(\(gss)p 992 5230 V 40 w(qop)p 1176 5230 V 40 w(t,)26 b(mo)s(dify)-8 b(,)24 b(optional\))h(Qualit)m(y)g(of)e(protection)i(gained)f(from)f(MIC)g(Sp) s(ec-)390 5340 y(ify)30 b(NULL)h(if)f(not)h(required.)p eop end %%Page: 43 47 TeXDict begin 43 46 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(43)390 299 y(V)-8 b(eri\014es)39 b(that)f(a)h(cryptographic)f(MIC,)g(con)m(tained)i(in)e(the)g(tok)m(en) h(parameter,)i(\014ts)d(the)g(sup-)390 408 y(plied)30 b(message.)41 b(The)30 b(qop)p 1333 408 28 4 v 40 w(state)h(parameter)f (allo)m(ws)i(a)e(message)h(recipien)m(t)g(to)g(determine)f(the)390 518 y(strength)g(of)h(protection)g(that)g(w)m(as)g(applied)f(to)h(the)g (message.)390 650 y(Since)e(some)g(application-lev)m(el)k(proto)s(cols) d(ma)m(y)f(wish)g(to)g(use)g(tok)m(ens)h(emitted)g(b)m(y)f(gss)p 3448 650 V 40 w(wrap\(\))390 760 y(to)i(pro)m(vide)g Fj(")p Fp(secure)g(framing)p Fj(")p Fp(,)f(implemen)m(tations)j(m)m (ust)d(supp)s(ort)f(the)i(calculation)i(and)d(v)m(er-)390 869 y(i\014cation)h(of)g(MICs)f(o)m(v)m(er)i(zero-length)g(messages.) 390 1001 y(Return)e(v)-5 b(alue:)390 1133 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1265 y Fj (GSS_S_DEFECTIVE_TOKEN)p Fp(:)35 b(The)30 b(tok)m(en)h(failed)g (consistency)g(c)m(hec)m(ks.)390 1397 y Fj(GSS_S_BAD_SIG)p Fp(:)37 b(The)30 b(MIC)g(w)m(as)h(incorrect.)390 1529 y Fj(GSS_S_DUPLICATE_TOKEN)p Fp(:)k(The)29 b(tok)m(en)i(w)m(as)f(v)-5 b(alid,)30 b(and)f(con)m(tained)i(a)f(correct)h(MIC)e(for)h(the)390 1639 y(message,)i(but)d(it)i(had)f(already)h(b)s(een)f(pro)s(cessed.) 390 1771 y Fj(GSS_S_OLD_TOKEN)p Fp(:)i(The)22 b(tok)m(en)h(w)m(as)f(v) -5 b(alid,)24 b(and)e(con)m(tained)h(a)f(correct)h(MIC)f(for)f(the)i (message,)390 1880 y(but)30 b(it)h(is)f(to)s(o)h(old)g(to)g(c)m(hec)m (k)h(for)e(duplication.)390 2012 y Fj(GSS_S_UNSEQ_TOKEN)p Fp(:)66 b(The)45 b(tok)m(en)h(w)m(as)g(v)-5 b(alid,)50 b(and)45 b(con)m(tained)h(a)g(correct)g(MIC)g(for)f(the)390 2122 y(message,)25 b(but)20 b(has)h(b)s(een)g(v)m(eri\014ed)h(out)f(of) h(sequence;)j(a)d(later)g(tok)m(en)g(has)g(already)g(b)s(een)e(receiv)m (ed.)390 2254 y Fj(GSS_S_GAP_TOKEN)p Fp(:)32 b(The)22 b(tok)m(en)h(w)m(as)f(v)-5 b(alid,)24 b(and)e(con)m(tained)h(a)f (correct)h(MIC)f(for)f(the)i(message,)390 2364 y(but)39 b(has)h(b)s(een)g(v)m(eri\014ed)g(out)g(of)g(sequence;)46 b(an)40 b(earlier)h(exp)s(ected)f(tok)m(en)h(has)f(not)g(y)m(et)i(b)s (een)390 2473 y(receiv)m(ed.)390 2605 y Fj(GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e(already)h(expired.)390 2737 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)p 1703 2737 V 42 w(handle)g(parameter)h(did)e(not)i(iden)m(tify)g(a)g(v) -5 b(alid)30 b(con)m(text.)150 2932 y Fi(gss)p 316 2932 37 5 v 55 w(wrap)3350 3123 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_wrap)48 b Fg(\()p Ff(OM)p 1332 3123 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)12 b Ff(,)34 b(const)d(gss)p 2778 3123 V 40 w(ctx)p 2941 3123 V 41 w(id)p 3058 3123 V 40 w(t)565 3233 y Fe(context_handle)12 b Ff(,)34 b(in)m(t)d Fe(conf_req_flag)12 b Ff(,)34 b(gss)p 2373 3233 V 41 w(qop)p 2558 3233 V 39 w(t)d Fe(qop_req)12 b Ff(,)32 b(const)565 3342 y(gss)p 688 3342 V 40 w(bu\013er)p 959 3342 V 39 w(t)f Fe(input_message_buffer)12 b Ff(,)36 b(in)m(t)31 b(*)g Fe(conf_state)12 b Ff(,)33 b(gss)p 3099 3342 V 40 w(bu\013er)p 3370 3342 V 39 w(t)565 3452 y Fe(output_message_buffer)12 b Fg(\))390 3562 y Ff(minor)p 629 3562 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e (Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 3694 y Ff(con)m(text)p 687 3694 V 42 w(handle)5 b Fp(:)40 b(\(gss)p 1214 3694 V 40 w(ctx)p 1377 3694 V 41 w(id)p 1494 3694 V 40 w(t,)30 b(read\))f(Iden)m(ti\014es)h(the)f(con)m(text)i (on)f(whic)m(h)f(the)g(message)i(will)390 3803 y(b)s(e)f(sen)m(t.)390 3935 y Ff(conf)p 560 3935 V 40 w(req)p 724 3935 V 40 w(\015ag)8 b Fp(:)47 b(\(b)s(o)s(olean,)34 b(read\))g(Non-zero)g(-)f (Both)h(con\014den)m(tialit)m(y)h(and)e(in)m(tegrit)m(y)i(services)390 4045 y(are)c(requested.)40 b(Zero)31 b(-)f(Only)g(in)m(tegrit)m(y)j (service)e(is)f(requested.)390 4177 y Ff(qop)p 540 4177 V 40 w(req)r Fp(:)144 b(\(gss)p 1027 4177 V 40 w(qop)p 1211 4177 V 40 w(t,)96 b(read,)f(optional\))83 b(Sp)s(eci\014es)f (required)f(qualit)m(y)i(of)f(protec-)390 4286 y(tion.)136 b(A)62 b(mec)m(hanism-sp)s(eci\014c)g(default)g(ma)m(y)h(b)s(e)e (requested)h(b)m(y)f(setting)i(qop)p 3449 4286 V 40 w(req)f(to)390 4396 y(GSS)p 569 4396 V 39 w(C)p 674 4396 V 40 w(QOP)p 918 4396 V 39 w(DEF)-10 b(A)m(UL)i(T.)72 b(If)e(an)h(unsupp)s(orted)c (protection)72 b(strength)e(is)h(requested,)390 4506 y(gss)p 513 4506 V 40 w(wrap)30 b(will)g(return)g(a)g(ma)5 b(jor)p 1541 4506 V 41 w(status)30 b(of)h(GSS)p 2127 4506 V 39 w(S)p 2217 4506 V 40 w(BAD)p 2458 4506 V 41 w(QOP)-8 b(.)390 4638 y Ff(input)p 609 4638 V 39 w(message)p 966 4638 V 41 w(bu\013er)7 b Fp(:)40 b(\(bu\013er,)30 b(opaque,)g(read\))h(Message)h(to)f(b)s(e)f(protected.)390 4770 y Ff(conf)p 560 4770 V 40 w(state)5 b Fp(:)62 b(\(b)s(o)s(olean,) 44 b(mo)s(dify)-8 b(,)42 b(optional\))g(Non-zero)g(-)e(Con\014den)m (tialit)m(y)-8 b(,)45 b(data)c(origin)g(au-)390 4879 y(then)m(tication)28 b(and)d(in)m(tegrit)m(y)i(services)g(ha)m(v)m(e)g (b)s(een)e(applied.)38 b(Zero)26 b(-)g(In)m(tegrit)m(y)h(and)e(data)h (origin)390 4989 y(services)31 b(only)g(has)f(b)s(een)f(applied.)41 b(Sp)s(ecify)30 b(NULL)g(if)g(not)h(required.)390 5121 y Ff(output)p 664 5121 V 40 w(message)p 1022 5121 V 41 w(bu\013er)7 b Fp(:)36 b(\(bu\013er,)26 b(opaque,)g(mo)s(dify\))f (Bu\013er)f(to)i(receiv)m(e)h(protected)f(message.)390 5230 y(Storage)31 b(asso)s(ciated)g(with)e(this)g(message)i(m)m(ust)f (b)s(e)f(freed)g(b)m(y)g(the)h(application)h(after)f(use)f(with)390 5340 y(a)i(call)g(to)h(gss)p 867 5340 V 40 w(release)p 1169 5340 V 41 w(bu\013er\(\).)p eop end %%Page: 44 48 TeXDict begin 44 47 bop 150 -116 a Fp(Chapter)30 b(3:)h(Standard)e(GSS) h(API)2294 b(44)390 299 y(A)m(ttac)m(hes)36 b(a)d(cryptographic)h(MIC)f (and)g(optionally)i(encrypts)d(the)i(sp)s(eci\014ed)e(input)p 3372 299 28 4 v 40 w(message.)390 408 y(The)23 b(output)p 844 408 V 40 w(message)h(con)m(tains)h(b)s(oth)d(the)i(MIC)f(and)g(the) h(message.)39 b(The)23 b(qop)p 3164 408 V 40 w(req)g(parameter)390 518 y(allo)m(ws)30 b(a)g(c)m(hoice)g(b)s(et)m(w)m(een)g(sev)m(eral)g (cryptographic)g(algorithms,)g(if)f(supp)s(orted)e(b)m(y)i(the)g(c)m (hosen)390 628 y(mec)m(hanism.)390 759 y(Since)g(some)g (application-lev)m(el)k(proto)s(cols)d(ma)m(y)f(wish)g(to)g(use)g(tok)m (ens)h(emitted)g(b)m(y)f(gss)p 3448 759 V 40 w(wrap\(\))390 868 y(to)41 b(pro)m(vide)e Fj(")p Fp(secure)h(framing)p Fj(")p Fp(,)i(implemen)m(tations)f(m)m(ust)f(supp)s(ort)e(the)i (wrapping)f(of)h(zero-)390 978 y(length)31 b(messages.)390 1109 y(Return)f(v)-5 b(alue:)390 1240 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1371 y Fj (GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e(already) h(expired.)390 1502 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)p 1703 1502 V 42 w(handle)g(parameter)h(did)e(not)i(iden)m (tify)g(a)g(v)-5 b(alid)30 b(con)m(text.)390 1633 y Fj(GSS_S_BAD_QOP)p Fp(:)37 b(The)30 b(sp)s(eci\014ed)g(QOP)f(is)i(not)f(supp)s(orted)f(b)m (y)h(the)h(mec)m(hanism.)150 1825 y Fi(gss)p 316 1825 37 5 v 55 w(un)m(wrap)3350 2015 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_unwrap)49 b Fg(\()p Ff(OM)p 1437 2015 28 4 v 40 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)34 b(const)565 2124 y(gss)p 688 2124 V 40 w(ctx)p 851 2124 V 41 w(id)p 968 2124 V 40 w(t)c Fe(context_handle)12 b Ff(,)35 b(const)c(gss)p 2228 2124 V 40 w(bu\013er)p 2499 2124 V 39 w(t)g Fe(input_message_buffer)12 b Ff(,)565 2234 y(gss)p 688 2234 V 40 w(bu\013er)p 959 2234 V 39 w(t)31 b Fe(output_message_buffer)12 b Ff(,)36 b(in)m(t)31 b(*)g Fe(conf_state)12 b Ff(,)33 b(gss)p 3151 2234 V 40 w(qop)p 3335 2234 V 40 w(t)e(*)565 2343 y Fe(qop_state)12 b Fg(\))390 2453 y Ff(minor)p 629 2453 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 2584 y Ff(con)m(text)p 687 2584 V 42 w(handle)5 b Fp(:)44 b(\(gss)p 1218 2584 V 40 w(ctx)p 1381 2584 V 41 w(id)p 1498 2584 V 40 w(t,)33 b(read\))f(Iden)m(ti\014es)h(the)f(con)m(text)i(on)e(whic)m(h)g(the)g (message)i(ar-)390 2694 y(riv)m(ed.)390 2825 y Ff(input)p 609 2825 V 39 w(message)p 966 2825 V 41 w(bu\013er)7 b Fp(:)40 b(\(bu\013er,)30 b(opaque,)g(read\))h(Protected)h(message.) 390 2956 y Ff(output)p 664 2956 V 40 w(message)p 1022 2956 V 41 w(bu\013er)7 b Fp(:)51 b(\(bu\013er,)38 b(opaque,)g(mo)s (dify\))e(Bu\013er)g(to)h(receiv)m(e)i(un)m(wrapp)s(ed)34 b(mes-)390 3065 y(sage.)52 b(Storage)35 b(asso)s(ciated)h(with)d(this)h (bu\013er)f(m)m(ust)h(b)s(e)f(freed)h(b)m(y)f(the)i(application)g (after)f(use)390 3175 y(use)c(with)g(a)h(call)h(to)f(gss)p 1231 3175 V 40 w(release)p 1533 3175 V 41 w(bu\013er\(\).)390 3306 y Ff(conf)p 560 3306 V 40 w(state)5 b Fp(:)44 b(\(b)s(o)s(olean,) 33 b(mo)s(dify)-8 b(,)31 b(optional\))i(Non-zero)g(-)e(Con\014den)m (tialit)m(y)i(and)e(in)m(tegrit)m(y)i(pro-)390 3415 y(tection)46 b(w)m(ere)f(used.)82 b(Zero)44 b(-)h(In)m(tegrit)m(y)h(service)f(only)g (w)m(as)f(used.)82 b(Sp)s(ecify)44 b(NULL)g(if)h(not)390 3525 y(required.)390 3656 y Ff(qop)p 540 3656 V 40 w(state)5 b Fp(:)72 b(\(gss)p 1025 3656 V 41 w(qop)p 1210 3656 V 40 w(t,)49 b(mo)s(dify)-8 b(,)49 b(optional\))e(Qualit)m(y)f(of)g (protection)g(pro)m(vided.)86 b(Sp)s(ecify)390 3766 y(NULL)30 b(if)h(not)f(required.)390 3897 y(Con)m(v)m(erts)c(a)g(message)g (previously)f(protected)i(b)m(y)e(gss)p 2256 3897 V 40 w(wrap)g(bac)m(k)h(to)g(a)g(usable)f(form,)h(v)m(erifying)390 4006 y(the)42 b(em)m(b)s(edded)e(MIC.)h(The)g(conf)p 1614 4006 V 40 w(state)i(parameter)f(indicates)g(whether)f(the)g (message)i(w)m(as)390 4116 y(encrypted;)50 b(the)44 b(qop)p 1177 4116 V 40 w(state)h(parameter)f(indicates)h(the)f(strength)f(of)h (protection)h(that)g(w)m(as)390 4225 y(used)30 b(to)h(pro)m(vide)f(the) h(con\014den)m(tialit)m(y)h(and)e(in)m(tegrit)m(y)i(services.)390 4356 y(Since)d(some)g(application-lev)m(el)k(proto)s(cols)d(ma)m(y)f (wish)g(to)g(use)g(tok)m(ens)h(emitted)g(b)m(y)f(gss)p 3448 4356 V 40 w(wrap\(\))390 4466 y(to)39 b(pro)m(vide)g Fj(")p Fp(secure)g(framing)p Fj(")p Fp(,)h(implemen)m(tations)g(m)m (ust)f(supp)s(ort)d(the)j(wrapping)f(and)g(un-)390 4575 y(wrapping)29 b(of)i(zero-length)h(messages.)390 4706 y(Return)e(v)-5 b(alue:)390 4837 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 4968 y Fj (GSS_S_DEFECTIVE_TOKEN)p Fp(:)35 b(The)30 b(tok)m(en)h(failed)g (consistency)g(c)m(hec)m(ks.)390 5099 y Fj(GSS_S_BAD_SIG)p Fp(:)37 b(The)30 b(MIC)g(w)m(as)h(incorrect.)390 5230 y Fj(GSS_S_DUPLICATE_TOKEN)p Fp(:)k(The)29 b(tok)m(en)i(w)m(as)f(v)-5 b(alid,)30 b(and)f(con)m(tained)i(a)f(correct)h(MIC)e(for)h(the)390 5340 y(message,)i(but)d(it)i(had)f(already)h(b)s(een)f(pro)s(cessed.)p eop end %%Page: 45 49 TeXDict begin 45 48 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(45)390 299 y Fj(GSS_S_OLD_TOKEN)p Fp(:)32 b(The)22 b(tok)m(en)h(w)m(as)f(v)-5 b(alid,)24 b(and)e(con)m(tained)h(a)f(correct)h(MIC)f(for)f(the)i(message,)390 408 y(but)30 b(it)h(is)f(to)s(o)h(old)g(to)g(c)m(hec)m(k)h(for)e (duplication.)390 556 y Fj(GSS_S_UNSEQ_TOKEN)p Fp(:)66 b(The)45 b(tok)m(en)h(w)m(as)g(v)-5 b(alid,)50 b(and)45 b(con)m(tained)h(a)g(correct)g(MIC)g(for)f(the)390 665 y(message,)25 b(but)20 b(has)h(b)s(een)g(v)m(eri\014ed)h(out)f(of)h (sequence;)j(a)d(later)g(tok)m(en)g(has)g(already)g(b)s(een)e(receiv)m (ed.)390 813 y Fj(GSS_S_GAP_TOKEN)p Fp(:)32 b(The)22 b(tok)m(en)h(w)m(as)f(v)-5 b(alid,)24 b(and)e(con)m(tained)h(a)f (correct)h(MIC)f(for)f(the)i(message,)390 922 y(but)39 b(has)h(b)s(een)g(v)m(eri\014ed)g(out)g(of)g(sequence;)46 b(an)40 b(earlier)h(exp)s(ected)f(tok)m(en)h(has)f(not)g(y)m(et)i(b)s (een)390 1032 y(receiv)m(ed.)390 1179 y Fj(GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e(already)h(expired.)390 1326 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)p 1703 1326 28 4 v 42 w(handle)g(parameter)h(did)e(not)i(iden)m(tify)g(a) g(v)-5 b(alid)30 b(con)m(text.)150 1578 y Fo(3.8)68 b(Name)46 b(Manipulation)293 1737 y Fj(GSS-API)g(Name)h(manipulation)d(Routines) 293 1956 y(Routine)1191 b(Function)293 2066 y(-------)g(--------)293 2175 y(gss_import_name)807 b(Convert)46 b(a)i(contiguous)d(string)h (name)1820 2285 y(to)i(internal-form.)293 2395 y(gss_display_name)759 b(Convert)46 b(internal-form)e(name)j(to)1820 2504 y(text.)293 2614 y(gss_compare_name)759 b(Compare)46 b(two)h(internal-form)d (names.)293 2723 y(gss_release_name)759 b(Discard)46 b(an)h(internal-form)e(name.)293 2833 y(gss_inquire_names_for_mec)o(h) 280 b(List)47 b(the)g(name-types)e(supported)g(by.)1820 2943 y(the)i(specified)f(mechanism.)293 3052 y (gss_inquire_mechs_for_nam)o(e)280 b(List)47 b(mechanisms)e(that)i (support)f(the)1820 3162 y(specified)g(name-type.)293 3271 y(gss_canonicalize_name)519 b(Convert)46 b(an)h(internal)f(name)h (to)g(an)g(MN.)293 3381 y(gss_export_name)807 b(Convert)46 b(an)h(MN)h(to)f(export)f(form.)293 3491 y(gss_duplicate_name)663 b(Create)47 b(a)g(copy)g(of)g(an)g(internal)f(name.)150 3703 y Fi(gss)p 316 3703 37 5 v 55 w(imp)s(ort)p 737 3703 V 55 w(name)3350 3912 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_import_name)50 b Fg(\()p Ff(OM)p 1698 3912 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)12 b Ff(,)34 b(const)565 4022 y(gss)p 688 4022 V 40 w(bu\013er)p 959 4022 V 39 w(t)d Fe(input_name_buffer)12 b Ff(,)35 b(const)c(gss)p 2375 4022 V 40 w(OID)g Fe(input_name_type)12 b Ff(,)565 4131 y(gss)p 688 4131 V 40 w(name)p 940 4131 V 40 w(t)31 b(*)g Fe(output_name)12 b Fg(\))390 4241 y Ff(minor)p 629 4241 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 4388 y Ff(input)p 609 4388 V 39 w(name)p 860 4388 V 40 w(bu\013er)7 b Fp(:)59 b(\(bu\013er,)43 b(o)s(ctet-string,)i(read\))40 b(Bu\013er)h(con)m(taining)g(con)m(tiguous)h(string)390 4498 y(name)30 b(to)i(con)m(v)m(ert.)390 4645 y Ff(input)p 609 4645 V 39 w(name)p 860 4645 V 40 w(t)m(yp)s(e)5 b Fp(:)40 b(\(Ob)5 b(ject)29 b(ID,)g(read,)g(optional\))h(Ob)5 b(ject)28 b(ID)h(sp)s(ecifying)f(t)m(yp)s(e)g(of)h(prin)m(table)390 4754 y(name.)41 b(Applications)31 b(ma)m(y)g(sp)s(ecify)f(either)h(GSS) p 2131 4754 V 40 w(C)p 2237 4754 V 39 w(NO)p 2415 4754 V 40 w(OID)f(to)i(use)e(a)g(mec)m(hanism-sp)s(eci\014c)390 4864 y(default)36 b(prin)m(table)f(syn)m(tax,)j(or)d(an)h(OID)f (recognized)i(b)m(y)e(the)h(GSS-API)f(implemen)m(tation)i(to)390 4974 y(name)30 b(a)h(sp)s(eci\014c)f(namespace.)390 5121 y Ff(output)p 664 5121 V 40 w(name)5 b Fp(:)60 b(\(gss)p 1158 5121 V 40 w(name)p 1410 5121 V 40 w(t,)43 b(mo)s(dify\))d (Returned)f(name)h(in)g(in)m(ternal)g(form.)69 b(Storage)41 b(as-)390 5230 y(so)s(ciated)h(with)e(this)g(name)h(m)m(ust)g(b)s(e)e (freed)i(b)m(y)f(the)h(application)h(after)f(use)f(with)g(a)h(call)h (to)390 5340 y(gss)p 513 5340 V 40 w(release)p 815 5340 V 42 w(name\(\).)p eop end %%Page: 46 50 TeXDict begin 46 49 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(46)390 299 y(Con)m(v)m(ert)40 b(a)g(con)m(tiguous)h(string)e(name)h(to)g(in)m(ternal)g(form.)68 b(In)39 b(general,)k(the)d(in)m(ternal)g(name)390 408 y(returned)h(\(via)j(the)f Fj(@)p Fp(output)p 1459 408 28 4 v 39 w(name)g(parameter\))h(will)f(not)g(b)s(e)f(an)g(MN;)h(the)g (exception)h(to)390 518 y(this)30 b(is)h(if)g(the)f Fj(@)p Fp(input)p 1166 518 V 39 w(name)p 1417 518 V 40 w(t)m(yp)s(e)h (indicates)g(that)h(the)e(con)m(tiguous)i(string)e(pro)m(vided)h(via)g (the)390 628 y Fj(@)p Fp(input)p 657 628 V 39 w(name)p 908 628 V 40 w(bu\013er)20 b(parameter)i(is)g(of)f(t)m(yp)s(e)h(GSS)p 2171 628 V 39 w(C)p 2276 628 V 40 w(NT)p 2450 628 V 40 w(EXPOR)-8 b(T)p 2878 628 V 39 w(NAME,)23 b(in)e(whic)m(h)g(case)390 737 y(the)k(returned)e(in)m(ternal)i(name)g(will)g(b)s(e)f(an)g(MN)h (for)g(the)g(mec)m(hanism)f(that)i(exp)s(orted)e(the)h(name.)390 899 y(Return)30 b(v)-5 b(alue:)390 1062 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1224 y Fj(GSS_S_BAD_NAMETYPE) p Fp(:)36 b(The)30 b(input)p 1721 1224 V 39 w(name)p 1972 1224 V 40 w(t)m(yp)s(e)g(w)m(as)h(unrecognized.)390 1386 y Fj(GSS_S_BAD_NAME)p Fp(:)39 b(The)31 b(input)p 1533 1386 V 39 w(name)g(parameter)h(could)f(not)h(b)s(e)e(in)m (terpreted)i(as)g(a)f(name)h(of)390 1496 y(the)f(sp)s(eci\014ed)e(t)m (yp)s(e.)390 1658 y Fj(GSS_S_BAD_MECH)p Fp(:)43 b(The)33 b(input)g(name-t)m(yp)s(e)h(w)m(as)g(GSS)p 2373 1658 V 39 w(C)p 2478 1658 V 40 w(NT)p 2652 1658 V 40 w(EXPOR)-8 b(T)p 3080 1658 V 40 w(NAME,)34 b(but)f(the)390 1767 y(mec)m(hanism)e(con)m(tained)g(within)f(the)h(input-name)f(is)g(not)h (supp)s(orted.)150 1994 y Fi(gss)p 316 1994 37 5 v 55 w(displa)m(y)p 745 1994 V 54 w(name)3350 2219 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_display_name)50 b Fg(\()p Ff(OM)p 1750 2219 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)34 b(const)565 2328 y(gss)p 688 2328 V 40 w(name)p 940 2328 V 40 w(t)d Fe(input_name)12 b Ff(,)33 b(gss)p 1753 2328 V 40 w(bu\013er)p 2024 2328 V 39 w(t)e Fe(output_name_buffer)12 b Ff(,)36 b(gss)p 3255 2328 V 40 w(OID)30 b(*)565 2438 y Fe(output_name_type)12 b Fg(\))390 2548 y Ff(minor)p 629 2548 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 2710 y Ff(input)p 609 2710 V 39 w(name)5 b Fp(:)41 b(\(gss)p 1083 2710 V 41 w(name)p 1336 2710 V 40 w(t,)31 b(read\))f(Name)h(to)g(b)s(e)f(displa)m (y)m(ed.)390 2872 y Ff(output)p 664 2872 V 40 w(name)p 916 2872 V 40 w(bu\013er)7 b Fp(:)35 b(\(bu\013er,)25 b(c)m(haracter-string,)i(mo)s(dify\))22 b(Bu\013er)h(to)h(receiv)m(e)h (textual)g(name)390 2981 y(string.)43 b(The)31 b(application)h(m)m(ust) f(free)h(storage)g(asso)s(ciated)h(with)e(this)g(name)g(after)h(use)f (with)g(a)390 3091 y(call)h(to)f(gss)p 791 3091 V 40 w(release)p 1093 3091 V 41 w(bu\013er\(\).)390 3253 y Ff(output)p 664 3253 V 40 w(name)p 916 3253 V 40 w(t)m(yp)s(e)5 b Fp(:)57 b(\(Ob)5 b(ject)39 b(ID,)g(mo)s(dify)-8 b(,)40 b(optional\))g(The)e(t)m(yp)s(e)h(of)g(the)f(returned)g(name.)390 3363 y(The)30 b(returned)g(gss)p 1070 3363 V 40 w(OID)g(will)h(b)s(e)f (a)h(p)s(oin)m(ter)g(in)m(to)h(static)g(storage,)g(and)e(should)g(b)s (e)g(treated)i(as)390 3472 y(read-only)g(b)m(y)f(the)h(caller)h(\(in)e (particular,)i(the)e(application)i(should)e(not)g(attempt)i(to)f(free)g (it\).)390 3582 y(Sp)s(ecify)e(NULL)g(if)g(not)h(required.)390 3744 y(Allo)m(ws)k(an)e(application)i(to)f(obtain)g(a)g(textual)h (represen)m(tation)f(of)g(an)g(opaque)f(in)m(ternal-form)390 3854 y(name)24 b(for)g(displa)m(y)h(purp)s(oses.)37 b(The)23 b(syn)m(tax)i(of)f(a)h(prin)m(table)f(name)h(is)f(de\014ned)f(b)m(y)h (the)g(GSS-API)390 3963 y(implemen)m(tation.)390 4126 y(If)41 b(input)p 711 4126 V 39 w(name)g(denotes)g(an)g(anon)m(ymous)g (principal,)i(the)e(implemen)m(tation)i(should)d(return)390 4235 y(the)31 b(gss)p 670 4235 V 40 w(OID)g(v)-5 b(alue)32 b(GSS)p 1323 4235 V 39 w(C)p 1428 4235 V 40 w(NT)p 1602 4235 V 39 w(ANONYMOUS)g(as)f(the)g(output)p 2826 4235 V 40 w(name)p 3078 4235 V 40 w(t)m(yp)s(e,)g(and)g(a)g(tex-)390 4345 y(tual)36 b(name)f(that)g(is)g(syn)m(tactically)j(distinct)e(from) e(all)i(v)-5 b(alid)36 b(supp)s(orted)d(prin)m(table)i(names)g(in)390 4454 y(output)p 664 4454 V 40 w(name)p 916 4454 V 40 w(bu\013er.)390 4617 y(If)27 b(input)p 697 4617 V 39 w(name)h(w)m(as)g(created)h(b)m(y)f(a)g(call)h(to)f(gss)p 2050 4617 V 41 w(imp)s(ort)p 2362 4617 V 39 w(name,)h(sp)s(ecifying)e (GSS)p 3259 4617 V 39 w(C)p 3364 4617 V 40 w(NO)p 3543 4617 V 40 w(OID)390 4726 y(as)i(the)h(name-t)m(yp)s(e,)g(implemen)m (tations)h(that)f(emplo)m(y)g(lazy)g(con)m(v)m(ersion)h(b)s(et)m(w)m (een)f(name)f(t)m(yp)s(es)390 4836 y(ma)m(y)i(return)e(GSS)p 1044 4836 V 40 w(C)p 1150 4836 V 39 w(NO)p 1328 4836 V 40 w(OID)h(via)h(the)g(output)p 2145 4836 V 40 w(name)p 2397 4836 V 40 w(t)m(yp)s(e)f(parameter.)390 4998 y(Return)g(v)-5 b(alue:)390 5160 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 5322 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b Fj(@)p Fp(input)p 1391 5322 V 39 w(name)30 b(w)m(as)h(ill-formed.)p eop end %%Page: 47 51 TeXDict begin 47 50 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(47)150 299 y Fi(gss)p 316 299 37 5 v 55 w(compare)p 823 299 V 54 w(name)3350 498 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_compare_name)50 b Fg(\()p Ff(OM)p 1750 498 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)34 b(const)565 608 y(gss)p 688 608 V 40 w(name)p 940 608 V 40 w(t)d Fe(name1)12 b Ff(,)32 b(const)f(gss)p 1730 608 V 40 w(name)p 1982 608 V 40 w(t)f Fe(name2)12 b Ff(,)32 b(in)m(t)f(*)g Fe(name_equal)12 b Fg(\))390 717 y Ff(minor)p 629 717 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 854 y Ff(name1)7 b Fp(:)41 b(\(gss)p 878 854 V 41 w(name)p 1131 854 V 40 w(t,)31 b(read\))g(In)m(ternal-form)f(name.)390 991 y Ff(name2)7 b Fp(:)41 b(\(gss)p 878 991 V 41 w(name)p 1131 991 V 40 w(t,)31 b(read\))g(In)m(ternal-form)f(name.)390 1127 y Ff(name)p 608 1127 V 40 w(equal)t Fp(:)42 b(\(b)s(o)s(olean,)32 b(mo)s(dify\))f(Non-zero)h(-)g(names)f(refer)f(to)i(same)g(en)m(tit)m (y)-8 b(.)45 b(Zero)31 b(-)g(names)390 1237 y(refer)43 b(to)g(di\013eren)m(t)g(en)m(tities)i(\(strictly)-8 b(,)48 b(the)43 b(names)f(are)i(not)f(kno)m(wn)f(to)i(refer)e(to)i(the)f(same) 390 1347 y(iden)m(tit)m(y\).)390 1483 y(Allo)m(ws)26 b(an)e(application)i(to)f(compare)g(t)m(w)m(o)h(in)m(ternal-form)f (names)g(to)g(determine)g(whether)f(they)390 1593 y(refer)30 b(to)h(the)g(same)g(en)m(tit)m(y)-8 b(.)390 1730 y(If)32 b(either)g(name)g(presen)m(ted)g(to)h(gss)p 1631 1730 V 40 w(compare)p 2004 1730 V 40 w(name)f(denotes)h(an)f(anon)m(ymous)f (principal,)i(the)390 1839 y(routines)d(should)g(indicate)h(that)g(the) g(t)m(w)m(o)g(names)g(do)f(not)g(refer)h(to)g(the)f(same)h(iden)m(tit)m (y)-8 b(.)390 1976 y(Return)30 b(v)-5 b(alue:)390 2113 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2250 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)36 b(The)30 b(t)m(w)m(o)h(names)g (w)m(ere)f(of)h(incomparable)g(t)m(yp)s(es.)390 2386 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(One)30 b(or)g(b)s(oth)g(of)g(name1)h (or)g(name2)f(w)m(as)h(ill-formed.)150 2588 y Fi(gss)p 316 2588 37 5 v 55 w(release)p 731 2588 V 54 w(name)3350 2787 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_release_name) 50 b Fg(\()p Ff(OM)p 1750 2787 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)565 2897 y(gss)p 688 2897 V 40 w(name)p 940 2897 V 40 w(t)31 b(*)g Fe(name)12 b Fg(\))390 3006 y Ff(minor)p 629 3006 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 3143 y Ff(name)5 b Fp(:)41 b(\(gss)p 831 3143 V 40 w(name)p 1083 3143 V 41 w(t,)30 b(mo)s(dify\))g(The)g(name)h(to)g(b)s(e)e(deleted.)390 3280 y(F)-8 b(ree)32 b(GSSAPI-allo)s(cated)h(storage)g(asso)s(ciated)g (with)d(an)i(in)m(ternal-form)f(name.)44 b(The)31 b(name)g(is)390 3389 y(set)g(to)g(GSS)p 822 3389 V 39 w(C)p 927 3389 V 40 w(NO)p 1106 3389 V 40 w(NAME)g(on)f(successful)g(completion)i(of)e (this)h(call.)390 3526 y(Return)f(v)-5 b(alue:)390 3663 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 3800 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(The)30 b(name)g(parameter)h(did)f (not)g(con)m(tain)i(a)f(v)-5 b(alid)30 b(name.)150 4001 y Fi(gss)p 316 4001 37 5 v 55 w(inquire)p 746 4001 V 55 w(names)p 1135 4001 V 54 w(for)p 1337 4001 V 55 w(mec)m(h)3350 4200 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_inquire_names_for_)q(mec)q(h)c Fg(\()p Ff(OM)p 2273 4200 28 4 v 41 w(uin)m(t32)31 b(*)565 4310 y Fe(minor_status)12 b Ff(,)34 b(const)d(gss)p 1621 4310 V 40 w(OID)f Fe(mechanism)12 b Ff(,)33 b(gss)p 2519 4310 V 40 w(OID)p 2732 4310 V 40 w(set)e(*)g Fe(name_types)12 b Fg(\))390 4419 y Ff(minor)p 629 4419 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e (Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 4556 y Ff(mec)m(hanism)p Fp(:)41 b(\(gss)p 1051 4556 V 41 w(OID,)30 b(read\))h(The)f(mec)m(hanism)g(to)h(b)s(e)f(in)m (terrogated.)390 4693 y Ff(name)p 608 4693 V 40 w(t)m(yp)s(es)t Fp(:)65 b(\(gss)p 1104 4693 V 41 w(OID)p 1318 4693 V 40 w(set,)46 b(mo)s(dify\))c(Set)h(of)g(name-t)m(yp)s(es)g(supp)s (orted)d(b)m(y)j(the)g(sp)s(eci\014ed)390 4802 y(mec)m(hanism.)f(The)30 b(returned)g(OID)g(set)h(m)m(ust)g(b)s(e)f(freed)g(b)m(y)h(the)g (application)h(after)f(use)f(with)h(a)390 4912 y(call)h(to)f(gss)p 791 4912 V 40 w(release)p 1093 4912 V 41 w(oid)p 1255 4912 V 41 w(set\(\).)390 5049 y(Returns)e(the)i(set)g(of)f(namet)m(yp)s (es)h(supp)s(orted)e(b)m(y)h(the)g(sp)s(eci\014ed)g(mec)m(hanism.)390 5186 y(Return)g(v)-5 b(alue:)390 5322 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)p eop end %%Page: 48 52 TeXDict begin 48 51 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(48)150 299 y Fi(gss)p 316 299 37 5 v 55 w(inquire)p 746 299 V 55 w(mec)m(hs)p 1127 299 V 54 w(for)p 1329 299 V 55 w(name)3350 494 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_mechs_for_)q (nam)q(e)c Fg(\()p Ff(OM)p 2273 494 28 4 v 41 w(uin)m(t32)31 b(*)565 604 y Fe(minor_status)12 b Ff(,)34 b(const)d(gss)p 1621 604 V 40 w(name)p 1873 604 V 40 w(t)g Fe(input_name)12 b Ff(,)33 b(gss)p 2686 604 V 40 w(OID)p 2899 604 V 40 w(set)e(*)g Fe(mech_types)12 b Fg(\))390 713 y Ff(minor)p 629 713 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec) m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 847 y Ff(input)p 609 847 V 39 w(name)5 b Fp(:)41 b(\(gss)p 1083 847 V 41 w(name)p 1336 847 V 40 w(t,)31 b(read\))f(The)g(name)g (to)i(whic)m(h)e(the)g(inquiry)g(relates.)390 980 y Ff(mec)m(h)p 600 980 V 41 w(t)m(yp)s(es)t Fp(:)37 b(\(gss)p 1069 980 V 40 w(OID)p 1282 980 V 40 w(set,)26 b(mo)s(dify\))d(Set)g(of)h(mec)m (hanisms)f(that)h(ma)m(y)g(supp)s(ort)e(the)i(sp)s(eci\014ed)390 1090 y(name.)71 b(The)39 b(returned)h(OID)g(set)h(m)m(ust)f(b)s(e)g (freed)g(b)m(y)g(the)g(caller)i(after)f(use)f(with)g(a)h(call)g(to)390 1200 y(gss)p 513 1200 V 40 w(release)p 815 1200 V 42 w(oid)p 978 1200 V 40 w(set\(\).)390 1333 y(Returns)29 b(the)g(set)h(of)g(mec)m(hanisms)g(supp)s(orted)d(b)m(y)j(the)f (GSS-API)g(implemen)m(tation)i(that)f(ma)m(y)390 1443 y(b)s(e)g(able)h(to)g(pro)s(cess)f(the)g(sp)s(eci\014ed)g(name.)390 1577 y(Eac)m(h)j(mec)m(hanism)f(returned)g(will)g(recognize)i(at)f (least)h(one)e(elemen)m(t)i(within)e(the)g(name.)47 b(It)32 b(is)390 1686 y(p)s(ermissible)23 b(for)i(this)f(routine)g(to)h(b)s(e)f (implemen)m(ted)h(within)f(a)h(mec)m(hanism-indep)s(enden)m(t)e(GSS-) 390 1796 y(API)f(la)m(y)m(er,)k(using)21 b(the)i(t)m(yp)s(e)f (information)g(con)m(tained)i(within)d(the)i(presen)m(ted)f(name,)i (and)d(based)390 1905 y(on)k(registration)i(information)f(pro)m(vided)f (b)m(y)g(individual)g(mec)m(hanism)g(implemen)m(tations.)41 b(This)390 2015 y(means)36 b(that)h(the)f(returned)f(mec)m(h)p 1624 2015 V 40 w(t)m(yp)s(es)h(set)h(ma)m(y)f(indicate)h(that)g(a)f (particular)h(mec)m(hanism)390 2125 y(will)27 b(understand)f(the)h (name)g(when)f(in)h(fact)g(it)h(w)m(ould)f(refuse)f(to)i(accept)h(the)e (name)g(as)g(input)f(to)390 2234 y(gss)p 513 2234 V 40 w(canonicalize)p 1025 2234 V 43 w(name,)f(gss)p 1447 2234 V 40 w(init)p 1623 2234 V 41 w(sec)p 1780 2234 V 40 w(con)m(text,)i(gss)p 2280 2234 V 40 w(acquire)p 2605 2234 V 41 w(cred)c(or)h(gss)p 3058 2234 V 40 w(add)p 3245 2234 V 40 w(cred)f(\(due)g(to)390 2344 y(some)29 b(prop)s(ert)m(y)f(of)h(the)g(sp)s(eci\014c)f(name,)h(as)g(opp)s(osed)f (to)i(the)e(name)h(t)m(yp)s(e\).)41 b(Th)m(us)27 b(this)i(routine)390 2453 y(should)21 b(b)s(e)g(used)h(only)g(as)g(a)h(pre\014lter)e(for)h (a)g(call)i(to)e(a)h(subsequen)m(t)e(mec)m(hanism-sp)s(eci\014c)i (routine.)390 2587 y(Return)30 b(v)-5 b(alue:)390 2721 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2854 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(The)30 b(input)p 1530 2854 V 39 w(name)g(parameter)h(w)m(as)g(ill-formed.)390 2988 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)60 b(The)42 b(input)p 1757 2988 V 39 w(name)g(parameter)h(con)m(tained)h(an)e(in)m(v)-5 b(alid)43 b(or)g(unsup-)390 3098 y(p)s(orted)30 b(t)m(yp)s(e)g(of)h (name.)150 3295 y Fi(gss)p 316 3295 37 5 v 55 w(canonicalize)p 1011 3295 V 53 w(name)3350 3490 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_canonicalize_name)d Fg(\()p Ff(OM)p 2012 3490 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)12 b Ff(,)565 3600 y(const)31 b(gss)p 926 3600 V 40 w(name)p 1178 3600 V 40 w(t)g Fe(input_name)12 b Ff(,)33 b(const)e(gss)p 2229 3600 V 40 w(OID)f Fe(mech_type)12 b Ff(,)33 b(gss)p 3127 3600 V 40 w(name)p 3379 3600 V 41 w(t)d(*)565 3709 y Fe(output_name)12 b Fg(\))390 3819 y Ff(minor)p 629 3819 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m (hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 3953 y Ff(input)p 609 3953 V 39 w(name)5 b Fp(:)41 b(\(gss)p 1083 3953 V 41 w(name)p 1336 3953 V 40 w(t,)31 b(read\))f(The)g(name)g (for)h(whic)m(h)f(a)g(canonical)i(form)e(is)h(desired.)390 4086 y Ff(mec)m(h)p 600 4086 V 41 w(t)m(yp)s(e)5 b Fp(:)38 b(\(Ob)5 b(ject)27 b(ID,)f(read\))g(The)f(authen)m(tication)j(mec)m (hanism)e(for)g(whic)m(h)f(the)h(canonical)390 4196 y(form)31 b(of)g(the)g(name)h(is)f(desired.)43 b(The)30 b(desired)h(mec)m(hanism) g(m)m(ust)h(b)s(e)e(sp)s(eci\014ed)h(explicitly;)i(no)390 4306 y(default)e(is)f(pro)m(vided.)390 4439 y Ff(output)p 664 4439 V 40 w(name)5 b Fp(:)63 b(\(gss)p 1161 4439 V 40 w(name)p 1413 4439 V 41 w(t,)44 b(mo)s(dify\))e(The)f(resultan)m (t)h(canonical)h(name.)74 b(Storage)43 b(asso-)390 4549 y(ciated)k(with)f(this)g(name)h(m)m(ust)f(b)s(e)f(freed)h(b)m(y)g(the)g (application)i(after)e(use)g(with)g(a)h(call)g(to)390 4658 y(gss)p 513 4658 V 40 w(release)p 815 4658 V 42 w(name\(\).)390 4792 y(Generate)34 b(a)g(canonical)g(mec)m(hanism)g (name)f(\(MN\))h(from)e(an)h(arbitrary)g(in)m(ternal)h(name.)48 b(The)390 4902 y(mec)m(hanism)34 b(name)g(is)g(the)g(name)f(that)i(w)m (ould)e(b)s(e)g(returned)g(to)h(a)g(con)m(text)i(acceptor)f(on)f(suc-) 390 5011 y(cessful)c(authen)m(tication)i(of)f(a)f(con)m(text)i(where)e (the)g(initiator)i(used)d(the)h(input)p 3136 5011 V 39 w(name)h(in)e(a)i(suc-)390 5121 y(cessful)k(call)h(to)f(gss)p 1090 5121 V 41 w(acquire)p 1416 5121 V 40 w(cred,)h(sp)s(ecifying)f(an) g(OID)f(set)i(con)m(taining)g Fj(@)p Fp(mec)m(h)p 3294 5121 V 40 w(t)m(yp)s(e)f(as)h(its)390 5230 y(only)f(mem)m(b)s(er,)g (follo)m(w)m(ed)i(b)m(y)d(a)h(call)i(to)e(gss)p 1949 5230 V 40 w(init)p 2125 5230 V 41 w(sec)p 2282 5230 V 40 w(con)m(text\(\),)k(sp)s(ecifying)34 b Fj(@)p Fp(mec)m(h)p 3425 5230 V 41 w(t)m(yp)s(e)h(as)390 5340 y(the)c(authen)m(tication)h (mec)m(hanism.)p eop end %%Page: 49 53 TeXDict begin 49 52 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(49)390 299 y(Return)30 b(v)-5 b(alue:)390 463 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 693 y Fi(gss)p 316 693 37 5 v 55 w(exp)s(ort)p 722 693 V 55 w(name)3350 919 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_export_name)50 b Fg(\()p Ff(OM)p 1698 919 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)12 b Ff(,)34 b(const)565 1029 y(gss)p 688 1029 V 40 w(name)p 940 1029 V 40 w(t)d Fe(input_name)12 b Ff(,)33 b(gss)p 1753 1029 V 40 w(bu\013er)p 2024 1029 V 39 w(t)e Fe(exported_name)12 b Fg(\))390 1139 y Ff(minor)p 629 1139 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e (Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 1303 y Ff(input)p 609 1303 V 39 w(name)5 b Fp(:)41 b(\(gss)p 1083 1303 V 41 w(name)p 1336 1303 V 40 w(t,)31 b(read\))f(The)g(MN)h (to)g(b)s(e)f(exp)s(orted.)390 1468 y Ff(exp)s(orted)p 745 1468 V 40 w(name)5 b Fp(:)44 b(\(gss)p 1223 1468 V 40 w(bu\013er)p 1494 1468 V 40 w(t,)33 b(o)s(ctet-string,)h(mo)s (dify\))e(The)f(canonical)j(con)m(tiguous)f(string)390 1577 y(form)20 b(of)h Fj(@)p Fp(input)p 956 1577 V 38 w(name.)38 b(Storage)21 b(asso)s(ciated)h(with)f(this)f(string)g(m)m (ust)h(freed)f(b)m(y)g(the)h(application)390 1687 y(after)31 b(use)f(with)g(gss)p 1092 1687 V 40 w(release)p 1394 1687 V 42 w(bu\013er\(\).)390 1851 y(T)-8 b(o)27 b(pro)s(duce)f(a)i (canonical)g(con)m(tiguous)h(string)d(represen)m(tation)j(of)e(a)g(mec) m(hanism)g(name)h(\(MN\),)390 1961 y(suitable)h(for)e(direct)i (comparison)f(\(e.g.)41 b(with)28 b(memcmp\))g(for)g(use)f(in)h (authorization)h(functions)390 2070 y(\(e.g.)57 b(matc)m(hing)37 b(en)m(tries)f(in)g(an)f(access-con)m(trol)k(list\).)57 b(The)35 b Fj(@)p Fp(input)p 2835 2070 V 39 w(name)g(parameter)h(m)m (ust)390 2180 y(sp)s(ecify)f(a)g(v)-5 b(alid)36 b(MN)g(\(i.e.)56 b(an)35 b(in)m(ternal)h(name)f(generated)i(b)m(y)e(gss)p 2787 2180 V 40 w(accept)p 3078 2180 V 41 w(sec)p 3235 2180 V 41 w(con)m(text\(\))j(or)390 2290 y(b)m(y)30 b(gss)p 639 2290 V 40 w(canonicalize)p 1151 2290 V 43 w(name\(\)\).)390 2454 y(Return)g(v)-5 b(alue:)390 2619 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2783 y Fj(GSS_S_NAME_NOT_MN)p Fp(:)36 b(The)30 b(pro)m(vided)g(in)m(ternal)h(name)f(w)m(as)h(not)g(a) g(mec)m(hanism)f(name.)390 2948 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(The)30 b(pro)m(vided)g(in)m(ternal)h(name)f(w)m(as)h (ill-formed.)390 3112 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)41 b(The)33 b(in)m(ternal)h(name)f(w)m(as)h(of)f(a)h(t)m(yp)s(e)f(not)h (supp)s(orted)d(b)m(y)i(the)g(GSS-)390 3222 y(API)d(implemen)m(tation.) 150 3451 y Fi(gss)p 316 3451 37 5 v 55 w(duplicate)p 862 3451 V 54 w(name)3350 3678 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_duplicate_name)c Fg(\()p Ff(OM)p 1855 3678 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)12 b Ff(,)34 b(const)565 3787 y(gss)p 688 3787 V 40 w(name)p 940 3787 V 40 w(t)d Fe(src_name)12 b Ff(,)33 b(gss)p 1649 3787 V 40 w(name)p 1901 3787 V 40 w(t)e(*)f Fe(dest_name)12 b Fg(\))390 3897 y Ff(minor)p 629 3897 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 4061 y Ff(src)p 508 4061 V 40 w(name)5 b Fp(:)41 b(\(gss)p 983 4061 V 40 w(name)p 1235 4061 V 40 w(t,)31 b(read\))g(In)m(ternal)g(name)f(to)h(b) s(e)f(duplicated.)390 4226 y Ff(dest)p 558 4226 V 40 w(name)5 b Fp(:)60 b(\(gss)p 1052 4226 V 40 w(name)p 1304 4226 V 40 w(t,)43 b(mo)s(dify\))c(The)h(resultan)m(t)g(cop)m(y)h (of)f Fj(@)p Fp(src)p 2880 4226 V 39 w(name.)69 b(Storage)41 b(asso-)390 4336 y(ciated)47 b(with)f(this)g(name)h(m)m(ust)f(b)s(e)f (freed)h(b)m(y)g(the)g(application)i(after)e(use)g(with)g(a)h(call)g (to)390 4445 y(gss)p 513 4445 V 40 w(release)p 815 4445 V 42 w(name\(\).)390 4610 y(Create)55 b(an)f(exact)i(duplicate)f(of)f (the)h(existing)g(in)m(ternal)g(name)g Fj(@)p Fp(src)p 3000 4610 V 39 w(name.)113 b(The)53 b(new)390 4719 y Fj(@)p Fp(dest)p 606 4719 V 40 w(name)35 b(will)h(b)s(e)f(indep)s (enden)m(t)f(of)i(src)p 1940 4719 V 40 w(name)f(\(i.e.)58 b Fj(@)p Fp(src)p 2595 4719 V 39 w(name)36 b(and)f Fj(@)p Fp(dest)p 3274 4719 V 40 w(name)g(m)m(ust)390 4829 y(b)s(oth)30 b(b)s(e)f(released,)j(and)e(the)g(release)i(of)e(one)h(shall)g(not)f (a\013ect)i(the)f(v)-5 b(alidit)m(y)32 b(of)e(the)h(other\).)390 4993 y(Return)f(v)-5 b(alue:)390 5158 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 5322 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(The)30 b(src)p 1429 5322 V 40 w(name)g(parameter)h(w)m(as)g (ill-formed.)p eop end %%Page: 50 54 TeXDict begin 50 53 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(50)150 299 y Fo(3.9)68 b(Miscellaneous)46 b(Routines)293 458 y Fj(GSS-API)g(Miscellaneous)e (Routines)293 677 y(Routine)1144 b(Function)293 787 y(-------)g (--------)293 897 y(gss_add_oid_set_member)424 b(Add)47 b(an)g(object)f(identifier)f(to)1773 1006 y(a)i(set.)293 1116 y(gss_display_status)616 b(Convert)46 b(a)h(GSS-API)f(status)g (code)1773 1225 y(to)h(text.)293 1335 y(gss_indicate_mechs)616 b(Determine)45 b(available)g(underlying)1773 1445 y(authentication)f (mechanisms.)293 1554 y(gss_release_buffer)616 b(Discard)46 b(a)h(buffer.)293 1664 y(gss_release_oid_set)568 b(Discard)46 b(a)h(set)g(of)g(object)1773 1773 y(identifiers.)293 1883 y(gss_create_empty_oid_set)328 b(Create)46 b(a)h(set)g(containing) e(no)1773 1993 y(object)h(identifiers.)293 2102 y (gss_test_oid_set_member)376 b(Determines)45 b(whether)h(an)h(object) 1773 2212 y(identifier)e(is)i(a)g(member)f(of)i(a)f(set.)293 2321 y(gss_encapsulate_token)472 b(Encapsulate)44 b(a)k(context)e (token.)293 2431 y(gss_decapsulate_token)472 b(Decapsulate)44 b(a)k(context)e(token.)293 2540 y(gss_oid_equal)856 b(Compare)46 b(two)g(OIDs)h(for)g(equality.)150 2812 y Fi(gss)p 316 2812 37 5 v 55 w(add)p 567 2812 V 54 w(oid)p 784 2812 V 55 w(set)p 991 2812 V 54 w(mem)m(b)s(er)3350 3082 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_add_oid_set_member)d Fg(\()p Ff(OM)p 2064 3082 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)565 3191 y(const)31 b(gss)p 926 3191 V 40 w(OID)f Fe(member_oid)12 b Ff(,)34 b(gss)p 1877 3191 V 40 w(OID)p 2090 3191 V 40 w(set)d(*)f Fe(oid_set)12 b Fg(\))390 3301 y Ff(minor)p 629 3301 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s (eci\014c)f(status)h(co)s(de.)390 3508 y Ff(mem)m(b)s(er)p 715 3508 V 39 w(oid)t Fp(:)41 b(\(Ob)5 b(ject)31 b(ID,)g(read\))f(The)g (ob)5 b(ject)31 b(iden)m(ti\014er)g(to)g(copied)g(in)m(to)g(the)g(set.) 390 3715 y Ff(oid)p 517 3715 V 40 w(set)r Fp(:)46 b(\(Set)33 b(of)g(Ob)5 b(ject)33 b(ID,)g(mo)s(dify\))f(The)h(set)g(in)f(whic)m(h)h (the)f(ob)5 b(ject)34 b(iden)m(ti\014er)f(should)f(b)s(e)390 3824 y(inserted.)390 4031 y(Add)d(an)g(Ob)5 b(ject)30 b(Iden)m(ti\014er)g(to)g(an)g(Ob)5 b(ject)29 b(Iden)m(ti\014er)h(set.) 41 b(This)29 b(routine)h(is)f(in)m(tended)h(for)f(use)390 4141 y(in)i(conjunction)h(with)g(gss)p 1323 4141 V 40 w(create)p 1599 4141 V 41 w(empt)m(y)p 1887 4141 V 41 w(oid)p 2049 4141 V 40 w(set)g(when)f(constructing)h(a)g(set)h(of)f (mec)m(hanism)390 4251 y(OIDs)38 b(for)g(input)g(to)h(gss)p 1277 4251 V 40 w(acquire)p 1602 4251 V 41 w(cred.)64 b(The)38 b(oid)p 2215 4251 V 40 w(set)h(parameter)g(m)m(ust)f(refer)g (to)h(an)g(OID-)390 4360 y(set)26 b(that)h(w)m(as)f(created)h(b)m(y)f (GSS-API)g(\(e.g.)40 b(a)27 b(set)f(returned)f(b)m(y)h(gss)p 2747 4360 V 40 w(create)p 3023 4360 V 41 w(empt)m(y)p 3311 4360 V 41 w(oid)p 3473 4360 V 40 w(set\(\)\).)390 4470 y(GSS-API)e(creates)j(a)e(cop)m(y)g(of)g(the)g(mem)m(b)s(er)p 1929 4470 V 40 w(oid)g(and)f(inserts)h(this)f(cop)m(y)i(in)m(to)g(the)f (set,)h(expand-)390 4579 y(ing)21 b(the)h(storage)h(allo)s(cated)g(to)f (the)f(OID-set's)h(elemen)m(ts)h(arra)m(y)f(if)f(necessary)-8 b(.)38 b(The)21 b(routine)g(ma)m(y)390 4689 y(add)28 b(the)i(new)e(mem)m(b)s(er)h(OID)g(an)m(ywhere)f(within)h(the)g(elemen) m(ts)i(arra)m(y)-8 b(,)30 b(and)e(implemen)m(tations)390 4799 y(should)i(v)m(erify)h(that)g(the)f(new)g(mem)m(b)s(er)p 1797 4799 V 40 w(oid)h(is)f(not)h(already)g(con)m(tained)h(within)e (the)h(elemen)m(ts)390 4908 y(arra)m(y;)g(if)f(the)h(mem)m(b)s(er)p 1218 4908 V 39 w(oid)g(is)f(already)h(presen)m(t,)g(the)g(oid)p 2441 4908 V 40 w(set)g(should)e(remain)h(unc)m(hanged.)390 5115 y(Return)g(v)-5 b(alue:)390 5322 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)p eop end %%Page: 51 55 TeXDict begin 51 54 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(51)150 299 y Fi(gss)p 316 299 37 5 v 55 w(displa)m(y)p 745 299 V 54 w(status)3350 500 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_display_status) c Fg(\()p Ff(OM)p 1855 500 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)12 b Ff(,)565 610 y(OM)p 725 610 V 40 w(uin)m(t32)31 b Fe(status_value)12 b Ff(,)34 b(in)m(t)d Fe(status_type)12 b Ff(,)33 b(const)e(gss)p 2876 610 V 41 w(OID)f Fe(mech_type)12 b Ff(,)565 720 y(OM)p 725 720 V 40 w(uin)m(t32)31 b(*)g Fe(message_context)12 b Ff(,)35 b(gss)p 2090 720 V 40 w(bu\013er)p 2361 720 V 39 w(t)c Fe(status_string)12 b Fg(\))390 829 y Ff(minor)p 629 829 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec) m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 968 y Ff(status)p 634 968 V 40 w(v)-5 b(alue)5 b Fp(:)42 b(\(In)m(teger,)32 b(read\))e(Status)h(v)-5 b(alue)30 b(to)i(b)s(e)d(con)m(v)m(erted.)390 1108 y Ff(status)p 634 1108 V 40 w(t)m(yp)s(e)5 b Fp(:)41 b(\(In)m(teger,)30 b(read\))f(GSS)p 1695 1108 V 40 w(C)p 1801 1108 V 39 w(GSS)p 2013 1108 V 40 w(CODE)f(-)h(status)p 2646 1108 V 40 w(v)-5 b(alue)29 b(is)g(a)g(GSS)f(status)h(co)s(de.)390 1217 y(GSS)p 569 1217 V 39 w(C)p 674 1217 V 40 w(MECH)p 993 1217 V 40 w(CODE)h(-)h(status)p 1630 1217 V 40 w(v)-5 b(alue)31 b(is)f(a)h(mec)m(hanism)g(status)f(co)s(de.)390 1356 y Ff(mec)m(h)p 600 1356 V 41 w(t)m(yp)s(e)5 b Fp(:)49 b(\(Ob)5 b(ject)35 b(ID,)g(read,)g(optional\))h(Underlying)f(mec)m (hanism)f(\(used)g(to)i(in)m(terpret)f(a)390 1466 y(minor)30 b(status)h(v)-5 b(alue\).)41 b(Supply)29 b(GSS)p 1712 1466 V 39 w(C)p 1817 1466 V 40 w(NO)p 1996 1466 V 40 w(OID)h(to)h(obtain)g(the)f(system)h(default.)390 1605 y Ff(message)p 714 1605 V 41 w(con)m(text)r Fp(:)52 b(\(In)m(teger,)38 b(read/mo)s(dify\))d(Should)f(b)s(e)h(initialized)i(to)e(zero)h(b)m(y)f (the)h(appli-)390 1715 y(cation)41 b(prior)e(to)h(the)g(\014rst)f (call.)69 b(On)39 b(return)f(from)h(gss)p 2411 1715 V 41 w(displa)m(y)p 2730 1715 V 40 w(status\(\),)k(a)d(non-zero)g(sta-) 390 1824 y(tus)p 518 1824 V 40 w(v)-5 b(alue)38 b(parameter)g (indicates)h(that)f(additional)h(messages)g(ma)m(y)f(b)s(e)f(extracted) i(from)f(the)390 1934 y(status)21 b(co)s(de)f(via)h(subsequen)m(t)f (calls)h(to)g(gss)p 1859 1934 V 40 w(displa)m(y)p 2177 1934 V 41 w(status\(\),)i(passing)e(the)f(same)h(status)p 3486 1934 V 40 w(v)-5 b(alue,)390 2043 y(status)p 634 2043 V 40 w(t)m(yp)s(e,)31 b(mec)m(h)p 1108 2043 V 41 w(t)m(yp)s(e,)g(and)e(message)p 1873 2043 V 41 w(con)m(text)k (parameters.)390 2183 y Ff(status)p 634 2183 V 40 w(string)8 b Fp(:)63 b(\(bu\013er,)45 b(c)m(haracter)e(string,)h(mo)s(dify\))e(T) -8 b(extual)42 b(in)m(terpretation)h(of)f(the)g(sta-)390 2292 y(tus)p 518 2292 V 40 w(v)-5 b(alue.)53 b(Storage)35 b(asso)s(ciated)h(with)e(this)g(parameter)h(m)m(ust)f(b)s(e)g(freed)g (b)m(y)g(the)h(application)390 2402 y(after)c(use)f(with)g(a)h(call)g (to)h(gss)p 1446 2402 V 40 w(release)p 1748 2402 V 41 w(bu\013er\(\).)390 2541 y(Allo)m(ws)j(an)g(application)g(to)g(obtain)g (a)g(textual)g(represen)m(tation)h(of)e(a)h(GSS-API)f(status)g(co)s (de,)390 2651 y(for)27 b(displa)m(y)h(to)g(the)g(user)e(or)i(for)f (logging)i(purp)s(oses.)38 b(Since)27 b(some)h(status)g(v)-5 b(alues)28 b(ma)m(y)g(indicate)390 2760 y(m)m(ultiple)k(conditions,)h (applications)g(ma)m(y)g(need)e(to)i(call)g(gss)p 2532 2760 V 40 w(displa)m(y)p 2850 2760 V 40 w(status)g(m)m(ultiple)f (times,)390 2870 y(eac)m(h)i(call)g(generating)g(a)f(single)h(text)f (string.)48 b(The)32 b(message)p 2552 2870 V 42 w(con)m(text)i (parameter)f(is)g(used)f(b)m(y)390 2979 y(gss)p 513 2979 V 40 w(displa)m(y)p 831 2979 V 40 w(status)25 b(to)g(store)g(state)g (information)f(ab)s(out)g(whic)m(h)g(error)g(messages)h(ha)m(v)m(e)g (already)390 3089 y(b)s(een)36 b(extracted)i(from)e(a)g(giv)m(en)i (status)p 1809 3089 V 40 w(v)-5 b(alue;)40 b(message)p 2436 3089 V 42 w(con)m(text)e(m)m(ust)e(b)s(e)g(initialized)i(to)g(0) 390 3199 y(b)m(y)27 b(the)f(application)i(prior)e(to)i(the)f(\014rst)e (call,)k(and)d(gss)p 2279 3199 V 41 w(displa)m(y)p 2598 3199 V 40 w(status)h(will)g(return)e(a)i(non-zero)390 3308 y(v)-5 b(alue)31 b(in)f(this)g(parameter)h(if)f(there)h(are)g (further)e(messages)i(to)g(extract.)390 3447 y(The)81 b(message)p 952 3447 V 41 w(con)m(text)i(parameter)e(con)m(tains)h(all) g(state)h(information)e(required)f(b)m(y)390 3557 y(gss)p 513 3557 V 40 w(displa)m(y)p 831 3557 V 40 w(status)62 b(in)f(order)g(to)h(extract)h(further)d(messages)i(from)f(the)h(status) p 3486 3557 V 40 w(v)-5 b(alue;)390 3667 y(ev)m(en)45 b(when)e(a)i(non-zero)f(v)-5 b(alue)45 b(is)f(returned)f(in)h(this)g (parameter,)49 b(the)44 b(application)h(is)g(not)390 3776 y(required)j(to)h(call)h(gss)p 1202 3776 V 40 w(displa)m(y)p 1520 3776 V 40 w(status)f(again)h(unless)e(subsequen)m(t)g(messages)h (are)g(desired.)390 3886 y(The)36 b(follo)m(wing)h(co)s(de)g(extracts)g (all)g(messages)g(from)f(a)h(giv)m(en)g(status)f(co)s(de)h(and)e(prin)m (ts)h(them)390 3995 y(to)31 b(stderr:)630 4134 y Fj(OM_uint32)45 b(message_context;)630 4244 y(OM_uint32)g(status_code;)630 4354 y(OM_uint32)g(maj_status;)630 4463 y(OM_uint32)g(min_status;)630 4573 y(gss_buffer_desc)f(status_string;)964 4792 y(...)630 5011 y(message_context)g(=)j(0;)630 5230 y(do)g({)725 5340 y(maj_status)e(=)j(gss_display_status)43 b(\()p eop end %%Page: 52 56 TeXDict begin 52 55 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(52)1489 299 y Fj(&min_status,)1489 408 y(status_code,)1489 518 y(GSS_C_GSS_CODE,)1489 628 y(GSS_C_NO_OID,)1489 737 y(&message_context,)1489 847 y(&status_string\))725 1066 y(fprintf\(stderr,)1107 1176 y("\045.*s\\n",)1060 1285 y(\(int\)status_string.leng)o(th,)1060 1504 y(\(char)46 b(*\)status_string.value\);)725 1724 y(gss_release_buffer\(&min_st)o(atus)o(,)c(&status_string\);)630 1943 y(})47 b(while)g(\(message_context)c(!=)k(0\);)390 2081 y Fp(Return)30 b(v)-5 b(alue:)390 2220 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2358 y Fj(GSS_S_BAD_MECH)p Fp(:)i(Indicates)21 b(that)f(translation)i(in)e(accordance)i(with)e(an) g(unsupp)s(orted)d(mec)m(h-)390 2468 y(anism)30 b(t)m(yp)s(e)h(w)m(as)f (requested.)390 2606 y Fj(GSS_S_BAD_STATUS)p Fp(:)61 b(The)41 b(status)i(v)-5 b(alue)43 b(w)m(as)g(not)g(recognized,)k(or)42 b(the)h(status)g(t)m(yp)s(e)g(w)m(as)390 2716 y(neither)30 b(GSS)p 877 2716 28 4 v 40 w(C)p 983 2716 V 39 w(GSS)p 1195 2716 V 40 w(CODE)g(nor)g(GSS)p 1868 2716 V 39 w(C)p 1973 2716 V 40 w(MECH)p 2292 2716 V 40 w(CODE.)150 2919 y Fi(gss)p 316 2919 37 5 v 55 w(indicate)p 794 2919 V 54 w(mec)m(hs)3350 3119 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_indicate_mechs)c Fg(\()p Ff(OM)p 1855 3119 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)12 b Ff(,)565 3229 y(gss)p 688 3229 V 40 w(OID)p 901 3229 V 40 w(set)31 b(*)g Fe(mech_set)12 b Fg(\))390 3339 y Ff(minor)p 629 3339 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 3477 y Ff(mec)m(h)p 600 3477 V 41 w(set)r Fp(:)40 b(\(set)29 b(of)g(Ob)5 b(ject)29 b(IDs,)g(mo)s(dify\))f(Set)h(of)g(implemen)m (tation-supp)s(orted)g(mec)m(hanisms.)390 3587 y(The)e(returned)e(gss)p 1062 3587 V 41 w(OID)p 1276 3587 V 40 w(set)i(v)-5 b(alue)28 b(will)f(b)s(e)f(a)i(dynamically-allo)s(cated)i(OID)d(set,)h(that)g (should)390 3696 y(b)s(e)i(released)h(b)m(y)f(the)h(caller)g(after)g (use)f(with)g(a)h(call)h(to)f(gss)p 2439 3696 V 40 w(release)p 2741 3696 V 42 w(oid)p 2904 3696 V 40 w(set\(\).)390 3835 y(Allo)m(ws)i(an)f(application)h(to)g(determine)f(whic)m(h)g (underlying)f(securit)m(y)h(mec)m(hanisms)h(are)f(a)m(v)-5 b(ail-)390 3944 y(able.)390 4083 y(Return)30 b(v)-5 b(alue:)390 4221 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 4424 y Fi(gss)p 316 4424 37 5 v 55 w(release)p 731 4424 V 54 w(bu\013er)3350 4625 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_release_buffer)c Fg(\()p Ff(OM)p 1855 4625 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)12 b Ff(,)565 4734 y(gss)p 688 4734 V 40 w(bu\013er)p 959 4734 V 39 w(t)31 b Fe(buffer)12 b Fg(\))390 4844 y Ff(minor)p 629 4844 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d (Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 4982 y Ff(bu\013er)7 b Fp(:)44 b(\(bu\013er,)33 b(mo)s(dify\))g(The)f (storage)i(asso)s(ciated)h(with)d(the)h(bu\013er)f(will)h(b)s(e)g (deleted.)48 b(The)390 5092 y(gss)p 513 5092 V 40 w(bu\013er)p 784 5092 V 39 w(desc)31 b(ob)5 b(ject)31 b(will)g(not)f(b)s(e)g(freed,) g(but)g(its)h(length)f(\014eld)g(will)h(b)s(e)f(zero)s(ed.)390 5230 y(F)-8 b(ree)40 b(storage)g(asso)s(ciated)h(with)d(a)i(bu\013er.) 65 b(The)38 b(storage)j(m)m(ust)e(ha)m(v)m(e)h(b)s(een)e(allo)s(cated)j (b)m(y)e(a)390 5340 y(GSS-API)30 b(routine.)42 b(In)30 b(addition)h(to)g(freeing)g(the)g(asso)s(ciated)h(storage,)h(the)d (routine)h(will)g(zero)p eop end %%Page: 53 57 TeXDict begin 53 56 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(53)390 299 y(the)27 b(length)g(\014eld)g(in)g(the)g(descriptor)f(to)i(whic)m(h)f(the)g (bu\013er)f(parameter)h(refers,)h(and)e(implemen-)390 408 y(tations)g(are)g(encouraged)g(to)g(additionally)g(set)g(the)f(p)s (oin)m(ter)h(\014eld)e(in)h(the)h(descriptor)f(to)h(NULL.)390 518 y(An)m(y)f(bu\013er)f(ob)5 b(ject)27 b(returned)d(b)m(y)h(a)g (GSS-API)g(routine)g(ma)m(y)h(b)s(e)f(passed)f(to)i(gss)p 3182 518 28 4 v 41 w(release)p 3485 518 V 41 w(bu\013er)390 628 y(\(ev)m(en)31 b(if)g(there)f(is)h(no)f(storage)i(asso)s(ciated)g (with)e(the)g(bu\013er\).)390 763 y(Return)g(v)-5 b(alue:)390 899 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 1099 y Fi(gss)p 316 1099 37 5 v 55 w(release)p 731 1099 V 54 w(oid)p 948 1099 V 55 w(set)3350 1297 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_release_oid_set)c Fg(\()p Ff(OM)p 1907 1297 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)565 1407 y(gss)p 688 1407 V 40 w(OID)p 901 1407 V 40 w(set)31 b(*)g Fe(set)12 b Fg(\))390 1517 y Ff(minor)p 629 1517 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 1652 y Ff(set)r Fp(:)40 b(\(Set)29 b(of)g(Ob)5 b(ject)28 b(IDs,)h(mo)s(dify\))f(The)g(storage)i(asso)s(ciated)g(with)e(the)h (gss)p 3100 1652 V 40 w(OID)p 3313 1652 V 40 w(set)g(will)g(b)s(e)390 1762 y(deleted.)390 1897 y(F)-8 b(ree)52 b(storage)h(asso)s(ciated)g (with)e(a)h(GSSAPI-generated)g(gss)p 2647 1897 V 40 w(OID)p 2860 1897 V 40 w(set)g(ob)5 b(ject.)105 b(The)50 b(set)390 2007 y(parameter)45 b(m)m(ust)g(refer)f(to)h(an)g(OID-set)h(that)f(w)m (as)g(returned)e(from)i(a)g(GSS-API)f(routine.)390 2117 y(gss)p 513 2117 V 40 w(release)p 815 2117 V 42 w(oid)p 978 2117 V 40 w(set\(\))h(will)f(free)f(the)h(storage)h(asso)s(ciated)g (with)f(eac)m(h)h(individual)e(mem)m(b)s(er)390 2226 y(OID,)31 b(the)f(OID)g(set's)h(elemen)m(ts)h(arra)m(y)-8 b(,)32 b(and)d(the)i(gss)p 2265 2226 V 40 w(OID)p 2478 2226 V 40 w(set)p 2629 2226 V 41 w(desc.)390 2362 y(The)e(gss)p 699 2362 V 40 w(OID)p 912 2362 V 40 w(set)h(parameter)f(is)h(set)f(to)h (GSS)p 2040 2362 V 40 w(C)p 2146 2362 V 39 w(NO)p 2324 2362 V 40 w(OID)p 2537 2362 V 40 w(SET)f(on)g(successful)g(completion) 390 2472 y(of)i(this)f(routine.)390 2607 y(Return)g(v)-5 b(alue:)390 2743 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 2943 y Fi(gss)p 316 2943 37 5 v 55 w(create)p 696 2943 V 53 w(empt)m(y)p 1085 2943 V 54 w(oid)p 1302 2943 V 54 w(set)3350 3141 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_create_empty_oid_s)q(et)d Fg(\()p Ff(OM)p 2169 3141 28 4 v 40 w(uin)m(t32)31 b(*)565 3251 y Fe(minor_status)12 b Ff(,)34 b(gss)p 1383 3251 V 40 w(OID)p 1596 3251 V 40 w(set)d(*)g Fe(oid_set)12 b Fg(\))390 3360 y Ff(minor)p 629 3360 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 3496 y Ff(oid)p 517 3496 V 40 w(set)r Fp(:)39 b(\(Set)27 b(of)f(Ob)5 b(ject)26 b(IDs,)h(mo)s(dify\))f(The)f(empt)m(y)h(ob)5 b(ject)27 b(iden)m(ti\014er)f(set.)40 b(The)26 b(routine)g(will)390 3606 y(allo)s(cate)34 b(the)e(gss)p 1008 3606 V 40 w(OID)p 1221 3606 V 40 w(set)p 1372 3606 V 41 w(desc)f(ob)5 b(ject,)33 b(whic)m(h)e(the)h(application)h(m)m(ust)e(free)h(after)g(use)f(with) 390 3715 y(a)g(call)g(to)h(gss)p 867 3715 V 40 w(release)p 1169 3715 V 41 w(oid)p 1331 3715 V 40 w(set\(\).)390 3851 y(Create)25 b(an)f(ob)5 b(ject-iden)m(ti\014er)26 b(set)e(con)m(taining)i(no)e(ob)5 b(ject)25 b(iden)m(ti\014ers,)h(to)f (whic)m(h)f(mem)m(b)s(ers)f(ma)m(y)390 3961 y(b)s(e)33 b(subsequen)m(tly)f(added)h(using)g(the)g(gss)p 1852 3961 V 40 w(add)p 2039 3961 V 40 w(oid)p 2200 3961 V 40 w(set)p 2351 3961 V 40 w(mem)m(b)s(er\(\))h(routine.)49 b(These)33 b(routines)390 4070 y(are)27 b(in)m(tended)g(to)h(b)s(e)f (used)f(to)i(construct)f(sets)h(of)f(mec)m(hanism)g(ob)5 b(ject)28 b(iden)m(ti\014ers,)g(for)f(input)f(to)390 4180 y(gss)p 513 4180 V 40 w(acquire)p 838 4180 V 41 w(cred.)390 4315 y(Return)k(v)-5 b(alue:)390 4451 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 4652 y Fi(gss)p 316 4652 37 5 v 55 w(test)p 571 4652 V 54 w(oid)p 788 4652 V 55 w(set)p 995 4652 V 54 w(mem)m(b)s(er)3350 4849 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_test_oid_set_membe) q(r)c Fg(\()p Ff(OM)p 2116 4849 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)12 b Ff(,)565 4959 y(const)31 b(gss)p 926 4959 V 40 w(OID)f Fe(member)12 b Ff(,)32 b(const)f(gss)p 1905 4959 V 40 w(OID)p 2118 4959 V 40 w(set)g Fe(set)12 b Ff(,)31 b(in)m(t)g(*)g Fe(present)12 b Fg(\))390 5069 y Ff(minor)p 629 5069 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 5204 y Ff(mem)m(b)s(er)7 b Fp(:)40 b(\(Ob)5 b(ject)30 b(ID,)h(read\))g(The)f(ob)5 b(ject)31 b(iden)m(ti\014er)g(whose)f (presence)g(is)h(to)g(b)s(e)e(tested.)390 5340 y Ff(set)r Fp(:)41 b(\(Set)31 b(of)g(Ob)5 b(ject)30 b(ID,)h(read\))g(The)f(Ob)5 b(ject)30 b(Iden)m(ti\014er)g(set.)p eop end %%Page: 54 58 TeXDict begin 54 57 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(54)390 299 y Ff(presen)m(t)r Fp(:)39 b(\(Bo)s(olean,)29 b(mo)s(dify\))e(Non-zero)h(if)f(the)g(sp)s (eci\014ed)f(OID)h(is)f(a)i(mem)m(b)s(er)e(of)h(the)g(set,)h(zero)390 408 y(if)i(not.)390 540 y(In)m(terrogate)41 b(an)f(Ob)5 b(ject)39 b(Iden)m(ti\014er)h(set)g(to)g(determine)f(whether)g(a)h(sp)s (eci\014ed)f(Ob)5 b(ject)39 b(Iden-)390 650 y(ti\014er)e(is)g(a)g(mem)m (b)s(er.)60 b(This)36 b(routine)h(is)g(in)m(tended)g(to)h(b)s(e)e(used) g(with)h(OID)g(sets)g(returned)f(b)m(y)390 759 y(gss)p 513 759 28 4 v 40 w(indicate)p 865 759 V 41 w(mec)m(hs\(\),)k(gss)p 1398 759 V 40 w(acquire)p 1723 759 V 41 w(cred\(\),)g(and)c(gss)p 2366 759 V 40 w(inquire)p 2682 759 V 40 w(cred\(\),)j(but)d(will)i (also)g(w)m(ork)390 869 y(with)30 b(user-generated)h(sets.)390 1000 y(Return)f(v)-5 b(alue:)390 1132 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 1325 y Fi(gss)p 316 1325 37 5 v 55 w(encapsulate)p 992 1325 V 54 w(tok)m(en)3350 1516 y Fp([F)-8 b(unction])-3599 b Fh(extern)54 b(OM_uint32)h (gss_encapsulate_token)d Fg(\()p Ff(gss)p 2341 1516 28 4 v 41 w(const)p 2589 1516 V 40 w(bu\013er)p 2860 1516 V 39 w(t)565 1625 y Fe(input_token)12 b Ff(,)34 b(gss)p 1331 1625 V 40 w(const)p 1578 1625 V 40 w(OID)d Fe(token_oid)12 b Ff(,)32 b(gss)p 2476 1625 V 41 w(bu\013er)p 2748 1625 V 39 w(t)e Fe(output_token)12 b Fg(\))390 1735 y Ff(input)p 609 1735 V 39 w(tok)m(en)p Fp(:)42 b(\(bu\013er,)30 b(opaque,)h(read\)) f(Bu\013er)h(with)f(GSS-API)g(con)m(text)i(tok)m(en)f(data.)390 1866 y Ff(tok)m(en)p 612 1866 V 41 w(oid)t Fp(:)41 b(\(Ob)5 b(ject)30 b(ID,)h(read\))g(Ob)5 b(ject)30 b(iden)m(ti\014er)h(of)g(tok) m(en.)390 1998 y Ff(output)p 664 1998 V 40 w(tok)m(en)p Fp(:)41 b(\(bu\013er,)30 b(opaque,)h(mo)s(dify\))f(Encapsulated)g(tok)m (en)h(data;)g(caller)h(m)m(ust)e(release)390 2107 y(with)g(gss)p 720 2107 V 40 w(release)p 1022 2107 V 42 w(bu\013er\(\).)390 2239 y(Add)e(the)g(mec)m(hanism-indep)s(enden)m(t)g(tok)m(en)i(header)e (to)i(GSS-API)e(con)m(text)i(tok)m(en)g(data.)41 b(This)390 2348 y(is)33 b(used)g(for)g(the)h(initial)g(tok)m(en)h(of)e(a)h (GSS-API)f(con)m(text)i(establishmen)m(t)f(sequence.)50 b(It)33 b(incor-)390 2458 y(p)s(orates)f(an)f(iden)m(ti\014er)h(of)g (the)g(mec)m(hanism)g(t)m(yp)s(e)g(to)g(b)s(e)g(used)e(on)i(that)g(con) m(text,)j(and)c(enables)390 2567 y(tok)m(ens)e(to)h(b)s(e)e(in)m (terpreted)g(unam)m(biguously)g(at)h(GSS-API)f(p)s(eers.)40 b(See)28 b(further)g(section)h(3.1)h(of)390 2677 y(RF)m(C)h(2743.)42 b(This)30 b(function)g(is)g(standardized)g(in)g(RF)m(C)h(6339.)390 2808 y(Returns:)390 2940 y Fj(GSS_S_COMPLETE)p Fp(:)36 b(Indicates)29 b(successful)f(completion,)j(and)c(that)i(output)g (parameters)f(holds)390 3050 y(correct)k(information.)390 3181 y Fj(GSS_S_FAILURE)p Fp(:)59 b(Indicates)42 b(that)g (encapsulation)g(failed)g(for)f(reasons)h(unsp)s(eci\014ed)e(at)i(the) 390 3291 y(GSS-API)30 b(lev)m(el.)150 3484 y Fi(gss)p 316 3484 37 5 v 55 w(decapsulate)p 992 3484 V 54 w(tok)m(en)3350 3674 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_decapsulate_token)d Fg(\()p Ff(gss)p 1975 3674 28 4 v 40 w(const)p 2222 3674 V 41 w(bu\013er)p 2494 3674 V 39 w(t)565 3784 y Fe(input_token)12 b Ff(,)34 b(gss)p 1331 3784 V 40 w(const)p 1578 3784 V 40 w(OID)d Fe(token_oid)12 b Ff(,)32 b(gss)p 2476 3784 V 41 w(bu\013er)p 2748 3784 V 39 w(t)e Fe(output_token)12 b Fg(\))390 3894 y Ff(input)p 609 3894 V 39 w(tok)m(en)p Fp(:)42 b(\(bu\013er,)30 b(opaque,)h(read\)) f(Bu\013er)h(with)f(GSS-API)g(con)m(text)i(tok)m(en.)390 4025 y Ff(tok)m(en)p 612 4025 V 41 w(oid)t Fp(:)41 b(\(Ob)5 b(ject)30 b(ID,)h(read\))g(Exp)s(ected)f(ob)5 b(ject)31 b(iden)m(ti\014er)g(of)g(tok)m(en.)390 4157 y Ff(output)p 664 4157 V 40 w(tok)m(en)p Fp(:)42 b(\(bu\013er,)30 b(opaque,)h(mo)s (dify\))f(Decapsulated)i(tok)m(en)f(data;)h(caller)f(m)m(ust)g(release) 390 4266 y(with)f(gss)p 720 4266 V 40 w(release)p 1022 4266 V 42 w(bu\013er\(\).)390 4398 y(Remo)m(v)m(e)37 b(the)f(mec)m(hanism-indep)s(enden)m(t)f(tok)m(en)h(header)f(from)g(an) h(initial)g(GSS-API)f(con)m(text)390 4507 y(tok)m(en.)71 b(Un)m(wrap)40 b(a)h(bu\013er)e(in)h(the)g(mec)m(hanism-indep)s(enden)m (t)g(tok)m(en)h(format.)71 b(This)39 b(is)i(the)390 4617 y(rev)m(erse)34 b(of)g(gss)p 927 4617 V 40 w(encapsulate)p 1426 4617 V 41 w(tok)m(en\(\).)52 b(The)33 b(translation)h(is)g (loss-less,)h(all)g(data)f(is)f(preserv)m(ed)390 4726 y(as)e(is.)40 b(This)30 b(function)g(is)g(standardized)h(in)f(RF)m(C)g (6339.)390 4858 y(Return)g(v)-5 b(alue:)390 4989 y Fj(GSS_S_COMPLETE)p Fp(:)36 b(Indicates)29 b(successful)f(completion,)j(and)c(that)i (output)g(parameters)f(holds)390 5099 y(correct)k(information.)390 5230 y Fj(GSS_S_DEFECTIVE_TOKEN)p Fp(:)j(Means)c(that)g(the)g(tok)m(en) g(failed)g(consistency)h(c)m(hec)m(ks)g(\(e.g.,)g(OID)390 5340 y(mismatc)m(h)f(or)f(ASN.1)h(DER)g(length)g(errors\).)p eop end %%Page: 55 59 TeXDict begin 55 58 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(55)390 299 y Fj(GSS_S_FAILURE)p Fp(:)59 b(Indicates)42 b(that)g(decapsulation)g(failed)g(for)f(reasons) h(unsp)s(eci\014ed)e(at)i(the)390 408 y(GSS-API)30 b(lev)m(el.)150 616 y Fi(gss)p 316 616 37 5 v 55 w(oid)p 534 616 V 55 w(equal)3350 821 y Fp([F)-8 b(unction])-3599 b Fh(int)53 b(gss_oid_equal)d Fg(\()p Ff(gss)p 1243 821 28 4 v 40 w(const)p 1490 821 V 41 w(OID)30 b Fe(first_oid)12 b Ff(,)33 b(gss)p 2389 821 V 40 w(const)p 2636 821 V 41 w(OID)565 930 y Fe(second_oid)12 b Fg(\))390 1040 y Ff(\014rst)p 554 1040 V 39 w(oid)t Fp(:)41 b(\(Ob)5 b(ject)31 b(ID,)f(read\))h (First)g(Ob)5 b(ject)30 b(iden)m(ti\014er.)390 1183 y Ff(second)p 659 1183 V 40 w(oid)t Fp(:)41 b(\(Ob)5 b(ject)30 b(ID,)h(read\))g(First)g(Ob)5 b(ject)30 b(iden)m(ti\014er.)390 1325 y(Compare)43 b(t)m(w)m(o)h(OIDs)f(for)g(equalit)m(y)-8 b(.)80 b(The)43 b(comparison)g(is)g Fj(")p Fp(deep)p Fj(")p Fp(,)i(i.e.,)j(the)43 b(actual)h(b)m(yte)390 1435 y(sequences)23 b(of)g(the)g(OIDs)g(are)g(compared)g(instead)g(of)h (just)e(the)h(p)s(oin)m(ter)g(equalit)m(y)-8 b(.)40 b(This)22 b(function)390 1545 y(is)30 b(standardized)h(in)f(RF)m(C)g(6339.)390 1687 y(Return)35 b(v)-5 b(alue:)52 b(Returns)35 b(b)s(o)s(olean)h(v)-5 b(alue)37 b(true)e(when)g(the)h(t)m(w)m(o)i(OIDs)d(are)h(equal,)j (otherwise)390 1797 y(false.)150 2042 y Fo(3.10)68 b(SASL)44 b(GS2)g(Routines)150 2266 y Fi(gss)p 316 2266 37 5 v 55 w(inquire)p 746 2266 V 55 w(mec)m(h)p 1079 2266 V 53 w(for)p 1280 2266 V 55 w(saslname)3350 2471 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_mech_for_s)q(asl)q (nam)q(e)c Fg(\()p Ff(OM)p 2430 2471 28 4 v 41 w(uin)m(t32)31 b(*)565 2580 y Fe(minor_status)12 b Ff(,)34 b(const)d(gss)p 1621 2580 V 40 w(bu\013er)p 1892 2580 V 39 w(t)g Fe(sasl_mech_name)12 b Ff(,)34 b(gss)p 2913 2580 V 40 w(OID)c(*)h Fe(mech_type)12 b Fg(\))390 2690 y Ff(minor)p 629 2690 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 2833 y Ff(sasl)p 538 2833 V 40 w(mec)m(h)p 782 2833 V 41 w(name)5 b Fp(:)39 b(\(bu\013er,)26 b(c)m(haracter-string,)j(read\))d(Bu\013er)g(with)g (SASL)e(mec)m(hanism)j(name.)390 2975 y Ff(mec)m(h)p 600 2975 V 41 w(t)m(yp)s(e)5 b Fp(:)42 b(\(OID,)32 b(mo)s(dify)-8 b(,)31 b(optional\))i(Actual)f(mec)m(hanism)f(used.)43 b(The)30 b(OID)h(returned)f(via)390 3085 y(this)d(parameter)h(will)g(b) s(e)f(a)h(p)s(oin)m(ter)f(to)i(static)g(storage)g(that)f(should)e(b)s (e)h(treated)i(as)e(read-only;)390 3195 y(In)42 b(particular)g(the)h (application)g(should)f(not)g(attempt)i(to)f(free)f(it.)78 b(Sp)s(ecify)41 b(NULL)h(if)h(not)390 3304 y(required.)390 3447 y(Output)98 b(GSS-API)h(mec)m(hanism)h(OID)f(of)g(mec)m(hanism)h (asso)s(ciated)h(with)e(giv)m(en)390 3556 y Fj(@)p Fp(sasl)p 586 3556 V 40 w(mec)m(h)p 830 3556 V 41 w(name.)390 3699 y(Returns:)390 3842 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 3985 y Fj(GSS_S_BAD_MECH)p Fp(:)37 b(There)30 b(is)g(no)g(GSS-API)g(mec)m(hanism)h(kno)m(wn)f(as)g Fj(@)p Fp(sasl)p 3063 3985 V 41 w(mec)m(h)p 3308 3985 V 40 w(name.)150 4192 y Fi(gss)p 316 4192 37 5 v 55 w(inquire)p 746 4192 V 55 w(saslname)p 1277 4192 V 54 w(for)p 1479 4192 V 55 w(mec)m(h)3350 4397 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_saslname_f)q(or_)q(mec)q(h)c Fg(\()p Ff(OM)p 2430 4397 28 4 v 41 w(uin)m(t32)31 b(*)565 4507 y Fe(minor_status)12 b Ff(,)34 b(const)d(gss)p 1621 4507 V 40 w(OID)f Fe(desired_mech)12 b Ff(,)34 b(gss)p 2676 4507 V 40 w(bu\013er)p 2947 4507 V 39 w(t)565 4616 y Fe(sasl_mech_name)12 b Ff(,)34 b(gss)p 1487 4616 V 41 w(bu\013er)p 1759 4616 V 39 w(t)c Fe(mech_name)12 b Ff(,)33 b(gss)p 2518 4616 V 40 w(bu\013er)p 2789 4616 V 39 w(t)565 4726 y Fe(mech_description)12 b Fg(\))390 4835 y Ff(minor)p 629 4835 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 4978 y Ff(desired)p 675 4978 V 40 w(mec)m(h)p Fp(:)41 b(\(OID,)31 b(read\))f(Iden)m(ti\014es)h(the)f(GSS-API)g(mec)m(hanism)h (to)g(query)-8 b(.)390 5121 y Ff(sasl)p 538 5121 V 40 w(mec)m(h)p 782 5121 V 41 w(name)5 b Fp(:)46 b(\(bu\013er,)34 b(c)m(haracter-string,)i(mo)s(dify)-8 b(,)33 b(optional\))i(Bu\013er)e (to)h(receiv)m(e)h(SASL)390 5230 y(mec)m(hanism)c(name.)40 b(The)30 b(application)i(m)m(ust)e(free)h(storage)h(asso)s(ciated)g (with)e(this)g(name)g(after)390 5340 y(use)g(with)g(a)h(call)h(to)f (gss)p 1231 5340 V 40 w(release)p 1533 5340 V 41 w(bu\013er\(\).)p eop end %%Page: 56 60 TeXDict begin 56 59 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(56)390 299 y Ff(mec)m(h)p 600 299 28 4 v 41 w(name)5 b Fp(:)36 b(\(bu\013er,)23 b(c)m(haracter-string,)j(mo)s(dify)-8 b(,)23 b(optional\))h(Bu\013er)d (to)i(receiv)m(e)h(h)m(uman)d(read-)390 408 y(able)33 b(mec)m(hanism)f(name.)46 b(The)32 b(application)h(m)m(ust)f(free)h (storage)g(asso)s(ciated)h(with)e(this)g(name)390 518 y(after)f(use)f(with)g(a)h(call)g(to)h(gss)p 1446 518 V 40 w(release)p 1748 518 V 41 w(bu\013er\(\).)390 653 y Ff(mec)m(h)p 600 653 V 41 w(description)p Fp(:)60 b(\(bu\013er,)42 b(c)m(haracter-string,)j(mo)s(dify)-8 b(,)43 b(optional\))f(Bu\013er)e (to)h(receiv)m(e)h(de-)390 762 y(scription)29 b(of)f(mec)m(hanism.)40 b(The)28 b(application)i(m)m(ust)e(free)h(storage)h(asso)s(ciated)g (with)e(this)g(name)390 872 y(after)j(use)f(with)g(a)h(call)g(to)h(gss) p 1446 872 V 40 w(release)p 1748 872 V 41 w(bu\013er\(\).)390 1006 y(Output)25 b(the)i(SASL)f(mec)m(hanism)g(name)h(of)g(a)g(GSS-API) f(mec)m(hanism.)39 b(It)27 b(also)h(returns)d(a)i(name)390 1116 y(and)j(description)g(of)h(the)f(mec)m(hanism)h(in)f(a)h(user)e (friendly)h(form.)390 1250 y(Returns:)390 1385 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1519 y Fj(GSS_S_BAD_MECH)p Fp(:)37 b(The)30 b Fj(@)p Fp(desired)p 1644 1519 V 39 w(mec)m(h)h(OID)f(is)h(unsupp)s(orted.)p eop end %%Page: 57 61 TeXDict begin 57 60 bop 150 -116 a Fp(Chapter)30 b(4:)41 b(Extended)30 b(GSS)f(API)2271 b(57)150 299 y Fm(4)80 b(Extended)52 b(GSS)h(API)150 533 y Fp(None)38 b(of)g(the)h(follo)m (wing)g(functions)e(are)i(standard)e(GSS)g(API)h(functions.)63 b(As)38 b(suc)m(h,)h(they)f(are)h(not)150 643 y(declared)c(in)f(`)p Fj(gss/api.h)p Fp(',)f(but)h(rather)g(in)g(`)p Fj(gss/ext.h)p Fp(')e(\(whic)m(h)j(is)f(included)g(from)g(`)p Fj(gss.h)p Fp('\).)52 b(See)150 752 y(Section)31 b(2.1)h([Header],)f(page)g(7.)150 951 y Fi(gss)p 316 951 37 5 v 55 w(c)m(hec)m(k)p 664 951 V 52 w(v)m(ersion)3350 1148 y Fp([F)-8 b(unction])-3599 b Fh(const)54 b(char)f(*)g(gss_check_version)e Fg(\()p Ff(const)31 b(c)m(har)g(*)f Fe(req_version)12 b Fg(\))390 1258 y Ff(req)p 520 1258 28 4 v 40 w(v)m(ersion)p Fp(:)41 b(v)m(ersion)31 b(string)f(to)h(compare)g(with,)g(or)f(NULL)390 1392 y(Chec)m(k)42 b(that)g(the)g(v)m(ersion)g(of)f(the)h(library)f(is) g(at)i(minim)m(um)d(the)i(one)g(giv)m(en)g(as)g(a)g(string)f(in)390 1502 y Fj(@)p Fp(req)p 568 1502 V 40 w(v)m(ersion.)390 1636 y(Return)32 b(v)-5 b(alue:)45 b(The)31 b(actual)j(v)m(ersion)f (string)f(of)h(the)f(library;)h(NULL)g(if)f(the)g(condition)h(is)g(not) 390 1746 y(met.)41 b(If)30 b(NULL)g(is)g(passed)g(to)h(this)f(function) g(no)g(c)m(hec)m(k)i(is)e(done)g(and)g(only)g(the)g(v)m(ersion)h (string)390 1856 y(is)f(returned.)150 2055 y Fi(gss)p 316 2055 37 5 v 55 w(userok)3350 2252 y Fp([F)-8 b(unction])-3599 b Fh(int)53 b(gss_userok)c Fg(\()p Ff(const)31 b(gss)p 1324 2252 28 4 v 40 w(name)p 1576 2252 V 40 w(t)g Fe(name)12 b Ff(,)31 b(const)g(c)m(har)g(*)g Fe(username)12 b Fg(\))390 2361 y Ff(name)5 b Fp(:)41 b(\(gss)p 831 2361 V 40 w(name)p 1083 2361 V 41 w(t,)30 b(read\))h(Name)g(to)g(b)s(e)f(compared.)390 2496 y Ff(username)5 b Fp(:)40 b(Zero)31 b(terminated)f(string)h(with)f (username.)390 2630 y(Compare)22 b(the)g(username)f(against)j(the)e (output)f(from)h(gss)p 2388 2630 V 40 w(exp)s(ort)p 2686 2630 V 40 w(name\(\))h(in)m(v)m(ok)m(ed)g(on)f Fj(@)p Fp(name,)390 2740 y(after)40 b(remo)m(ving)f(the)h(leading)f(OID.)h (This)e(answ)m(ers)h(the)g(question)g(whether)f(the)i(particular)390 2849 y(mec)m(hanism)31 b(w)m(ould)f(authen)m(ticate)j(them)d(as)g(the)h (same)g(principal)390 2984 y(Return)f(v)-5 b(alue:)41 b(Returns)29 b(0)i(if)f(the)h(names)f(matc)m(h,)i(non-0)e(otherwise.)p eop end %%Page: 58 62 TeXDict begin 58 61 bop 150 -116 a Fp(Chapter)30 b(5:)41 b(In)m(v)m(oking)31 b(gss)2556 b(58)150 299 y Fm(5)80 b(In)l(v)l(oking)52 b(gss)150 764 y(Name)150 998 y Fp(GNU)31 b(GSS)f(\(gss\))h({)g(Command)e(line)i(in)m(terface)h(to)f(the)f(GSS)g (Library)-8 b(.)150 1363 y Fm(Description)150 1597 y Fj(gss)29 b Fp(is)i(the)f(main)h(program)f(of)g(GNU)h(GSS.)275 1732 y(Mandatory)25 b(or)g(optional)h(argumen)m(ts)f(to)h(long)f (options)h(are)f(also)h(mandatory)f(or)g(optional)h(for)f(an)m(y)150 1841 y(corresp)s(onding)k(short)h(options.)150 2207 y Fm(Commands)150 2441 y Fj(gss)f Fp(recognizes)k(these)d(commands:)245 2575 y Fj(-l,)47 b(--list-mechanisms)1105 2685 y(List)f(information)f (about)h(supported)g(mechanisms)1105 2795 y(in)h(a)g(human)g(readable)e (format.)245 3014 y(-m,)i(--major=LONG)93 b(Describe)45 b(a)j(`major)e(status')f(error)i(code)f(value.)150 3379 y Fm(Other)29 b(Options)150 3613 y Fp(These)h(are)h(some)g(standard)e (parameters.)245 3748 y Fj(-h,)47 b(--help)381 b(Print)46 b(help)h(and)f(exit)245 3857 y(-V,)h(--version)237 b(Print)46 b(version)g(and)h(exit)245 3967 y(-q,)g(--quiet)333 b(Silent)46 b(operation)93 b(\(default=off\))150 4332 y Fm(Examples)245 4566 y Fj(-h,)47 b(--help)381 b(Print)46 b(help)h(and)f(exit)245 4676 y(-V,)h(--version)237 b(Print)46 b(version)g(and)h(exit)245 4785 y(-q,)g(--quiet)333 b(Silent)46 b(operation)93 b(\(default=off\))p eop end %%Page: 59 63 TeXDict begin 59 62 bop 150 -116 a Fp(Chapter)30 b(6:)41 b(Ac)m(kno)m(wledgemen)m(ts)2296 b(59)150 299 y Fm(6)80 b(Ac)l(kno)l(wledgemen)l(ts)150 533 y Fp(This)29 b(man)m(ual)h(b)s (orro)m(ws)f(text)i(from)e(RF)m(C)h(2743)i(and)d(RF)m(C)h(2744)i(that)e (describ)s(e)f(GSS)g(API)h(formally)-8 b(.)p eop end %%Page: 60 64 TeXDict begin 60 63 bop 150 -116 a Fp(App)s(endix)29 b(A:)h(Criticism)h(of)g(GSS)2297 b(60)150 299 y Fm(App)t(endix)52 b(A)81 b(Criticism)52 b(of)i(GSS)150 551 y Fp(The)31 b(author)g(has)h(doubts)e(whether)h(GSS)g(is)g(the)h(b)s(est)f (solution)h(for)g(free)f(soft)m(w)m(are)i(pro)5 b(jects)32 b(lo)s(oking)150 661 y(for)c(a)g(implemen)m(tation)i(agnostic)g (securit)m(y)e(framew)m(ork.)40 b(W)-8 b(e)30 b(express)d(these)i (doubts)e(in)h(this)g(section,)150 770 y(so)42 b(that)g(the)g(reader)f (can)h(judge)g(for)f(herself)g(if)h(an)m(y)g(of)g(the)f(p)s(oten)m (tial)i(problems)e(discussed)g(here)150 880 y(are)34 b(relev)-5 b(an)m(t)36 b(for)d(their)h(pro)5 b(ject,)36 b(or)e(if)g(the)g(b)s(ene\014t)f(out)m(w)m(eigh)j(the)e(problems.)50 b(W)-8 b(e)36 b(are)e(a)m(w)m(are)h(that)150 990 y(some)29 b(of)g(the)g(opinions)g(are)g(highly)f(sub)5 b(jectiv)m(e,)31 b(but)d(w)m(e)h(o\013er)g(them)g(in)f(the)h(hop)s(e)f(they)h(can)g (serv)m(e)h(as)150 1099 y(anecdotal)i(evidence.)275 1240 y(GSS)d(can)i(b)s(e)f(criticized)i(on)e(sev)m(eral)i(lev)m(els.)42 b(W)-8 b(e)32 b(start)f(with)f(the)g(actual)i(implemen)m(tation.)275 1380 y(GSS)j(do)s(es)g(not)h(app)s(ear)f(to)i(b)s(e)e(designed)g(b)m(y) h(exp)s(erienced)g(C)f(programmers.)56 b(While)37 b(generally)150 1490 y(this)c(ma)m(y)i(b)s(e)e(a)h(go)s(o)s(d)f(thing)h(\(C)f(is)h(not) g(the)f(b)s(est)h(language\),)i(but)d(since)h(they)g(de\014ned)e(the)i (API)f(in)150 1600 y(C,)k(it)h(is)f(unfortunate.)61 b(The)37 b(primary)f(evidence)i(of)g(this)f(is)g(the)h(ma)5 b(jor)p 2746 1600 28 4 v 40 w(status)37 b(and)g(minor)p 3478 1600 V 40 w(status)150 1709 y(error)c(co)s(de)h(solution.)50 b(It)34 b(is)f(a)h(complicated)h(w)m(a)m(y)g(to)f(describ)s(e)f(error)g (conditions,)i(but)e(what)g(mak)m(es)150 1819 y(matters)27 b(w)m(orse,)h(the)f(error)f(condition)h(is)f(separated;)j(half)d(of)h (the)g(error)f(condition)h(is)f(in)h(the)f(function)150 1928 y(return)32 b(v)-5 b(alue)34 b(and)f(the)g(other)h(half)f(is)h(in) f(the)g(\014rst)g(argumen)m(t)h(to)g(the)f(function,)h(whic)m(h)f(is)h (alw)m(a)m(ys)h(a)150 2038 y(p)s(oin)m(ter)25 b(to)h(an)e(in)m(teger.) 41 b(\(The)24 b(p)s(oin)m(ter)h(is)g(not)g(ev)m(en)h(allo)m(w)m(ed)h (to)f(b)s(e)e Fj(NULL)p Fp(,)h(if)g(the)g(application)h(do)s(esn't)150 2148 y(care)32 b(ab)s(out)g(the)f(minor)g(error)h(co)s(de.\))44 b(This)31 b(mak)m(es)h(the)g(API)g(unreadable,)f(and)g(di\016cult)h(to) g(use.)44 b(A)150 2257 y(b)s(etter)26 b(solutions)g(w)m(ould)f(b)s(e)g (to)i(return)d(a)i(struct)g(con)m(taining)h(the)f(en)m(tire)h(error)e (condition,)i(whic)m(h)f(can)150 2367 y(b)s(e)32 b(accessed)h(using)f (macros,)i(although)f(w)m(e)g(ac)m(kno)m(wledge)h(that)f(the)g(C)f (language)i(used)d(at)j(the)e(time)150 2476 y(GSS)f(w)m(as)h(designed)f (ma)m(y)h(not)g(ha)m(v)m(e)h(allo)m(w)m(ed)g(this)e(\(this)h(ma)m(y)g (in)f(fact)i(b)s(e)e(the)g(reason)h(the)g(a)m(wkw)m(ard)150 2586 y(solution)26 b(w)m(as)g(c)m(hosen\).)40 b(Instead,)27 b(the)f(return)f(v)-5 b(alue)26 b(could)g(ha)m(v)m(e)g(b)s(een)f (passed)h(bac)m(k)g(to)h(callers)f(using)150 2695 y(a)35 b(p)s(oin)m(ter)f(to)g(a)h(struct,)g(accessible)h(using)e(v)-5 b(arious)34 b(macros,)i(and)d(the)i(function)e(could)h(ha)m(v)m(e)i(a)e (v)m(oid)150 2805 y(protot)m(yp)s(e.)66 b(The)39 b(fact)g(that)h(minor) p 1455 2805 V 39 w(status)f(is)g(placed)g(\014rst)f(in)h(the)g (parameter)g(list)g(increases)h(the)150 2915 y(pain)32 b(it)h(is)f(to)i(use)e(the)g(API.)h(Imp)s(ortan)m(t)f(parameters)h (should)e(b)s(e)h(placed)h(\014rst.)46 b(A)32 b(b)s(etter)h(place)g (for)150 3024 y(minor)p 389 3024 V 40 w(status)d(\(if)h(it)g(m)m(ust)f (b)s(e)g(presen)m(t)g(at)h(all\))h(w)m(ould)e(ha)m(v)m(e)i(b)s(een)d (last)j(in)e(the)g(protot)m(yp)s(es.)275 3165 y(Another)j(evidence)h (of)g(the)g(C)f(inexp)s(erience)h(are)g(the)g(memory)f(managemen)m(t)i (issues;)g(GSS)e(pro-)150 3274 y(vides)23 b(functions)g(to)g(deallo)s (cate)j(data)e(stored)f(within,)h(e.g.,)i Fj(gss_buffer_t)20 b Fp(but)i(the)h(caller)i(is)e(resp)s(on-)150 3384 y(sible)32 b(of)h(deallo)s(cating)h(the)e(structure)g(p)s(oin)m(ted)g(at)h(b)m(y)f (the)g Fj(gss_buffer_t)d Fp(\(i.e.,)34 b(the)e Fj(gss_buffer_)150 3494 y(desc)p Fp(\))g(itself.)50 b(Memory)33 b(managemen)m(t)h(issues)f (are)h(error)e(prone,)h(and)g(this)g(division)g(easily)h(leads)f(to)150 3603 y(memory)e(leaks)i(\(or)f(w)m(orse\).)45 b(Instead,)32 b(the)g(API)f(should)g(b)s(e)g(the)h(sole)g(o)m(wner)g(of)g(all)g Fj(gss_ctx_id_t)p Fp(,)150 3713 y Fj(gss_cred_id_t)p Fp(,)22 b(and)i Fj(gss_buffer_t)c Fp(structures:)37 b(they)25 b(should)e(b)s(e)g(allo)s(cated)j(b)m(y)f(the)f(library)-8 b(,)26 b(and)150 3822 y(deallo)s(cated)32 b(\(using)f(the)f(utilit)m(y) i(functions)e(de\014ned)f(for)h(this)g(purp)s(ose\))f(b)m(y)i(the)f (library)-8 b(.)275 3963 y(TBA:)31 b(sp)s(eci\014cation)g(is)g(unclear) g(ho)m(w)g(memory)f(for)h(OIDs)g(are)g(managed.)42 b(F)-8 b(or)32 b(example,)g(who)e(is)150 4073 y(resp)s(onsible)36 b(for)g(deallo)s(cate)j(p)s(oten)m(tially)g(newly)d(allo)s(cated)j (OIDs)d(returned)g(as)h Fj(actual_mechs)c Fp(in)150 4182 y Fj(gss_acquire_cred)p Fp(?)47 b(F)-8 b(urther,)35 b(are)g(OIDs)f (deeply)g(copied)h(in)m(to)g(OID)f(sets?)52 b(In)34 b(other)g(w)m (ords,)h(if)f(I)150 4292 y(add)29 b(an)g(OID)h(in)m(to)g(an)g(OID)f (set,)i(and)d(mo)s(dify)h(the)h(original)h(OID,)e(will)h(the)g(OID)f (in)g(the)h(OID)g(set)g(b)s(e)150 4401 y(mo)s(di\014ed)f(to)s(o?)275 4542 y(Another)40 b(illustrating)h(example)g(is)f(the)h(sample)f(GSS)g (header)g(\014le)h(giv)m(en)g(in)f(the)g(RF)m(C,)h(whic)m(h)150 4651 y(con)m(tains:)390 4792 y Fj(/*)438 4902 y(*)47 b(We)g(have)g(included)f(the)g(xom.h)h(header)f(file.)94 b(Verify)46 b(that)h(OM_uint32)438 5011 y(*)g(is)g(defined)f (correctly.)438 5121 y(*/)390 5230 y(#if)h(sizeof\(gss_uint32\))c(!=)k (sizeof\(OM_uint32\))390 5340 y(#error)f(Incompatible)f(definition)g (of)i(OM_uint32)e(from)i(xom.h)p eop end %%Page: 61 65 TeXDict begin 61 64 bop 150 -116 a Fp(App)s(endix)29 b(A:)h(Criticism)h(of)g(GSS)2297 b(61)390 299 y Fj(#endif)275 433 y Fp(The)36 b(C)h(pre-pro)s(cessor)g(do)s(es)g(not)g(kno)m(w)g(ab)s (out)g(the)h Fj(sizeof)d Fp(function,)k(so)e(it)h(is)f(treated)i(as)e (an)150 543 y(iden)m(ti\014er,)28 b(whic)m(h)f(maps)f(to)i(0.)40 b(Th)m(us,)27 b(the)g(expression)g(do)s(es)f(not)h(c)m(hec)m(k)i(that)e (the)h(size)f(of)g Fj(OM_uint32)150 653 y Fp(is)j(correct.)42 b(It)31 b(c)m(hec)m(ks)h(whether)d(the)i(expression)f Fj(0)g(!=)g(0)g Fp(holds.)275 787 y(TBA:)g(thread)g(issues)275 922 y(TBA:)g(m)m(ultiple)h(mec)m(hanisms)g(in)f(a)h(GSS)e(library)275 1056 y(TBA:)h(high-lev)m(el)i(design)f(criticism.)275 1191 y(TBA:)f(no)h(creden)m(tial)h(forw)m(arding.)275 1325 y(TBA:)e(in)m(ternationalization)275 1460 y(TBA:)60 b(dynamically)g(generated)h(OIDs)f(and)f(memory)h(deallo)s(cation)i (issue.)129 b(I.e.,)68 b(should)150 1569 y(gss)p 273 1569 28 4 v 40 w(imp)s(ort)p 584 1569 V 40 w(name)36 b(or)g(gss)p 1106 1569 V 40 w(duplicate)p 1509 1569 V 41 w(name)g(allo)s(cate)j(memory)d(and)f(cop)m(y)i(the)f(OID)g(pro)m (vided,)i(or)150 1679 y(simply)32 b(cop)m(y)h(the)f(p)s(oin)m(ter?)47 b(If)31 b(the)i(former,)f(who)g(w)m(ould)g(deallo)s(cate)j(that)e (memory?)46 b(If)32 b(the)g(latter,)150 1788 y(the)f(application)g(ma)m (y)g(deallo)s(cate)i(or)d(mo)s(dify)g(the)g(OID,)h(whic)m(h)f(seem)h (un)m(w)m(an)m(ted.)275 1923 y(TBA:)f(krb5:)41 b(no)30 b(w)m(a)m(y)h(to)g(access)h(authorization-data)275 2057 y(TBA:)e(krb5:)41 b(\014rew)m(all/pre-IP:)31 b(iak)m(erb)g(status?)275 2192 y(TBA:)f(krb5:)41 b(single-DES)31 b(only)275 2326 y(TBA:)36 b(the)f(API)h(ma)m(y)g(blo)s(c)m(k,)i(un)m(usable)d(in)g (select\(\))j(based)d(serv)m(ers.)57 b(Esp)s(ecially)36 b(if)g(the)g(serv)m(ers)150 2436 y(con)m(tacted)d(is)d(decided)g(b)m(y) h(the,)f(y)m(et)i(unauthen)m(ticated,)f(remote)h(clien)m(t.)275 2570 y(TBA:)48 b(krb5:)75 b(no)48 b(supp)s(ort)e(for)i(GSS)p 1660 2570 V 39 w(C)p 1765 2570 V 40 w(PR)m(OT)p 2068 2570 V 40 w(READ)m(Y)p 2439 2570 V 41 w(FLA)m(G.)h(W)-8 b(e)49 b(supp)s(ort)d(it)j(an)m(yw)m(a)m(y)-8 b(,)150 2680 y(though.)275 2814 y(TBA:)33 b(krb5:)45 b(gssapi-cfx)34 b(di\013er)f(from)f(rfc)h(1964)i(in)e(the)g(reply)f(tok)m(en)i(in)f (that)h(the)f(latter)h(require)150 2924 y(presence)c(of)h(sequence)g(n) m(um)m(b)s(ers)e(whereas)h(the)g(former)g(do)s(esn't.)275 3059 y(Finally)38 b(w)m(e)h(note)f(that)g(few)g(free)g(securit)m(y)g (applications)h(uses)f(GSS,)f(p)s(erhaps)f(the)i(only)g(ma)5 b(jor)150 3168 y(exception)33 b(to)f(this)f(are)h(Kerb)s(eros)e(5)i (implemen)m(tations.)46 b(While)32 b(not)g(substan)m(tial)g(evidence,)h (this)e(do)150 3278 y(suggest)i(that)f(the)h(GSS)e(ma)m(y)h(not)h(b)s (e)e(the)h(simplest)g(solution)h(a)m(v)-5 b(ailable)34 b(to)f(solv)m(e)g(actual)g(problems,)150 3387 y(since)g(otherwise)g (more)f(pro)5 b(jects)33 b(w)m(ould)f(ha)m(v)m(e)i(c)m(hosen)f(to)g (tak)m(e)h(adv)-5 b(an)m(tage)34 b(of)f(the)g(w)m(ork)f(that)h(w)m(en)m (t)150 3497 y(in)m(to)e(GSS)f(instead)h(of)f(using)g(another)h(framew)m (ork)f(\(or)h(designing)f(their)h(o)m(wn)f(solution\).)275 3631 y(Our)i(conclusion)i(is)g(that)g(free)g(soft)m(w)m(are)i(pro)5 b(jects)34 b(that)g(are)g(lo)s(oking)h(for)e(a)h(securit)m(y)h(framew)m (ork)150 3741 y(should)42 b(ev)-5 b(aluate)44 b(carefully)f(whether)f (GSS)f(actually)k(is)d(the)h(b)s(est)f(solution)h(b)s(efore)f(using)g (it.)78 b(In)150 3851 y(particular)27 b(it)g(is)g(recommended)f(to)i (compare)f(GSS)f(with)h(the)f(Simple)h(Authen)m(tication)h(and)f (Securit)m(y)150 3960 y(La)m(y)m(er)g(\(SASL\))e(framew)m(ork,)i(whic)m (h)f(in)f(sev)m(eral)i(situations)g(pro)m(vide)f(the)g(same)g(feature)g (as)g(GSS)f(do)s(es.)150 4070 y(The)43 b(most)g(comp)s(elling)h (argumen)m(t)g(for)e(SASL)h(o)m(v)m(er)h(GSS)e(is,)47 b(as)c(its)h(acron)m(ym)g(suggest,)j(Simple,)150 4179 y(whereas)30 b(GSS)g(is)g(far)g(from)g(it.)275 4314 y(Ho)m(w)m(ev)m (er,)35 b(that)f(said,)f(for)g(free)g(soft)m(w)m(are)h(pro)5 b(jects)33 b(that)h(w)m(an)m(ts)f(to)h(supp)s(ort)d(Kerb)s(eros)h(5,)i (w)m(e)f(do)150 4423 y(ac)m(kno)m(wledge)e(that)e(no)f(other)h(framew)m (ork)f(pro)m(vides)h(a)g(more)f(p)s(ortable)g(and)g(in)m(terop)s (erable)h(in)m(terface)150 4533 y(in)m(to)41 b(the)f(Kerb)s(eros)f(5)h (system.)69 b(If)39 b(y)m(our)h(pro)5 b(ject)41 b(needs)e(to)i(use)e (Kerb)s(eros)g(5)h(sp)s(eci\014cally)-8 b(,)44 b(w)m(e)c(do)150 4643 y(recommend)30 b(y)m(ou)h(to)g(use)f(GSS)g(instead)g(of)h(the)f (Kerb)s(eros)g(5)h(implemen)m(tation)h(sp)s(eci\014c)e(APIs.)p eop end %%Page: 62 66 TeXDict begin 62 65 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(62)150 299 y Fm(App)t(endix)52 b(B)81 b(Cop)l(ying)52 b(Information)150 617 y Fo(B.1)67 b(GNU)46 b(F)-11 b(ree)44 b(Do)t(cumen)l(tation)j(License)1359 754 y Fp(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 886 y(Cop)m(yrigh)m(t)842 883 y(c)817 886 y Fn(\015)e Fp(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 995 y Fj(http://fsf.org/)390 1214 y Fp(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f (to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 1324 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f (is)f(not)h(allo)m(w)m(ed.)199 1456 y(0.)61 b(PREAMBLE)330 1588 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g (a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1698 y(useful)29 b(do)s(cumen)m(t)h Ff(free)36 b Fp(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1808 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1917 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 2027 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 2136 y(made)30 b(b)m(y)h(others.)330 2268 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2378 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2488 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2620 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2729 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2839 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2948 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 3058 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 3168 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3300 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3432 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3541 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3651 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3761 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3870 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3980 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 4089 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 4222 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4331 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4441 y(another)31 b(language.)330 4573 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4682 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4792 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4902 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 5011 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 5121 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 5230 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5340 y(them.)p eop end %%Page: 63 67 TeXDict begin 63 66 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(63)330 299 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g (Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 408 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)330 518 y(under)f(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 628 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) e(In)m(v)-5 b(arian)m(t)330 737 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) -5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 878 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 988 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f (Do)s(cumen)m(t)h(is)f(released)g(under)330 1097 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m (v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 1207 y(b)s(e)k(at)h(most)g(25)g(w) m(ords.)330 1348 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g(the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m (hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1457 y(in)d(a)h(format)g(whose)g(sp)s(eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g(public,)h(that)f(is)g(suitable)g (for)330 1567 y(revising)c(the)g(do)s(cumen)m(t)f(straigh)m(tforw)m (ardly)i(with)e(generic)i(text)g(editors)f(or)f(\(for)h(images)h(com-) 330 1677 y(p)s(osed)23 b(of)h(pixels\))g(generic)h(pain)m(t)f(programs) g(or)f(\(for)h(dra)m(wings\))g(some)g(widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1786 y(editor,)k(and)f(that)g(is)g (suitable)h(for)f(input)f(to)i(text)g(formatters)f(or)g(for)g (automatic)i(translation)f(to)330 1896 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input)g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g(otherwise)330 2005 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g(whose)f(markup,)i(or)e (absence)h(of)g(markup,)g(has)g(b)s(een)f(arranged)g(to)330 2115 y(th)m(w)m(art)27 b(or)g(discourage)g(subsequen)m(t)f(mo)s (di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2225 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g(substan)m(tial)h(amoun) m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g(is)330 2334 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i(\\Opaque".)330 2475 y(Examples)49 b(of)f(suitable)i(formats)f(for)f(T)-8 b(ransparen)m(t)48 b(copies)i(include)e(plain)h(ASCI)s(I)e(without)330 2585 y(markup,)33 b(T)-8 b(exinfo)33 b(input)f(format,)i(LaT)1745 2604 y(E)1795 2585 y(X)f(input)f(format,)j(SGML)d(or)h(XML)h(using)e(a) h(publicly)330 2694 y(a)m(v)-5 b(ailable)36 b(DTD,)e(and)f (standard-conforming)h(simple)f(HTML,)h(P)m(ostScript)g(or)g(PDF)g (designed)330 2804 y(for)h(h)m(uman)g(mo)s(di\014cation.)57 b(Examples)35 b(of)h(transparen)m(t)f(image)i(formats)f(include)f(PNG,) h(X)m(CF)330 2913 y(and)j(JPG.)g(Opaque)g(formats)h(include)f (proprietary)g(formats)h(that)g(can)g(b)s(e)e(read)i(and)f(edited)330 3023 y(only)33 b(b)m(y)g(proprietary)f(w)m(ord)h(pro)s(cessors,)g(SGML) g(or)g(XML)g(for)g(whic)m(h)g(the)g(DTD)g(and/or)g(pro-)330 3133 y(cessing)26 b(to)s(ols)g(are)g(not)f(generally)i(a)m(v)-5 b(ailable,)29 b(and)24 b(the)i(mac)m(hine-generated)h(HTML,)e(P)m (ostScript)330 3242 y(or)30 b(PDF)h(pro)s(duced)e(b)m(y)h(some)h(w)m (ord)f(pro)s(cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330 3383 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m (ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f (follo)m(wing)330 3493 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g (legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h (app)s(ear)f(in)h(the)330 3602 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h (an)m(y)e(title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3712 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s (earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 3821 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 3962 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit) m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330 4072 y(to)c(the)g(public.)330 4213 y(A)f(section)h(\\En)m(titled)g (XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h (whose)e(title)i(either)330 4322 y(is)d(precisely)g(XYZ)g(or)f(con)m (tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f (translates)h(XYZ)e(in)330 4432 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f (men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4542 y(as)i(\\Ac)m(kno)m (wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f (\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4651 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s (dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 4761 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g (de\014nition.)330 4902 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) -8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m (h)e(states)i(that)330 5011 y(this)34 b(License)g(applies)g(to)h(the)f (Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 5121 y(b)s(e)k(included)g(b)m (y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f (disclaiming)i(w)m(arran)m(ties:)330 5230 y(an)m(y)e(other)g (implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 5340 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)p eop end %%Page: 64 68 TeXDict begin 64 67 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(64)199 299 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)330 445 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h(the)g(Do)s(cumen)m(t)h(in)f(an) m(y)g(medium,)h(either)g(commercially)h(or)330 555 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j(and)42 b(the)h(license)330 664 y(notice)37 b(sa)m(ying)g(this)e(License)i(applies)e(to)i(the)f(Do) s(cumen)m(t)g(are)g(repro)s(duced)e(in)i(all)g(copies,)j(and)330 774 y(that)27 b(y)m(ou)g(add)f(no)h(other)f(conditions)h(whatso)s(ev)m (er)h(to)f(those)g(of)g(this)f(License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 883 y(tec)m(hnical)35 b(measures)d(to)i (obstruct)f(or)g(con)m(trol)h(the)f(reading)g(or)g(further)e(cop)m (ying)j(of)f(the)g(copies)330 993 y(y)m(ou)25 b(mak)m(e)g(or)g (distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h (comp)s(ensation)f(in)f(exc)m(hange)j(for)d(copies.)330 1103 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f(n)m(um)m(b)s (er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g(the)f (conditions)330 1212 y(in)e(section)i(3.)330 1358 y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g (conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g (publicly)330 1468 y(displa)m(y)31 b(copies.)199 1614 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1760 y(If)25 b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g (that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 1870 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f (100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 1979 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i (the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 2089 y(these)j(Co)m(v)m (er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 2198 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f (the)h(publisher)330 2308 y(of)k(these)h(copies.)53 b(The)34 b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i (with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2418 y(equally)e (prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g (other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 2527 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) 330 2637 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d (b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 2746 y(resp)s(ects.)330 2892 y(If)32 b(the)h(required)f(texts)i(for)e (either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g (legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 3002 y(the)h(\014rst)f (ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 3112 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3258 y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f (the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 3367 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g (T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) 330 3477 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h (Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d (whic)m(h)330 3587 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e (has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m (ork)330 3696 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g (added)f(material.)67 b(If)330 3806 y(y)m(ou)39 b(use)g(the)g(latter)h (option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e (steps,)k(when)d(y)m(ou)h(b)s(egin)330 3915 y(distribution)f(of)g (Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 4025 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s (cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h (time)330 4134 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i (\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h (of)f(that)330 4244 y(edition)31 b(to)g(the)g(public.)330 4390 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 4500 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s (er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m (vide)g(y)m(ou)330 4609 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4756 y(4.)61 b(MODIFICA)-8 b(TIONS)330 4902 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) e(the)h(conditions)330 5011 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f (V)-8 b(ersion)22 b(under)d(precisely)330 5121 y(this)29 b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f (licensing)330 5230 y(distribution)k(and)h(mo)s(di\014cation)g(of)h (the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s (ossesses)f(a)i(cop)m(y)g(of)330 5340 y(it.)41 b(In)30 b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s (di\014ed)e(V)-8 b(ersion:)p eop end %%Page: 65 69 TeXDict begin 65 68 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(65)357 299 y(A.)60 b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m (ers,)i(if)e(an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the) 510 408 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)510 518 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g (the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) h(title)h(as)510 628 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 758 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h (one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c (for)510 867 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g (Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h (\014v)m(e)510 977 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s (cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g (few)m(er)510 1087 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g (y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1217 y(C.)60 b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g (publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 b(as)f(the)510 1326 y(publisher.)355 1456 y(D.)61 b(Preserv)m(e)31 b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) 363 1587 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i (notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g (other)510 1696 y(cop)m(yrigh)m(t)g(notices.)365 1826 y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g (notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 1936 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g (form)510 2045 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 2176 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f (full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e (required)g(Co)m(v)m(er)510 2285 y(T)-8 b(exts)31 b(giv)m(en)g(in)f (the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2415 y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) 392 2545 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g (\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g (item)510 2655 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d (authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)510 2765 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e (the)g(Do)s(cu-)510 2874 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f (title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s (cumen)m(t)510 2984 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i (then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)37 b(as)510 3093 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 3224 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s (cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m (t)h(for)g(public)e(access)j(to)510 3333 y(a)e(T)-8 b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3443 y(the)g(Do)s(cumen)m (t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3552 y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h (published)510 3662 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e (the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) d(of)i(the)510 3771 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s (ermission.)354 3902 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m (titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k (Preserv)m(e)c(the)g(Title)510 4011 y(of)j(the)f(section,)j(and)d (preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) h(of)f(eac)m(h)i(of)f(the)510 4121 y(con)m(tributor)k(ac)m(kno)m (wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 4251 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f (in)f(their)g(text)i(and)510 4361 y(in)f(their)g(titles.)58 b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 4470 y(section)c(titles.)341 4600 y(M.)61 b(Delete)33 b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 4710 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 4840 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f (to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g (in)510 4950 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 5080 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 5230 y(If)h(the)g(Mo)s(di\014ed)g (V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f (app)s(endices)g(that)h(qualify)330 5340 y(as)28 b(Secondary)g (Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h (Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)p eop end %%Page: 66 70 TeXDict begin 66 69 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(66)330 299 y(y)m(our)32 b(option)h(designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e (in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)330 408 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 518 y(titles)32 b(m)m(ust)e(b)s(e)g (distinct)h(from)e(an)m(y)i(other)g(section)g(titles.)330 650 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section)i(En)m(titled)f (\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g(nothing)g(but) 330 759 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g (statemen)m(ts)i(of)330 869 y(p)s(eer)27 b(review)g(or)g(that)h(the)f (text)i(has)d(b)s(een)h(appro)m(v)m(ed)g(b)m(y)g(an)h(organization)h (as)e(the)h(authoritativ)m(e)330 978 y(de\014nition)i(of)h(a)f (standard.)330 1110 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g (up)e(to)i(\014v)m(e)g(w)m(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er) 30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1219 y(to)g(25)g(w)m(ords)e(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s(di\014ed)330 1329 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f(F)-8 b(ron)m(t-Co)m(v)m (er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1439 y(added)27 b(b)m(y)g(\(or)h(through) f(arrangemen)m(ts)h(made)g(b)m(y\))g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t)g(already)330 1548 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g(same)h(co)m(v)m (er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m(y)g(arrangemen)m (t)330 1658 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m(y)i(y)m(ou)f(are)f (acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g(not)f(add)g (another;)j(but)330 1767 y(y)m(ou)c(ma)m(y)h(replace)g(the)f(old)g (one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e (publisher)f(that)330 1877 y(added)e(the)g(old)h(one.)330 2008 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s (cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s (ermission)330 2118 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g (for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 2228 y(V)-8 b(ersion.)199 2359 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2491 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m (bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h (released)g(under)f(this)g(License,)330 2600 y(under)f(the)h(terms)g (de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f (v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2710 y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s (cumen)m(ts,)330 2819 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g (as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) g(w)m(ork)f(in)h(its)g(license)330 2929 y(notice,)32 b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 3061 y(The)e(com)m(bined)g(w)m (ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) i(and)d(m)m(ultiple)i(iden)m(tical)330 3170 y(In)m(v)-5 b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h (single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m (v)-5 b(arian)m(t)330 3280 y(Sections)27 b(with)g(the)g(same)g(name)g (but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f (eac)m(h)h(suc)m(h)f(section)330 3389 y(unique)33 b(b)m(y)h(adding)f (at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g (the)g(original)h(author)f(or)330 3499 y(publisher)23 b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 3608 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3718 y(w)m(ork.)330 3850 y(In)41 b(the)g(com)m (bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g (En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 3959 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h (En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 4069 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 b(Y)-8 b(ou)330 4178 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m (titled)f(\\Endorsemen)m(ts.")199 4310 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4441 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f (collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g (do)s(cumen)m(ts)f(released)330 4551 y(under)41 b(this)h(License,)k (and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f (the)h(v)-5 b(arious)330 4661 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 b(pro)m(vided)42 b(that)i(y)m(ou)330 4770 y(follo)m(w)38 b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g (of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4880 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h (collection,)i(and)d(distribute)g(it)h(individu-)330 5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g (a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 5340 y(that)d(do)s(cumen)m(t.)p eop end %%Page: 67 71 TeXDict begin 67 70 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(67)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h(W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f(its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep)s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h(on)f(a)g(v)m (olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g(is)h(called) 330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i(resulting)e (from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g(the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m (ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g (aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g (other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h (not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h (Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f (these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f (of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m (er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m (ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h (aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f (in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f (brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h (terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f (sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i (holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f (License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g (License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f (translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f (License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m (ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m (kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m (e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h (Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g (cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i (of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h (particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h (\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g (cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h (terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h (reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d (license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h (reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h (holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g (reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m (ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f (License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g (violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h (of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h (terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g (under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) 330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g (reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f (the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f (an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end %%Page: 68 72 TeXDict begin 68 71 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(68)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g(the)g(GNU)g(F) -8 b(ree)330 543 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to) g(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h (in)g(spirit)330 653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m (y)h(di\013er)f(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i (concerns.)330 762 y(See)c Fj(http://www.gnu.org/copy)o(left)o(/)p Fp(.)330 897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m (en)g(a)g(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g (License)h(\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f (follo)m(wing)i(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m (ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g (b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m (ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f (can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f (License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m (tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g (for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m (table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h (facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g (w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i (edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s (oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m (orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m (ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g (organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e (or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h (as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h (licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h (License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f (part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) 330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j (w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s (er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h (Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g (time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) 330 4005 y(eligible)h(for)e(relicensing.)p eop end %%Page: 69 73 TeXDict begin 69 72 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(69)150 299 y Fo(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f(for)g(y)l(our)g(do)t(cumen)l(ts) 150 458 y Fp(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m (t)g(y)m(ou)f(ha)m(v)m(e)i(written,)g(include)f(a)f(cop)m(y)i(of)f(the) f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g (follo)m(wing)i(cop)m(yrigh)m(t)g(and)e(license)h(notices)g(just)f (after)h(the)g(title)h(page:)468 686 y Fd(Copyright)42 b(\(C\))79 b Fc(year)88 b(your)40 b(name)9 b Fd(.)468 773 y(Permission)42 b(is)e(granted)g(to)g(copy,)h(distribute)g(and/or)g (modify)f(this)g(document)468 860 y(under)h(the)f(terms)g(of)g(the)g (GNU)g(Free)g(Documentation)i(License,)f(Version)g(1.3)468 948 y(or)f(any)g(later)g(version)h(published)h(by)d(the)h(Free)g (Software)h(Foundation;)468 1035 y(with)g(no)e(Invariant)j(Sections,)f (no)f(Front-Cover)h(Texts,)g(and)f(no)f(Back-Cover)468 1122 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f(license)i(is)f(included)h (in)f(the)g(section)g(entitled)h(``GNU)468 1209 y(Free)g(Documentation) h(License''.)275 1350 y Fp(If)d(y)m(ou)h(ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts,)43 b(replace)e(the)150 1459 y(\\with)6 b(.)22 b(.)g(.)12 b(T)-8 b(exts.")31 b(line)g(with)f(this:)547 1578 y Fd(with)40 b(the)g(Invariant)h(Sections)g(being)g Fc(list)f(their)g(titles)9 b Fd(,)41 b(with)547 1665 y(the)f(Front-Cover)i(Texts)e(being)g Fc(list)9 b Fd(,)40 b(and)g(with)g(the)g(Back-Cover)i(Texts)547 1752 y(being)e Fc(list)9 b Fd(.)275 1893 y Fp(If)34 b(y)m(ou)i(ha)m(v)m (e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f(Co)m(v)m(er)h(T)-8 b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g(of)g(the)150 2002 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g(alternativ)m(es)i(to)e (suit)f(the)h(situation.)275 2143 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f (con)m(tains)i(non)m(trivial)g(examples)g(of)f(program)f(co)s(de,)j(w)m (e)e(recommend)g(releasing)150 2253 y(these)44 b(examples)f(in)g (parallel)h(under)e(y)m(our)h(c)m(hoice)i(of)e(free)g(soft)m(w)m(are)h (license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2362 y(General)31 b(Public)f(License,)i(to)f(p)s(ermit)e(their)i(use)f(in)g(free)g(soft)m (w)m(are.)150 2604 y Fo(B.2)67 b(GNU)46 b(General)f(Public)g(License) 1477 2732 y Fp(V)-8 b(ersion)31 b(3,)g(29)g(June)e(2007)390 2873 y(Cop)m(yrigh)m(t)842 2870 y(c)817 2873 y Fn(\015)h Fp(2007)i(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 b(Inc.)e Fj(http://fsf.org/)390 3092 y Fp(Ev)m(ery)m(one)h(is)g(p)s (ermitted)f(to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)g (of)g(this)390 3202 y(license)g(do)s(cumen)m(t,)g(but)e(c)m(hanging)j (it)f(is)f(not)h(allo)m(w)m(ed.)150 3443 y Fo(Pream)l(ble)150 3603 y Fp(The)g(GNU)g(General)h(Public)f(License)h(is)f(a)h(free,)f (cop)m(yleft)i(license)f(for)f(soft)m(w)m(are)i(and)d(other)i(kinds)e (of)150 3712 y(w)m(orks.)275 3853 y(The)d(licenses)i(for)e(most)i(soft) m(w)m(are)g(and)e(other)i(practical)g(w)m(orks)f(are)g(designed)g(to)h (tak)m(e)g(a)m(w)m(a)m(y)h(y)m(our)150 3963 y(freedom)k(to)h(share)e (and)h(c)m(hange)h(the)f(w)m(orks.)51 b(By)35 b(con)m(trast,)h(the)e (GNU)h(General)g(Public)e(License)i(is)150 4072 y(in)m(tended)25 b(to)h(guaran)m(tee)h(y)m(our)e(freedom)g(to)h(share)f(and)f(c)m(hange) j(all)f(v)m(ersions)f(of)h(a)f(program|to)h(mak)m(e)150 4182 y(sure)35 b(it)h(remains)f(free)h(soft)m(w)m(are)h(for)f(all)g (its)g(users.)56 b(W)-8 b(e,)38 b(the)e(F)-8 b(ree)37 b(Soft)m(w)m(are)g(F)-8 b(oundation,)37 b(use)f(the)150 4291 y(GNU)j(General)g(Public)f(License)g(for)g(most)h(of)f(our)f(soft) m(w)m(are;)44 b(it)39 b(applies)f(also)h(to)g(an)m(y)f(other)h(w)m(ork) 150 4401 y(released)31 b(this)f(w)m(a)m(y)i(b)m(y)e(its)h(authors.)40 b(Y)-8 b(ou)31 b(can)g(apply)f(it)h(to)g(y)m(our)f(programs,)g(to)s(o.) 275 4542 y(When)37 b(w)m(e)g(sp)s(eak)g(of)g(free)h(soft)m(w)m(are,)i (w)m(e)e(are)g(referring)e(to)i(freedom,)h(not)f(price.)61 b(Our)36 b(General)150 4651 y(Public)e(Licenses)g(are)h(designed)f(to)h (mak)m(e)g(sure)f(that)g(y)m(ou)h(ha)m(v)m(e)g(the)g(freedom)f(to)g (distribute)g(copies)150 4761 y(of)e(free)f(soft)m(w)m(are)i(\(and)e(c) m(harge)i(for)e(them)h(if)f(y)m(ou)h(wish\),)f(that)h(y)m(ou)g(receiv)m (e)h(source)f(co)s(de)g(or)f(can)h(get)150 4871 y(it)e(if)f(y)m(ou)g(w) m(an)m(t)i(it,)f(that)g(y)m(ou)f(can)h(c)m(hange)g(the)f(soft)m(w)m (are)i(or)e(use)g(pieces)h(of)f(it)h(in)f(new)g(free)g(programs,)150 4980 y(and)h(that)h(y)m(ou)f(kno)m(w)h(y)m(ou)g(can)f(do)g(these)h (things.)275 5121 y(T)-8 b(o)24 b(protect)h(y)m(our)f(righ)m(ts,)i(w)m (e)f(need)f(to)h(prev)m(en)m(t)g(others)f(from)g(den)m(ying)g(y)m(ou)g (these)h(righ)m(ts)f(or)g(asking)150 5230 y(y)m(ou)37 b(to)g(surrender)d(the)j(righ)m(ts.)60 b(Therefore,)38 b(y)m(ou)f(ha)m(v)m(e)g(certain)h(resp)s(onsibilities)e(if)h(y)m(ou)f (distribute)150 5340 y(copies)30 b(of)f(the)g(soft)m(w)m(are,)i(or)e (if)f(y)m(ou)i(mo)s(dify)e(it:)40 b(resp)s(onsibilities)29 b(to)h(resp)s(ect)f(the)g(freedom)g(of)g(others.)p eop end %%Page: 70 74 TeXDict begin 70 73 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(70)275 299 y(F)-8 b(or)30 b(example,)g(if)g(y)m(ou)f(distribute)g(copies)i(of)e(suc)m(h)g (a)h(program,)g(whether)e(gratis)j(or)e(for)g(a)h(fee,)h(y)m(ou)150 408 y(m)m(ust)i(pass)f(on)h(to)h(the)f(recipien)m(ts)h(the)f(same)h (freedoms)e(that)i(y)m(ou)f(receiv)m(ed.)50 b(Y)-8 b(ou)34 b(m)m(ust)f(mak)m(e)h(sure)150 518 y(that)29 b(they)-8 b(,)29 b(to)s(o,)h(receiv)m(e)g(or)f(can)f(get)i(the)e(source)h(co)s (de.)40 b(And)27 b(y)m(ou)i(m)m(ust)f(sho)m(w)g(them)h(these)f(terms)h (so)150 628 y(they)i(kno)m(w)f(their)g(righ)m(ts.)275 773 y(Dev)m(elop)s(ers)i(that)f(use)g(the)g(GNU)h(GPL)f(protect)g(y)m (our)g(righ)m(ts)h(with)e(t)m(w)m(o)j(steps:)41 b(\(1\))32 b(assert)g(cop)m(y-)150 882 y(righ)m(t)38 b(on)e(the)h(soft)m(w)m(are,) k(and)36 b(\(2\))i(o\013er)g(y)m(ou)f(this)g(License)g(giving)h(y)m(ou) f(legal)i(p)s(ermission)d(to)i(cop)m(y)-8 b(,)150 992 y(distribute)30 b(and/or)g(mo)s(dify)g(it.)275 1137 y(F)-8 b(or)35 b(the)g(dev)m(elop)s(ers')h(and)e(authors')h(protection,)j(the) d(GPL)g(clearly)h(explains)f(that)h(there)f(is)g(no)150 1247 y(w)m(arran)m(t)m(y)g(for)f(this)g(free)g(soft)m(w)m(are.)54 b(F)-8 b(or)35 b(b)s(oth)e(users')h(and)g(authors')g(sak)m(e,)i(the)e (GPL)h(requires)e(that)150 1356 y(mo)s(di\014ed)42 b(v)m(ersions)i(b)s (e)f(mark)m(ed)g(as)h(c)m(hanged,)j(so)d(that)g(their)f(problems)g (will)g(not)h(b)s(e)f(attributed)150 1466 y(erroneously)30 b(to)h(authors)f(of)h(previous)f(v)m(ersions.)275 1611 y(Some)e(devices)h(are)f(designed)g(to)h(den)m(y)f(users)g(access)h(to) g(install)g(or)f(run)f(mo)s(di\014ed)g(v)m(ersions)h(of)h(the)150 1721 y(soft)m(w)m(are)34 b(inside)e(them,)g(although)h(the)f(man)m (ufacturer)g(can)h(do)f(so.)46 b(This)32 b(is)g(fundamen)m(tally)g (incom-)150 1830 y(patible)j(with)e(the)h(aim)h(of)f(protecting)h (users')e(freedom)h(to)h(c)m(hange)g(the)f(soft)m(w)m(are.)53 b(The)33 b(systematic)150 1940 y(pattern)j(of)g(suc)m(h)g(abuse)f(o)s (ccurs)h(in)f(the)i(area)f(of)g(pro)s(ducts)f(for)h(individuals)f(to)h (use,)i(whic)m(h)d(is)h(pre-)150 2049 y(cisely)d(where)e(it)h(is)f (most)h(unacceptable.)46 b(Therefore,)32 b(w)m(e)g(ha)m(v)m(e)h (designed)e(this)g(v)m(ersion)h(of)g(the)g(GPL)150 2159 y(to)38 b(prohibit)e(the)i(practice)g(for)f(those)h(pro)s(ducts.)60 b(If)37 b(suc)m(h)f(problems)h(arise)h(substan)m(tially)g(in)f(other) 150 2269 y(domains,)28 b(w)m(e)f(stand)g(ready)g(to)h(extend)f(this)g (pro)m(vision)g(to)h(those)f(domains)g(in)g(future)f(v)m(ersions)i(of)f (the)150 2378 y(GPL,)k(as)f(needed)g(to)h(protect)h(the)e(freedom)h(of) f(users.)275 2523 y(Finally)-8 b(,)34 b(ev)m(ery)f(program)f(is)g (threatened)h(constan)m(tly)h(b)m(y)e(soft)m(w)m(are)i(paten)m(ts.)47 b(States)33 b(should)f(not)150 2633 y(allo)m(w)25 b(paten)m(ts)e(to)h (restrict)g(dev)m(elopmen)m(t)g(and)f(use)g(of)g(soft)m(w)m(are)h(on)f (general-purp)s(ose)g(computers,)i(but)150 2743 y(in)h(those)h(that)g (do,)g(w)m(e)g(wish)f(to)h(a)m(v)m(oid)h(the)e(sp)s(ecial)h(danger)f (that)h(paten)m(ts)h(applied)e(to)h(a)g(free)f(program)150 2852 y(could)h(mak)m(e)i(it)f(e\013ectiv)m(ely)i(proprietary)-8 b(.)40 b(T)-8 b(o)28 b(prev)m(en)m(t)g(this,)g(the)g(GPL)f(assures)g (that)h(paten)m(ts)g(cannot)150 2962 y(b)s(e)i(used)f(to)i(render)f (the)g(program)g(non-free.)275 3107 y(The)f(precise)i(terms)f(and)g (conditions)h(for)f(cop)m(ying,)i(distribution)d(and)h(mo)s (di\014cation)h(follo)m(w.)150 3355 y Fo(TERMS)44 b(AND)h(CONDITIONS) 199 3515 y Fp(0.)61 b(De\014nitions.)330 3655 y(\\This)30 b(License")h(refers)f(to)i(v)m(ersion)e(3)h(of)g(the)f(GNU)h(General)g (Public)g(License.)330 3794 y(\\Cop)m(yrigh)m(t")e(also)g(means)e(cop)m (yrigh)m(t-lik)m(e)k(la)m(ws)d(that)g(apply)f(to)h(other)g(kinds)f(of)g (w)m(orks,)h(suc)m(h)g(as)330 3904 y(semiconductor)j(masks.)330 4044 y(\\The)40 b(Program")h(refers)f(to)g(an)m(y)h(cop)m(yrigh)m (table)h(w)m(ork)e(licensed)h(under)e(this)h(License.)70 b(Eac)m(h)330 4153 y(licensee)43 b(is)f(addressed)f(as)h(\\y)m(ou".)76 b(\\Licensees")44 b(and)d(\\recipien)m(ts")i(ma)m(y)g(b)s(e)e (individuals)g(or)330 4263 y(organizations.)330 4403 y(T)-8 b(o)32 b(\\mo)s(dify")g(a)g(w)m(ork)g(means)g(to)h(cop)m(y)f (from)g(or)f(adapt)h(all)h(or)f(part)g(of)g(the)g(w)m(ork)f(in)h(a)g (fashion)330 4512 y(requiring)d(cop)m(yrigh)m(t)h(p)s(ermission,)e (other)i(than)f(the)g(making)g(of)g(an)g(exact)i(cop)m(y)-8 b(.)41 b(The)29 b(resulting)330 4622 y(w)m(ork)f(is)f(called)i(a)f (\\mo)s(di\014ed)f(v)m(ersion")i(of)f(the)g(earlier)g(w)m(ork)g(or)g(a) g(w)m(ork)f(\\based)h(on")g(the)g(earlier)330 4732 y(w)m(ork.)330 4871 y(A)k(\\co)m(v)m(ered)i(w)m(ork")f(means)f(either)g(the)g(unmo)s (di\014ed)e(Program)i(or)g(a)h(w)m(ork)f(based)g(on)g(the)g(Pro-)330 4981 y(gram.)330 5121 y(T)-8 b(o)31 b(\\propagate")i(a)e(w)m(ork)g (means)g(to)h(do)e(an)m(ything)i(with)e(it)h(that,)h(without)f(p)s (ermission,)f(w)m(ould)330 5230 y(mak)m(e)c(y)m(ou)e(directly)i(or)e (secondarily)h(liable)h(for)e(infringemen)m(t)h(under)e(applicable)i (cop)m(yrigh)m(t)h(la)m(w,)330 5340 y(except)34 b(executing)g(it)g(on)e (a)i(computer)f(or)f(mo)s(difying)h(a)g(priv)-5 b(ate)33 b(cop)m(y)-8 b(.)50 b(Propagation)34 b(includes)p eop end %%Page: 71 75 TeXDict begin 71 74 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(71)330 299 y(cop)m(ying,)39 b(distribution)c(\(with)h(or)h(without)f(mo)s(di\014cation\),)i(making) f(a)m(v)-5 b(ailable)38 b(to)f(the)f(public,)330 408 y(and)30 b(in)g(some)h(coun)m(tries)g(other)f(activities)j(as)e(w)m (ell.)330 538 y(T)-8 b(o)28 b(\\con)m(v)m(ey")j(a)d(w)m(ork)g(means)g (an)m(y)g(kind)f(of)h(propagation)h(that)g(enables)f(other)g(parties)g (to)h(mak)m(e)330 648 y(or)k(receiv)m(e)j(copies.)50 b(Mere)34 b(in)m(teraction)i(with)d(a)g(user)g(through)g(a)g(computer)h (net)m(w)m(ork,)h(with)e(no)330 757 y(transfer)d(of)g(a)h(cop)m(y)-8 b(,)32 b(is)e(not)h(con)m(v)m(eying.)330 887 y(An)25 b(in)m(teractiv)m(e)k(user)c(in)m(terface)j(displa)m(ys)e (\\Appropriate)g(Legal)h(Notices")h(to)f(the)f(exten)m(t)h(that)f(it) 330 996 y(includes)k(a)g(con)m(v)m(enien)m(t)j(and)c(prominen)m(tly)h (visible)h(feature)g(that)f(\(1\))i(displa)m(ys)e(an)g(appropriate)330 1106 y(cop)m(yrigh)m(t)j(notice,)h(and)d(\(2\))i(tells)f(the)g(user)f (that)i(there)e(is)h(no)g(w)m(arran)m(t)m(y)g(for)g(the)g(w)m(ork)g (\(except)330 1215 y(to)e(the)g(exten)m(t)h(that)f(w)m(arran)m(ties)g (are)g(pro)m(vided\),)g(that)g(licensees)g(ma)m(y)g(con)m(v)m(ey)h(the) f(w)m(ork)f(under)330 1325 y(this)37 b(License,)i(and)e(ho)m(w)g(to)g (view)h(a)f(cop)m(y)h(of)f(this)g(License.)61 b(If)36 b(the)i(in)m(terface)g(presen)m(ts)f(a)g(list)330 1435 y(of)32 b(user)e(commands)h(or)h(options,)g(suc)m(h)f(as)g(a)h(men)m (u,)f(a)h(prominen)m(t)f(item)h(in)f(the)h(list)g(meets)g(this)330 1544 y(criterion.)199 1674 y(1.)61 b(Source)30 b(Co)s(de.)330 1803 y(The)g(\\source)i(co)s(de")f(for)g(a)g(w)m(ork)g(means)g(the)g (preferred)f(form)g(of)h(the)g(w)m(ork)g(for)g(making)g(mo)s(di-)330 1913 y(\014cations)g(to)g(it.)41 b(\\Ob)5 b(ject)31 b(co)s(de")g(means) g(an)m(y)f(non-source)h(form)f(of)g(a)h(w)m(ork.)330 2042 y(A)36 b(\\Standard)f(In)m(terface")i(means)f(an)f(in)m(terface)i (that)g(either)f(is)g(an)f(o\016cial)i(standard)e(de\014ned)330 2152 y(b)m(y)e(a)g(recognized)i(standards)d(b)s(o)s(dy)-8 b(,)33 b(or,)h(in)f(the)g(case)h(of)f(in)m(terfaces)i(sp)s(eci\014ed)d (for)h(a)h(particular)330 2262 y(programming)44 b(language,)49 b(one)c(that)f(is)g(widely)h(used)e(among)i(dev)m(elop)s(ers)f(w)m (orking)h(in)e(that)330 2371 y(language.)330 2501 y(The)24 b(\\System)g(Libraries")g(of)g(an)g(executable)i(w)m(ork)e(include)f (an)m(ything,)j(other)f(than)e(the)i(w)m(ork)f(as)330 2610 y(a)k(whole,)g(that)g(\(a\))g(is)f(included)g(in)g(the)g(normal)g (form)g(of)h(pac)m(k)-5 b(aging)29 b(a)e(Ma)5 b(jor)28 b(Comp)s(onen)m(t,)g(but)330 2720 y(whic)m(h)33 b(is)g(not)h(part)f(of) h(that)g(Ma)5 b(jor)34 b(Comp)s(onen)m(t,)g(and)e(\(b\))i(serv)m(es)g (only)f(to)h(enable)g(use)f(of)h(the)330 2829 y(w)m(ork)c(with)g(that)g (Ma)5 b(jor)31 b(Comp)s(onen)m(t,)e(or)h(to)h(implemen)m(t)g(a)f (Standard)f(In)m(terface)i(for)e(whic)m(h)h(an)330 2939 y(implemen)m(tation)g(is)e(a)m(v)-5 b(ailable)30 b(to)f(the)f(public)g (in)f(source)i(co)s(de)f(form.)39 b(A)29 b(\\Ma)5 b(jor)29 b(Comp)s(onen)m(t",)330 3049 y(in)38 b(this)g(con)m(text,)k(means)c(a)g (ma)5 b(jor)38 b(essen)m(tial)i(comp)s(onen)m(t)e(\(k)m(ernel,)j(windo) m(w)d(system,)i(and)e(so)330 3158 y(on\))c(of)g(the)g(sp)s(eci\014c)f (op)s(erating)h(system)g(\(if)g(an)m(y\))h(on)e(whic)m(h)h(the)g (executable)h(w)m(ork)f(runs,)f(or)h(a)330 3268 y(compiler)d(used)f(to) h(pro)s(duce)e(the)h(w)m(ork,)h(or)f(an)h(ob)5 b(ject)31 b(co)s(de)g(in)m(terpreter)f(used)g(to)h(run)e(it.)330 3397 y(The)f(\\Corresp)s(onding)g(Source")h(for)f(a)h(w)m(ork)g(in)g (ob)5 b(ject)29 b(co)s(de)g(form)g(means)f(all)i(the)f(source)g(co)s (de)330 3507 y(needed)35 b(to)h(generate,)i(install,)f(and)e(\(for)g (an)h(executable)g(w)m(ork\))g(run)e(the)h(ob)5 b(ject)36 b(co)s(de)g(and)e(to)330 3616 y(mo)s(dify)39 b(the)g(w)m(ork,)j (including)d(scripts)g(to)i(con)m(trol)f(those)g(activities.)71 b(Ho)m(w)m(ev)m(er,)44 b(it)c(do)s(es)f(not)330 3726 y(include)i(the)h(w)m(ork's)g(System)g(Libraries,)i(or)e(general-purp)s (ose)f(to)s(ols)i(or)f(generally)h(a)m(v)-5 b(ailable)330 3836 y(free)31 b(programs)g(whic)m(h)g(are)h(used)e(unmo)s(di\014ed)f (in)i(p)s(erforming)f(those)h(activities)j(but)d(whic)m(h)g(are)330 3945 y(not)g(part)f(of)h(the)g(w)m(ork.)42 b(F)-8 b(or)32 b(example,)f(Corresp)s(onding)e(Source)i(includes)f(in)m(terface)i (de\014nition)330 4055 y(\014les)g(asso)s(ciated)i(with)d(source)i (\014les)f(for)g(the)g(w)m(ork,)h(and)f(the)g(source)g(co)s(de)h(for)e (shared)h(libraries)330 4164 y(and)g(dynamically)g(link)m(ed)h (subprograms)e(that)h(the)h(w)m(ork)f(is)g(sp)s(eci\014cally)h (designed)f(to)h(require,)330 4274 y(suc)m(h)k(as)g(b)m(y)g(in)m (timate)i(data)e(comm)m(unication)i(or)e(con)m(trol)h(\015o)m(w)f(b)s (et)m(w)m(een)h(those)f(subprograms)330 4384 y(and)30 b(other)g(parts)g(of)h(the)g(w)m(ork.)330 4513 y(The)h(Corresp)s (onding)f(Source)i(need)f(not)h(include)f(an)m(ything)i(that)f(users)f (can)h(regenerate)h(auto-)330 4623 y(matically)e(from)e(other)h(parts)f (of)h(the)f(Corresp)s(onding)f(Source.)330 4752 y(The)h(Corresp)s (onding)e(Source)j(for)f(a)h(w)m(ork)f(in)g(source)h(co)s(de)f(form)g (is)h(that)f(same)h(w)m(ork.)199 4882 y(2.)61 b(Basic)32 b(P)m(ermissions.)330 5011 y(All)44 b(righ)m(ts)f(gran)m(ted)g(under)f (this)h(License)g(are)g(gran)m(ted)h(for)f(the)g(term)g(of)g(cop)m (yrigh)m(t)h(on)f(the)330 5121 y(Program,)29 b(and)e(are)i(irrev)m(o)s (cable)g(pro)m(vided)f(the)g(stated)h(conditions)g(are)f(met.)40 b(This)28 b(License)g(ex-)330 5230 y(plicitly)h(a\016rms)e(y)m(our)h (unlimited)g(p)s(ermission)e(to)j(run)d(the)i(unmo)s(di\014ed)e (Program.)40 b(The)27 b(output)330 5340 y(from)37 b(running)e(a)j(co)m (v)m(ered)h(w)m(ork)e(is)g(co)m(v)m(ered)i(b)m(y)e(this)h(License)f (only)h(if)f(the)g(output,)i(giv)m(en)g(its)p eop end %%Page: 72 76 TeXDict begin 72 75 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(72)330 299 y(con)m(ten)m(t,)33 b(constitutes)f(a)g(co)m(v)m(ered)g(w)m(ork.)42 b(This)31 b(License)g(ac)m(kno)m(wledges)i(y)m(our)e(righ)m(ts)g(of)g(fair)g(use) 330 408 y(or)f(other)h(equiv)-5 b(alen)m(t,)32 b(as)f(pro)m(vided)f(b)m (y)g(cop)m(yrigh)m(t)i(la)m(w.)330 543 y(Y)-8 b(ou)41 b(ma)m(y)h(mak)m(e,)i(run)c(and)g(propagate)i(co)m(v)m(ered)g(w)m(orks) f(that)g(y)m(ou)h(do)e(not)h(con)m(v)m(ey)-8 b(,)46 b(without)330 653 y(conditions)30 b(so)f(long)h(as)g(y)m(our)f(license)h(otherwise)g (remains)f(in)g(force.)41 b(Y)-8 b(ou)30 b(ma)m(y)f(con)m(v)m(ey)i(co)m (v)m(ered)330 763 y(w)m(orks)40 b(to)g(others)g(for)g(the)g(sole)g (purp)s(ose)e(of)i(ha)m(ving)h(them)e(mak)m(e)i(mo)s(di\014cations)f (exclusiv)m(ely)330 872 y(for)45 b(y)m(ou,)50 b(or)45 b(pro)m(vide)h(y)m(ou)f(with)g(facilities)j(for)d(running)f(those)h(w)m (orks,)50 b(pro)m(vided)45 b(that)h(y)m(ou)330 982 y(comply)34 b(with)f(the)h(terms)f(of)h(this)f(License)i(in)e(con)m(v)m(eying)i (all)g(material)g(for)e(whic)m(h)g(y)m(ou)h(do)g(not)330 1091 y(con)m(trol)i(cop)m(yrigh)m(t.)55 b(Those)35 b(th)m(us)f(making)h (or)g(running)e(the)i(co)m(v)m(ered)h(w)m(orks)f(for)f(y)m(ou)h(m)m (ust)g(do)330 1201 y(so)29 b(exclusiv)m(ely)h(on)e(y)m(our)g(b)s (ehalf,)h(under)d(y)m(our)j(direction)g(and)f(con)m(trol,)i(on)e(terms) h(that)g(prohibit)330 1310 y(them)35 b(from)g(making)g(an)m(y)h(copies) g(of)f(y)m(our)h(cop)m(yrigh)m(ted)g(material)h(outside)e(their)h (relationship)330 1420 y(with)30 b(y)m(ou.)330 1555 y(Con)m(v)m(eying) 46 b(under)d(an)m(y)i(other)g(circumstances)g(is)g(p)s(ermitted)g (solely)g(under)f(the)g(conditions)330 1665 y(stated)31 b(b)s(elo)m(w.)41 b(Sublicensing)30 b(is)g(not)h(allo)m(w)m(ed;)h (section)g(10)f(mak)m(es)g(it)g(unnecessary)-8 b(.)199 1799 y(3.)61 b(Protecting)32 b(Users')e(Legal)i(Righ)m(ts)f(F)-8 b(rom)31 b(An)m(ti-Circum)m(v)m(en)m(tion)i(La)m(w.)330 1934 y(No)44 b(co)m(v)m(ered)i(w)m(ork)d(shall)h(b)s(e)g(deemed)f(part) h(of)g(an)f(e\013ectiv)m(e)k(tec)m(hnological)g(measure)c(under)330 2044 y(an)m(y)30 b(applicable)h(la)m(w)f(ful\014lling)g(obligations)h (under)e(article)i(11)g(of)f(the)g(WIPO)f(cop)m(yrigh)m(t)i(treat)m(y) 330 2153 y(adopted)e(on)f(20)i(Decem)m(b)s(er)f(1996,)i(or)e(similar)g (la)m(ws)g(prohibiting)f(or)h(restricting)g(circum)m(v)m(en)m(tion)330 2263 y(of)i(suc)m(h)f(measures.)330 2398 y(When)25 b(y)m(ou)h(con)m(v)m (ey)g(a)g(co)m(v)m(ered)h(w)m(ork,)f(y)m(ou)g(w)m(aiv)m(e)h(an)m(y)e (legal)i(p)s(o)m(w)m(er)f(to)g(forbid)e(circum)m(v)m(en)m(tion)j(of)330 2508 y(tec)m(hnological)j(measures)d(to)g(the)g(exten)m(t)h(suc)m(h)e (circum)m(v)m(en)m(tion)j(is)d(e\013ected)i(b)m(y)f(exercising)g(righ)m (ts)330 2617 y(under)35 b(this)h(License)h(with)e(resp)s(ect)i(to)g (the)f(co)m(v)m(ered)i(w)m(ork,)g(and)d(y)m(ou)i(disclaim)g(an)m(y)f (in)m(ten)m(tion)330 2727 y(to)41 b(limit)g(op)s(eration)g(or)f(mo)s (di\014cation)h(of)g(the)f(w)m(ork)h(as)f(a)h(means)f(of)h(enforcing,)i (against)f(the)330 2836 y(w)m(ork's)28 b(users,)f(y)m(our)h(or)f(third) g(parties')h(legal)h(righ)m(ts)f(to)g(forbid)f(circum)m(v)m(en)m(tion)i (of)e(tec)m(hnological)330 2946 y(measures.)199 3081 y(4.)61 b(Con)m(v)m(eying)31 b(V)-8 b(erbatim)32 b(Copies.)330 3216 y(Y)-8 b(ou)28 b(ma)m(y)g(con)m(v)m(ey)h(v)m(erbatim)f(copies)g (of)g(the)f(Program's)h(source)g(co)s(de)f(as)h(y)m(ou)f(receiv)m(e)j (it,)f(in)e(an)m(y)330 3325 y(medium,)33 b(pro)m(vided)g(that)h(y)m(ou) f(conspicuously)g(and)g(appropriately)g(publish)f(on)h(eac)m(h)h(cop)m (y)g(an)330 3435 y(appropriate)e(cop)m(yrigh)m(t)i(notice;)g(k)m(eep)f (in)m(tact)h(all)f(notices)g(stating)h(that)e(this)g(License)h(and)f (an)m(y)330 3544 y(non-p)s(ermissiv)m(e)d(terms)g(added)f(in)h(accord)h (with)f(section)h(7)f(apply)g(to)h(the)f(co)s(de;)h(k)m(eep)g(in)m (tact)h(all)330 3654 y(notices)37 b(of)f(the)g(absence)g(of)g(an)m(y)g (w)m(arran)m(t)m(y;)j(and)c(giv)m(e)i(all)g(recipien)m(ts)f(a)h(cop)m (y)f(of)g(this)f(License)330 3764 y(along)c(with)f(the)h(Program.)330 3898 y(Y)-8 b(ou)27 b(ma)m(y)g(c)m(harge)h(an)m(y)f(price)g(or)f(no)h (price)f(for)h(eac)m(h)g(cop)m(y)h(that)f(y)m(ou)g(con)m(v)m(ey)-8 b(,)29 b(and)d(y)m(ou)h(ma)m(y)h(o\013er)330 4008 y(supp)s(ort)h(or)h (w)m(arran)m(t)m(y)h(protection)h(for)e(a)h(fee.)199 4143 y(5.)61 b(Con)m(v)m(eying)31 b(Mo)s(di\014ed)f(Source)g(V)-8 b(ersions.)330 4278 y(Y)g(ou)27 b(ma)m(y)g(con)m(v)m(ey)h(a)f(w)m(ork)g (based)f(on)h(the)g(Program,)g(or)g(the)g(mo)s(di\014cations)g(to)g (pro)s(duce)e(it)i(from)330 4387 y(the)36 b(Program,)h(in)e(the)g(form) g(of)g(source)h(co)s(de)g(under)d(the)j(terms)f(of)h(section)g(4,)h (pro)m(vided)e(that)330 4497 y(y)m(ou)c(also)g(meet)g(all)h(of)e(these) h(conditions:)379 4632 y(a.)61 b(The)28 b(w)m(ork)h(m)m(ust)f(carry)h (prominen)m(t)f(notices)i(stating)g(that)f(y)m(ou)g(mo)s(di\014ed)e (it,)j(and)e(giving)i(a)510 4741 y(relev)-5 b(an)m(t)32 b(date.)374 4876 y(b.)60 b(The)34 b(w)m(ork)h(m)m(ust)f(carry)h (prominen)m(t)f(notices)i(stating)g(that)f(it)g(is)g(released)g(under)e (this)i(Li-)510 4986 y(cense)i(and)f(an)m(y)h(conditions)h(added)e (under)f(section)j(7.)60 b(This)36 b(requiremen)m(t)h(mo)s(di\014es)f (the)510 5096 y(requiremen)m(t)31 b(in)f(section)h(4)g(to)g(\\k)m(eep)h (in)m(tact)g(all)f(notices".)384 5230 y(c.)61 b(Y)-8 b(ou)36 b(m)m(ust)g(license)g(the)g(en)m(tire)h(w)m(ork,)g(as)f(a)g (whole,)h(under)d(this)i(License)g(to)h(an)m(y)m(one)f(who)510 5340 y(comes)31 b(in)m(to)g(p)s(ossession)e(of)h(a)h(cop)m(y)-8 b(.)41 b(This)29 b(License)i(will)f(therefore)h(apply)-8 b(,)30 b(along)h(with)f(an)m(y)p eop end %%Page: 73 77 TeXDict begin 73 76 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(73)510 299 y(applicable)34 b(section)f(7)g(additional)h(terms,)f(to)h(the)e(whole)h(of)g(the)g(w)m (ork,)g(and)f(all)i(its)f(parts,)510 408 y(regardless)h(of)g(ho)m(w)g (they)g(are)g(pac)m(k)-5 b(aged.)52 b(This)33 b(License)h(giv)m(es)h (no)f(p)s(ermission)e(to)j(license)510 518 y(the)c(w)m(ork)h(in)f(an)m (y)g(other)h(w)m(a)m(y)-8 b(,)33 b(but)d(it)i(do)s(es)f(not)g(in)m(v)-5 b(alidate)33 b(suc)m(h)e(p)s(ermission)f(if)h(y)m(ou)h(ha)m(v)m(e)510 628 y(separately)g(receiv)m(ed)f(it.)374 774 y(d.)60 b(If)36 b(the)h(w)m(ork)g(has)g(in)m(teractiv)m(e)j(user)c(in)m (terfaces,)k(eac)m(h)e(m)m(ust)f(displa)m(y)g(Appropriate)g(Legal)510 883 y(Notices;)49 b(ho)m(w)m(ev)m(er,)c(if)c(the)h(Program)f(has)g(in)m (teractiv)m(e)j(in)m(terfaces)e(that)g(do)f(not)h(displa)m(y)510 993 y(Appropriate)30 b(Legal)i(Notices,)g(y)m(our)f(w)m(ork)f(need)g (not)h(mak)m(e)g(them)g(do)f(so.)330 1176 y(A)38 b(compilation)h(of)f (a)g(co)m(v)m(ered)h(w)m(ork)f(with)f(other)h(separate)h(and)e(indep)s (enden)m(t)f(w)m(orks,)k(whic)m(h)330 1285 y(are)c(not)g(b)m(y)g(their) g(nature)f(extensions)h(of)g(the)g(co)m(v)m(ered)i(w)m(ork,)f(and)e (whic)m(h)h(are)g(not)g(com)m(bined)330 1395 y(with)27 b(it)i(suc)m(h)e(as)h(to)h(form)e(a)h(larger)h(program,)f(in)f(or)h(on) g(a)g(v)m(olume)g(of)g(a)h(storage)g(or)f(distribution)330 1504 y(medium,)43 b(is)f(called)g(an)g(\\aggregate")j(if)c(the)h (compilation)h(and)e(its)g(resulting)h(cop)m(yrigh)m(t)h(are)330 1614 y(not)31 b(used)f(to)h(limit)h(the)e(access)i(or)f(legal)h(righ)m (ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m(ond)g(what)h(the)330 1724 y(individual)j(w)m(orks)h(p)s(ermit.)54 b(Inclusion)34 b(of)h(a)h(co)m(v)m(ered)g(w)m(ork)f(in)g(an)g(aggregate)j(do)s(es)c (not)h(cause)330 1833 y(this)30 b(License)h(to)g(apply)f(to)h(the)g (other)g(parts)f(of)g(the)h(aggregate.)199 1979 y(6.)61 b(Con)m(v)m(eying)31 b(Non-Source)g(F)-8 b(orms.)330 2125 y(Y)g(ou)29 b(ma)m(y)h(con)m(v)m(ey)g(a)f(co)m(v)m(ered)i(w)m(ork) e(in)f(ob)5 b(ject)30 b(co)s(de)f(form)f(under)g(the)h(terms)f(of)h (sections)h(4)g(and)330 2235 y(5,)42 b(pro)m(vided)d(that)g(y)m(ou)h (also)g(con)m(v)m(ey)g(the)g(mac)m(hine-readable)g(Corresp)s(onding)e (Source)g(under)330 2345 y(the)31 b(terms)f(of)g(this)h(License,)g(in)f (one)h(of)f(these)h(w)m(a)m(ys:)379 2491 y(a.)61 b(Con)m(v)m(ey)32 b(the)f(ob)5 b(ject)31 b(co)s(de)g(in,)g(or)g(em)m(b)s(o)s(died)f(in,)h (a)g(ph)m(ysical)h(pro)s(duct)d(\(including)i(a)g(ph)m(ys-)510 2600 y(ical)37 b(distribution)d(medium\),)j(accompanied)f(b)m(y)f(the)h (Corresp)s(onding)d(Source)j(\014xed)e(on)i(a)510 2710 y(durable)30 b(ph)m(ysical)h(medium)e(customarily)i(used)f(for)g(soft)m (w)m(are)i(in)m(terc)m(hange.)374 2856 y(b.)60 b(Con)m(v)m(ey)30 b(the)f(ob)5 b(ject)30 b(co)s(de)f(in,)g(or)g(em)m(b)s(o)s(died)f(in,)h (a)g(ph)m(ysical)g(pro)s(duct)f(\(including)h(a)g(ph)m(ysi-)510 2966 y(cal)k(distribution)e(medium\),)h(accompanied)h(b)m(y)e(a)i (written)f(o\013er,)g(v)-5 b(alid)33 b(for)e(at)i(least)g(three)510 3075 y(y)m(ears)i(and)f(v)-5 b(alid)35 b(for)f(as)g(long)h(as)g(y)m(ou) g(o\013er)f(spare)h(parts)f(or)g(customer)h(supp)s(ort)d(for)i(that)510 3185 y(pro)s(duct)c(mo)s(del,)i(to)g(giv)m(e)g(an)m(y)m(one)h(who)d(p)s (ossesses)h(the)h(ob)5 b(ject)32 b(co)s(de)f(either)h(\(1\))g(a)g(cop)m (y)g(of)510 3294 y(the)24 b(Corresp)s(onding)e(Source)i(for)g(all)h (the)f(soft)m(w)m(are)h(in)f(the)g(pro)s(duct)f(that)i(is)f(co)m(v)m (ered)h(b)m(y)f(this)510 3404 y(License,)30 b(on)g(a)f(durable)g(ph)m (ysical)h(medium)e(customarily)i(used)f(for)g(soft)m(w)m(are)i(in)m (terc)m(hange,)510 3513 y(for)k(a)g(price)h(no)f(more)g(than)g(y)m(our) g(reasonable)h(cost)g(of)f(ph)m(ysically)h(p)s(erforming)e(this)h(con-) 510 3623 y(v)m(eying)f(of)f(source,)g(or)g(\(2\))h(access)g(to)g(cop)m (y)f(the)g(Corresp)s(onding)e(Source)i(from)f(a)h(net)m(w)m(ork)510 3733 y(serv)m(er)e(at)g(no)f(c)m(harge.)384 3879 y(c.)61 b(Con)m(v)m(ey)40 b(individual)e(copies)h(of)g(the)g(ob)5 b(ject)40 b(co)s(de)f(with)g(a)g(cop)m(y)g(of)g(the)g(written)g (o\013er)g(to)510 3988 y(pro)m(vide)e(the)g(Corresp)s(onding)e(Source.) 59 b(This)36 b(alternativ)m(e)k(is)c(allo)m(w)m(ed)j(only)e(o)s (ccasionally)510 4098 y(and)29 b(noncommercially)-8 b(,)31 b(and)e(only)g(if)h(y)m(ou)f(receiv)m(ed)i(the)e(ob)5 b(ject)31 b(co)s(de)e(with)g(suc)m(h)g(an)g(o\013er,)510 4208 y(in)h(accord)h(with)f(subsection)h(6b.)374 4354 y(d.)60 b(Con)m(v)m(ey)37 b(the)f(ob)5 b(ject)37 b(co)s(de)f(b)m(y)g (o\013ering)g(access)i(from)d(a)i(designated)f(place)h(\(gratis)g(or)f (for)510 4463 y(a)j(c)m(harge\),)k(and)c(o\013er)g(equiv)-5 b(alen)m(t)41 b(access)f(to)g(the)f(Corresp)s(onding)e(Source)i(in)f (the)i(same)510 4573 y(w)m(a)m(y)30 b(through)f(the)g(same)h(place)h (at)f(no)f(further)f(c)m(harge.)41 b(Y)-8 b(ou)30 b(need)f(not)h (require)f(recipien)m(ts)510 4682 y(to)42 b(cop)m(y)h(the)f(Corresp)s (onding)e(Source)h(along)i(with)f(the)g(ob)5 b(ject)42 b(co)s(de.)75 b(If)42 b(the)f(place)i(to)510 4792 y(cop)m(y)c(the)g(ob) 5 b(ject)39 b(co)s(de)g(is)g(a)g(net)m(w)m(ork)g(serv)m(er,)i(the)e (Corresp)s(onding)e(Source)h(ma)m(y)h(b)s(e)f(on)510 4902 y(a)45 b(di\013eren)m(t)g(serv)m(er)f(\(op)s(erated)h(b)m(y)f(y)m (ou)h(or)g(a)f(third)g(part)m(y\))h(that)g(supp)s(orts)d(equiv)-5 b(alen)m(t)510 5011 y(cop)m(ying)35 b(facilities,)i(pro)m(vided)c(y)m (ou)h(main)m(tain)h(clear)g(directions)f(next)g(to)h(the)f(ob)5 b(ject)35 b(co)s(de)510 5121 y(sa)m(ying)h(where)f(to)h(\014nd)d(the)i (Corresp)s(onding)f(Source.)55 b(Regardless)35 b(of)h(what)f(serv)m(er) g(hosts)510 5230 y(the)e(Corresp)s(onding)e(Source,)j(y)m(ou)f(remain)f (obligated)j(to)e(ensure)f(that)i(it)f(is)g(a)m(v)-5 b(ailable)35 b(for)510 5340 y(as)c(long)g(as)f(needed)g(to)h(satisfy)g (these)g(requiremen)m(ts.)p eop end %%Page: 74 78 TeXDict begin 74 77 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(74)384 299 y(e.)61 b(Con)m(v)m(ey)24 b(the)g(ob)5 b(ject)24 b(co)s(de)f(using)g(p)s (eer-to-p)s(eer)h(transmission,)g(pro)m(vided)f(y)m(ou)h(inform)f (other)510 408 y(p)s(eers)d(where)g(the)h(ob)5 b(ject)22 b(co)s(de)f(and)f(Corresp)s(onding)f(Source)i(of)g(the)g(w)m(ork)g(are) g(b)s(eing)g(o\013ered)510 518 y(to)31 b(the)g(general)g(public)f(at)h (no)f(c)m(harge)i(under)d(subsection)h(6d.)330 676 y(A)35 b(separable)f(p)s(ortion)g(of)h(the)g(ob)5 b(ject)35 b(co)s(de,)h(whose)e(source)h(co)s(de)g(is)f(excluded)g(from)g(the)h (Cor-)330 786 y(resp)s(onding)c(Source)h(as)h(a)g(System)f(Library)-8 b(,)33 b(need)f(not)h(b)s(e)e(included)h(in)g(con)m(v)m(eying)i(the)f (ob)5 b(ject)330 896 y(co)s(de)31 b(w)m(ork.)330 1029 y(A)h(\\User)g(Pro)s(duct")f(is)h(either)g(\(1\))g(a)g(\\consumer)g (pro)s(duct",)f(whic)m(h)h(means)f(an)m(y)h(tangible)h(p)s(er-)330 1139 y(sonal)g(prop)s(ert)m(y)g(whic)m(h)f(is)h(normally)h(used)e(for)h (p)s(ersonal,)g(family)-8 b(,)35 b(or)e(household)f(purp)s(oses,)g(or) 330 1249 y(\(2\))26 b(an)m(ything)f(designed)f(or)h(sold)g(for)f (incorp)s(oration)h(in)m(to)h(a)f(dw)m(elling.)39 b(In)24 b(determining)h(whether)330 1358 y(a)30 b(pro)s(duct)e(is)h(a)h (consumer)f(pro)s(duct,)f(doubtful)h(cases)h(shall)g(b)s(e)e(resolv)m (ed)j(in)e(fa)m(v)m(or)h(of)g(co)m(v)m(erage.)330 1468 y(F)-8 b(or)42 b(a)g(particular)g(pro)s(duct)f(receiv)m(ed)i(b)m(y)e(a) h(particular)g(user,)i(\\normally)f(used")e(refers)g(to)i(a)330 1577 y(t)m(ypical)e(or)e(common)h(use)e(of)i(that)g(class)g(of)f(pro)s (duct,)h(regardless)g(of)f(the)h(status)f(of)h(the)f(par-)330 1687 y(ticular)d(user)e(or)h(of)h(the)f(w)m(a)m(y)h(in)f(whic)m(h)f (the)i(particular)f(user)g(actually)h(uses,)g(or)f(exp)s(ects)h(or)f (is)330 1797 y(exp)s(ected)d(to)g(use,)g(the)g(pro)s(duct.)43 b(A)32 b(pro)s(duct)f(is)g(a)h(consumer)f(pro)s(duct)g(regardless)h(of) g(whether)330 1906 y(the)h(pro)s(duct)f(has)h(substan)m(tial)g (commercial,)j(industrial)c(or)h(non-consumer)g(uses,)g(unless)f(suc)m (h)330 2016 y(uses)e(represen)m(t)g(the)h(only)f(signi\014can)m(t)i(mo) s(de)e(of)g(use)g(of)h(the)f(pro)s(duct.)330 2150 y(\\Installation)h (Information")e(for)g(a)g(User)g(Pro)s(duct)f(means)g(an)m(y)i(metho)s (ds,)e(pro)s(cedures,)g(autho-)330 2259 y(rization)d(k)m(eys,)g(or)f (other)f(information)h(required)f(to)h(install)g(and)f(execute)i(mo)s (di\014ed)d(v)m(ersions)i(of)g(a)330 2369 y(co)m(v)m(ered)h(w)m(ork)e (in)g(that)h(User)f(Pro)s(duct)f(from)h(a)h(mo)s(di\014ed)e(v)m(ersion) h(of)h(its)f(Corresp)s(onding)f(Source.)330 2478 y(The)30 b(information)h(m)m(ust)f(su\016ce)g(to)i(ensure)d(that)i(the)g(con)m (tin)m(ued)g(functioning)g(of)f(the)h(mo)s(di\014ed)330 2588 y(ob)5 b(ject)34 b(co)s(de)f(is)g(in)f(no)h(case)h(prev)m(en)m (ted)f(or)g(in)m(terfered)g(with)g(solely)h(b)s(ecause)f(mo)s (di\014cation)g(has)330 2698 y(b)s(een)d(made.)330 2832 y(If)38 b(y)m(ou)i(con)m(v)m(ey)g(an)f(ob)5 b(ject)40 b(co)s(de)f(w)m(ork)g(under)e(this)i(section)h(in,)h(or)e(with,)i(or)e (sp)s(eci\014cally)g(for)330 2941 y(use)g(in,)i(a)e(User)g(Pro)s(duct,) i(and)e(the)g(con)m(v)m(eying)i(o)s(ccurs)d(as)i(part)f(of)g(a)g (transaction)h(in)f(whic)m(h)330 3051 y(the)d(righ)m(t)g(of)g(p)s (ossession)f(and)g(use)h(of)f(the)h(User)g(Pro)s(duct)f(is)g (transferred)g(to)i(the)e(recipien)m(t)i(in)330 3160 y(p)s(erp)s(etuit)m(y)43 b(or)g(for)g(a)h(\014xed)e(term)i (\(regardless)g(of)f(ho)m(w)h(the)f(transaction)i(is)e(c)m (haracterized\),)330 3270 y(the)c(Corresp)s(onding)e(Source)i(con)m(v)m (ey)m(ed)i(under)c(this)i(section)h(m)m(ust)f(b)s(e)f(accompanied)i(b)m (y)f(the)330 3380 y(Installation)d(Information.)52 b(But)35 b(this)f(requiremen)m(t)g(do)s(es)g(not)h(apply)f(if)g(neither)g(y)m (ou)h(nor)f(an)m(y)330 3489 y(third)28 b(part)m(y)i(retains)f(the)g (abilit)m(y)i(to)e(install)h(mo)s(di\014ed)e(ob)5 b(ject)30 b(co)s(de)f(on)g(the)h(User)f(Pro)s(duct)f(\(for)330 3599 y(example,)j(the)g(w)m(ork)f(has)g(b)s(een)g(installed)h(in)f(R)m (OM\).)330 3733 y(The)38 b(requiremen)m(t)g(to)h(pro)m(vide)g (Installation)g(Information)g(do)s(es)f(not)g(include)g(a)h(requiremen) m(t)330 3842 y(to)32 b(con)m(tin)m(ue)h(to)f(pro)m(vide)g(supp)s(ort)e (service,)j(w)m(arran)m(t)m(y)-8 b(,)33 b(or)f(up)s(dates)e(for)i(a)g (w)m(ork)f(that)h(has)g(b)s(een)330 3952 y(mo)s(di\014ed)37 b(or)h(installed)h(b)m(y)g(the)f(recipien)m(t,)k(or)c(for)g(the)g(User) h(Pro)s(duct)e(in)h(whic)m(h)g(it)h(has)f(b)s(een)330 4061 y(mo)s(di\014ed)29 b(or)h(installed.)42 b(Access)31 b(to)g(a)g(net)m(w)m(ork)g(ma)m(y)g(b)s(e)e(denied)h(when)f(the)i(mo)s (di\014cation)f(itself)330 4171 y(materially)i(and)e(adv)m(ersely)h (a\013ects)h(the)e(op)s(eration)h(of)g(the)f(net)m(w)m(ork)h(or)g (violates)h(the)f(rules)f(and)330 4281 y(proto)s(cols)h(for)f(comm)m (unication)i(across)f(the)g(net)m(w)m(ork.)330 4415 y(Corresp)s(onding) 26 b(Source)h(con)m(v)m(ey)m(ed,)j(and)d(Installation)i(Information)f (pro)m(vided,)g(in)f(accord)h(with)330 4524 y(this)d(section)i(m)m(ust) e(b)s(e)g(in)g(a)h(format)g(that)f(is)h(publicly)f(do)s(cumen)m(ted)g (\(and)g(with)g(an)h(implemen)m(ta-)330 4634 y(tion)i(a)m(v)-5 b(ailable)29 b(to)f(the)g(public)e(in)h(source)h(co)s(de)f(form\),)h (and)f(m)m(ust)g(require)g(no)g(sp)s(ecial)h(passw)m(ord)330 4743 y(or)i(k)m(ey)i(for)e(unpac)m(king,)g(reading)h(or)f(cop)m(ying.) 199 4877 y(7.)61 b(Additional)31 b(T)-8 b(erms.)330 5011 y(\\Additional)29 b(p)s(ermissions")e(are)h(terms)f(that)h(supplemen)m (t)f(the)h(terms)g(of)f(this)h(License)g(b)m(y)g(mak-)330 5121 y(ing)41 b(exceptions)h(from)e(one)h(or)g(more)g(of)g(its)g (conditions.)72 b(Additional)42 b(p)s(ermissions)d(that)j(are)330 5230 y(applicable)31 b(to)f(the)g(en)m(tire)h(Program)f(shall)g(b)s(e)f (treated)i(as)f(though)f(they)h(w)m(ere)h(included)e(in)g(this)330 5340 y(License,)36 b(to)e(the)g(exten)m(t)i(that)e(they)g(are)g(v)-5 b(alid)34 b(under)f(applicable)i(la)m(w.)52 b(If)33 b(additional)i(p)s (ermis-)p eop end %%Page: 75 79 TeXDict begin 75 78 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(75)330 299 y(sions)27 b(apply)h(only)f(to)h(part)g(of)f(the)h(Program,)h(that)f(part)f(ma)m (y)h(b)s(e)f(used)g(separately)h(under)e(those)330 408 y(p)s(ermissions,)31 b(but)g(the)h(en)m(tire)h(Program)f(remains)f(go)m (v)m(erned)i(b)m(y)f(this)g(License)g(without)g(regard)330 518 y(to)f(the)g(additional)g(p)s(ermissions.)330 659 y(When)45 b(y)m(ou)g(con)m(v)m(ey)i(a)e(cop)m(y)h(of)f(a)g(co)m(v)m (ered)i(w)m(ork,)h(y)m(ou)e(ma)m(y)f(at)h(y)m(our)f(option)g(remo)m(v)m (e)i(an)m(y)330 769 y(additional)30 b(p)s(ermissions)e(from)h(that)h (cop)m(y)-8 b(,)31 b(or)f(from)e(an)m(y)i(part)f(of)h(it.)41 b(\(Additional)30 b(p)s(ermissions)330 878 y(ma)m(y)41 b(b)s(e)f(written)g(to)h(require)f(their)h(o)m(wn)f(remo)m(v)-5 b(al)42 b(in)e(certain)h(cases)g(when)f(y)m(ou)g(mo)s(dify)g(the)330 988 y(w)m(ork.\))48 b(Y)-8 b(ou)33 b(ma)m(y)g(place)h(additional)f(p)s (ermissions)e(on)i(material,)i(added)d(b)m(y)g(y)m(ou)h(to)g(a)g(co)m (v)m(ered)330 1097 y(w)m(ork,)e(for)f(whic)m(h)g(y)m(ou)h(ha)m(v)m(e)g (or)g(can)f(giv)m(e)i(appropriate)f(cop)m(yrigh)m(t)g(p)s(ermission.) 330 1238 y(Not)m(withstanding)e(an)m(y)g(other)g(pro)m(vision)f(of)h (this)f(License,)h(for)f(material)i(y)m(ou)f(add)f(to)h(a)f(co)m(v)m (ered)330 1348 y(w)m(ork,)40 b(y)m(ou)e(ma)m(y)g(\(if)g(authorized)g(b) m(y)g(the)g(cop)m(yrigh)m(t)h(holders)e(of)h(that)g(material\))h (supplemen)m(t)330 1457 y(the)31 b(terms)f(of)g(this)h(License)g(with)f (terms:)379 1598 y(a.)61 b(Disclaiming)31 b(w)m(arran)m(t)m(y)f(or)g (limiting)g(liabilit)m(y)h(di\013eren)m(tly)f(from)f(the)g(terms)g(of)h (sections)g(15)510 1708 y(and)g(16)h(of)g(this)f(License;)h(or)374 1849 y(b.)60 b(Requiring)30 b(preserv)-5 b(ation)31 b(of)g(sp)s (eci\014ed)f(reasonable)h(legal)i(notices)f(or)e(author)h(attributions) 510 1958 y(in)24 b(that)i(material)g(or)f(in)f(the)h(Appropriate)g (Legal)h(Notices)h(displa)m(y)m(ed)e(b)m(y)g(w)m(orks)f(con)m(taining) 510 2068 y(it;)31 b(or)384 2209 y(c.)61 b(Prohibiting)23 b(misrepresen)m(tation)i(of)e(the)h(origin)g(of)f(that)i(material,)h (or)d(requiring)g(that)h(mo)s(d-)510 2318 y(i\014ed)30 b(v)m(ersions)h(of)f(suc)m(h)g(material)i(b)s(e)e(mark)m(ed)h(in)f (reasonable)h(w)m(a)m(ys)g(as)g(di\013eren)m(t)g(from)f(the)510 2428 y(original)i(v)m(ersion;)f(or)374 2569 y(d.)60 b(Limiting)42 b(the)f(use)g(for)g(publicit)m(y)h(purp)s(oses)d(of)i(names)g(of)h (licensors)f(or)h(authors)e(of)i(the)510 2679 y(material;)32 b(or)384 2819 y(e.)61 b(Declining)29 b(to)f(gran)m(t)g(righ)m(ts)f (under)f(trademark)h(la)m(w)h(for)f(use)g(of)g(some)h(trade)f(names,)h (trade-)510 2929 y(marks,)i(or)h(service)g(marks;)f(or)397 3070 y(f.)60 b(Requiring)26 b(indemni\014cation)g(of)g(licensors)h(and) f(authors)f(of)i(that)f(material)i(b)m(y)e(an)m(y)m(one)h(who)510 3180 y(con)m(v)m(eys)45 b(the)e(material)h(\(or)g(mo)s(di\014ed)e(v)m (ersions)h(of)h(it\))g(with)e(con)m(tractual)k(assumptions)510 3289 y(of)40 b(liabilit)m(y)h(to)f(the)f(recipien)m(t,)k(for)c(an)m(y)h (liabilit)m(y)h(that)f(these)g(con)m(tractual)i(assumptions)510 3399 y(directly)31 b(imp)s(ose)f(on)g(those)h(licensors)g(and)f (authors.)330 3571 y(All)i(other)h(non-p)s(ermissiv)m(e)e(additional)i (terms)e(are)i(considered)e(\\further)g(restrictions")i(within)330 3680 y(the)j(meaning)f(of)h(section)g(10.)57 b(If)35 b(the)h(Program)f(as)h(y)m(ou)g(receiv)m(ed)g(it,)i(or)d(an)m(y)h(part) f(of)h(it,)h(con-)330 3790 y(tains)f(a)g(notice)h(stating)g(that)f(it)g (is)g(go)m(v)m(erned)h(b)m(y)e(this)h(License)g(along)h(with)e(a)h (term)g(that)g(is)g(a)330 3900 y(further)24 b(restriction,)k(y)m(ou)e (ma)m(y)g(remo)m(v)m(e)h(that)f(term.)39 b(If)26 b(a)g(license)g(do)s (cumen)m(t)g(con)m(tains)g(a)g(further)330 4009 y(restriction)33 b(but)f(p)s(ermits)g(relicensing)h(or)g(con)m(v)m(eying)h(under)d(this) i(License,)g(y)m(ou)g(ma)m(y)g(add)f(to)i(a)330 4119 y(co)m(v)m(ered)g(w)m(ork)e(material)h(go)m(v)m(erned)h(b)m(y)e(the)g (terms)g(of)g(that)h(license)g(do)s(cumen)m(t,)g(pro)m(vided)e(that)330 4228 y(the)g(further)e(restriction)i(do)s(es)f(not)h(surviv)m(e)f(suc)m (h)g(relicensing)h(or)g(con)m(v)m(eying.)330 4369 y(If)f(y)m(ou)g(add)g (terms)g(to)h(a)g(co)m(v)m(ered)h(w)m(ork)e(in)g(accord)h(with)f(this)g (section,)i(y)m(ou)e(m)m(ust)g(place,)i(in)e(the)330 4479 y(relev)-5 b(an)m(t)31 b(source)f(\014les,)g(a)g(statemen)m(t)h (of)f(the)g(additional)g(terms)g(that)g(apply)f(to)i(those)f(\014les,)g (or)g(a)330 4589 y(notice)i(indicating)f(where)f(to)h(\014nd)e(the)h (applicable)i(terms.)330 4729 y(Additional)37 b(terms,)h(p)s(ermissiv)m (e)e(or)h(non-p)s(ermissiv)m(e,)h(ma)m(y)f(b)s(e)e(stated)j(in)e(the)h (form)f(of)g(a)h(sep-)330 4839 y(arately)i(written)f(license,)i(or)e (stated)h(as)e(exceptions;)43 b(the)38 b(ab)s(o)m(v)m(e)h(requiremen)m (ts)e(apply)g(either)330 4949 y(w)m(a)m(y)-8 b(.)199 5089 y(8.)61 b(T)-8 b(ermination.)330 5230 y(Y)g(ou)40 b(ma)m(y)g(not)f(propagate)i(or)e(mo)s(dify)g(a)g(co)m(v)m(ered)i(w)m (ork)f(except)g(as)g(expressly)f(pro)m(vided)g(un-)330 5340 y(der)d(this)h(License.)62 b(An)m(y)37 b(attempt)h(otherwise)f(to) h(propagate)g(or)f(mo)s(dify)f(it)i(is)f(v)m(oid,)i(and)e(will)p eop end %%Page: 76 80 TeXDict begin 76 79 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(76)330 299 y(automatically)37 b(terminate)d(y)m(our)g(righ)m(ts)g(under)f(this)g(License)i (\(including)e(an)m(y)h(paten)m(t)h(licenses)330 408 y(gran)m(ted)c(under)e(the)h(third)g(paragraph)g(of)g(section)i(11\).) 330 562 y(Ho)m(w)m(ev)m(er,)j(if)e(y)m(ou)f(cease)i(all)f(violation)i (of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h (particular)330 671 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h (\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g (cop)m(yrigh)m(t)h(holder)330 781 y(explicitly)42 b(and)e(\014nally)h (terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 891 y(holder)34 b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h (reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 1000 y(after)31 b(the)f(cessation.)330 1154 y(Moreo)m(v)m(er,)k(y)m(our)d (license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h (reinstated)g(p)s(ermanen)m(tly)f(if)330 1263 y(the)d(cop)m(yrigh)m(t)h (holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g (reasonable)h(means,)f(this)g(is)g(the)330 1373 y(\014rst)f(time)i(y)m (ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f (License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 1482 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g (violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h (of)f(the)330 1592 y(notice.)330 1745 y(T)-8 b(ermination)28 b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h (terminate)h(the)e(licenses)i(of)f(parties)330 1855 y(who)38 b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g (under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) 330 1965 y(b)s(een)f(terminated)h(and)e(not)i(p)s(ermanen)m(tly)f (reinstated,)j(y)m(ou)e(do)f(not)h(qualify)f(to)h(receiv)m(e)h(new)330 2074 y(licenses)31 b(for)f(the)h(same)g(material)h(under)c(section)k (10.)199 2228 y(9.)61 b(Acceptance)32 b(Not)g(Required)d(for)i(Ha)m (ving)g(Copies.)330 2381 y(Y)-8 b(ou)38 b(are)g(not)g(required)f(to)h (accept)h(this)f(License)g(in)f(order)g(to)h(receiv)m(e)i(or)e(run)e(a) i(cop)m(y)g(of)g(the)330 2491 y(Program.)i(Ancillary)27 b(propagation)g(of)g(a)g(co)m(v)m(ered)h(w)m(ork)e(o)s(ccurring)g (solely)i(as)f(a)g(consequence)g(of)330 2600 y(using)i(p)s(eer-to-p)s (eer)g(transmission)g(to)h(receiv)m(e)h(a)e(cop)m(y)h(lik)m(ewise)h(do) s(es)d(not)i(require)e(acceptance.)330 2710 y(Ho)m(w)m(ev)m(er,)g (nothing)c(other)g(than)g(this)f(License)i(gran)m(ts)g(y)m(ou)f(p)s (ermission)f(to)i(propagate)g(or)f(mo)s(dify)330 2819 y(an)m(y)34 b(co)m(v)m(ered)g(w)m(ork.)50 b(These)32 b(actions)j(infringe)e(cop)m(yrigh)m(t)h(if)f(y)m(ou)h(do)f(not)g (accept)i(this)e(License.)330 2929 y(Therefore,)f(b)m(y)f(mo)s(difying) g(or)g(propagating)h(a)g(co)m(v)m(ered)h(w)m(ork,)f(y)m(ou)g(indicate)g (y)m(our)g(acceptance)330 3039 y(of)f(this)f(License)h(to)g(do)f(so.) 154 3192 y(10.)61 b(Automatic)32 b(Licensing)f(of)f(Do)m(wnstream)i (Recipien)m(ts.)330 3345 y(Eac)m(h)39 b(time)g(y)m(ou)g(con)m(v)m(ey)h (a)f(co)m(v)m(ered)h(w)m(ork,)h(the)d(recipien)m(t)i(automatically)h (receiv)m(es)f(a)f(license)330 3455 y(from)e(the)h(original)h (licensors,)h(to)f(run,)f(mo)s(dify)f(and)g(propagate)i(that)f(w)m (ork,)i(sub)5 b(ject)38 b(to)g(this)330 3565 y(License.)60 b(Y)-8 b(ou)38 b(are)f(not)g(resp)s(onsible)e(for)i(enforcing)g (compliance)h(b)m(y)f(third)f(parties)h(with)f(this)330 3674 y(License.)330 3828 y(An)43 b(\\en)m(tit)m(y)i(transaction")g(is)f (a)f(transaction)i(transferring)e(con)m(trol)h(of)g(an)f(organization,) 49 b(or)330 3937 y(substan)m(tially)24 b(all)f(assets)g(of)g(one,)i(or) e(sub)s(dividing)d(an)j(organization,)j(or)d(merging)g(organizations.) 330 4047 y(If)28 b(propagation)i(of)f(a)h(co)m(v)m(ered)g(w)m(ork)f (results)g(from)f(an)h(en)m(tit)m(y)i(transaction,)f(eac)m(h)g(part)m (y)g(to)f(that)330 4156 y(transaction)g(who)d(receiv)m(es)k(a)d(cop)m (y)i(of)e(the)h(w)m(ork)f(also)i(receiv)m(es)g(whatev)m(er)f(licenses)g (to)g(the)g(w)m(ork)330 4266 y(the)d(part)m(y's)g(predecessor)g(in)g (in)m(terest)h(had)e(or)h(could)g(giv)m(e)h(under)e(the)h(previous)f (paragraph,)i(plus)330 4376 y(a)31 b(righ)m(t)g(to)h(p)s(ossession)e (of)h(the)g(Corresp)s(onding)e(Source)i(of)g(the)f(w)m(ork)h(from)g (the)g(predecessor)f(in)330 4485 y(in)m(terest,)i(if)e(the)h (predecessor)f(has)g(it)h(or)f(can)h(get)h(it)e(with)h(reasonable)g (e\013orts.)330 4639 y(Y)-8 b(ou)36 b(ma)m(y)g(not)g(imp)s(ose)f(an)m (y)h(further)e(restrictions)j(on)e(the)h(exercise)g(of)g(the)g(righ)m (ts)g(gran)m(ted)g(or)330 4748 y(a\016rmed)27 b(under)f(this)h (License.)40 b(F)-8 b(or)28 b(example,)h(y)m(ou)f(ma)m(y)g(not)g(imp)s (ose)f(a)h(license)g(fee,)h(ro)m(y)m(alt)m(y)-8 b(,)31 b(or)330 4858 y(other)d(c)m(harge)g(for)g(exercise)h(of)e(righ)m(ts)h (gran)m(ted)g(under)e(this)i(License,)h(and)d(y)m(ou)i(ma)m(y)g(not)g (initiate)330 4967 y(litigation)f(\(including)d(a)g(cross-claim)i(or)e (coun)m(terclaim)i(in)e(a)g(la)m(wsuit\))i(alleging)g(that)e(an)m(y)h (paten)m(t)330 5077 y(claim)j(is)g(infringed)e(b)m(y)i(making,)g (using,)g(selling,)h(o\013ering)f(for)f(sale,)i(or)e(imp)s(orting)g (the)h(Program)330 5187 y(or)i(an)m(y)h(p)s(ortion)f(of)h(it.)154 5340 y(11.)61 b(P)m(aten)m(ts.)p eop end %%Page: 77 81 TeXDict begin 77 80 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(77)330 299 y(A)41 b(\\con)m(tributor")h(is)f(a)g(cop)m(yrigh)m(t)i(holder)d(who)h (authorizes)g(use)g(under)e(this)i(License)h(of)f(the)330 408 y(Program)35 b(or)f(a)h(w)m(ork)g(on)f(whic)m(h)g(the)h(Program)f (is)h(based.)53 b(The)34 b(w)m(ork)g(th)m(us)g(licensed)h(is)g(called) 330 518 y(the)c(con)m(tributor's)f(\\con)m(tributor)i(v)m(ersion".)330 664 y(A)g(con)m(tributor's)g(\\essen)m(tial)i(paten)m(t)e(claims")h (are)f(all)h(paten)m(t)f(claims)h(o)m(wned)e(or)h(con)m(trolled)h(b)m (y)330 774 y(the)21 b(con)m(tributor,)j(whether)d(already)g(acquired)g (or)h(hereafter)f(acquired,)j(that)d(w)m(ould)g(b)s(e)g(infringed)330 883 y(b)m(y)27 b(some)h(manner,)g(p)s(ermitted)f(b)m(y)g(this)h (License,)h(of)e(making,)i(using,)f(or)f(selling)i(its)f(con)m (tributor)330 993 y(v)m(ersion,)40 b(but)c(do)i(not)f(include)g(claims) i(that)f(w)m(ould)f(b)s(e)f(infringed)h(only)g(as)h(a)g(consequence)g (of)330 1103 y(further)33 b(mo)s(di\014cation)h(of)g(the)g(con)m (tributor)g(v)m(ersion.)52 b(F)-8 b(or)34 b(purp)s(oses)e(of)i(this)g (de\014nition,)h(\\con-)330 1212 y(trol")40 b(includes)f(the)g(righ)m (t)h(to)f(gran)m(t)h(paten)m(t)g(sublicenses)f(in)g(a)g(manner)g (consisten)m(t)h(with)f(the)330 1322 y(requiremen)m(ts)30 b(of)h(this)f(License.)330 1468 y(Eac)m(h)44 b(con)m(tributor)h(gran)m (ts)f(y)m(ou)g(a)h(non-exclusiv)m(e,)j(w)m(orldwide,)f(ro)m(y)m(alt)m (y-free)g(paten)m(t)e(license)330 1577 y(under)26 b(the)h(con)m (tributor's)g(essen)m(tial)i(paten)m(t)f(claims,)h(to)f(mak)m(e,)h (use,)f(sell,)g(o\013er)g(for)f(sale,)i(imp)s(ort)330 1687 y(and)h(otherwise)h(run,)e(mo)s(dify)g(and)h(propagate)i(the)e (con)m(ten)m(ts)i(of)f(its)g(con)m(tributor)f(v)m(ersion.)330 1833 y(In)e(the)h(follo)m(wing)h(three)e(paragraphs,)h(a)g(\\paten)m(t) h(license")g(is)e(an)m(y)h(express)f(agreemen)m(t)j(or)d(com-)330 1943 y(mitmen)m(t,)g(ho)m(w)m(ev)m(er)g(denominated,)f(not)f(to)h (enforce)g(a)f(paten)m(t)i(\(suc)m(h)e(as)g(an)g(express)g(p)s (ermission)330 2052 y(to)32 b(practice)h(a)f(paten)m(t)h(or)e(co)m(v)m (enan)m(t)j(not)e(to)g(sue)f(for)h(paten)m(t)g(infringemen)m(t\).)45 b(T)-8 b(o)32 b(\\gran)m(t")h(suc)m(h)330 2162 y(a)i(paten)m(t)h (license)f(to)h(a)f(part)m(y)g(means)f(to)i(mak)m(e)f(suc)m(h)g(an)f (agreemen)m(t)j(or)d(commitmen)m(t)i(not)f(to)330 2271 y(enforce)c(a)g(paten)m(t)g(against)h(the)e(part)m(y)-8 b(.)330 2418 y(If)36 b(y)m(ou)h(con)m(v)m(ey)h(a)f(co)m(v)m(ered)h(w)m (ork,)h(kno)m(wingly)e(relying)g(on)f(a)h(paten)m(t)h(license,)h(and)d (the)h(Corre-)330 2527 y(sp)s(onding)21 b(Source)h(of)h(the)g(w)m(ork)g (is)f(not)h(a)m(v)-5 b(ailable)25 b(for)e(an)m(y)m(one)g(to)h(cop)m(y) -8 b(,)25 b(free)e(of)g(c)m(harge)g(and)f(under)330 2637 y(the)32 b(terms)f(of)h(this)f(License,)i(through)e(a)h(publicly)f(a)m (v)-5 b(ailable)34 b(net)m(w)m(ork)e(serv)m(er)g(or)g(other)g(readily) 330 2746 y(accessible)38 b(means,)g(then)e(y)m(ou)h(m)m(ust)f(either)h (\(1\))h(cause)e(the)h(Corresp)s(onding)e(Source)h(to)h(b)s(e)f(so)330 2856 y(a)m(v)-5 b(ailable,)32 b(or)e(\(2\))g(arrange)g(to)h(depriv)m(e) e(y)m(ourself)h(of)g(the)g(b)s(ene\014t)e(of)i(the)g(paten)m(t)g (license)h(for)e(this)330 2966 y(particular)35 b(w)m(ork,)g(or)f(\(3\)) i(arrange,)g(in)d(a)i(manner)e(consisten)m(t)j(with)e(the)g(requiremen) m(ts)h(of)f(this)330 3075 y(License,)j(to)f(extend)g(the)f(paten)m(t)h (license)h(to)f(do)m(wnstream)f(recipien)m(ts.)56 b(\\Kno)m(wingly)36 b(relying")330 3185 y(means)31 b(y)m(ou)h(ha)m(v)m(e)g(actual)h(kno)m (wledge)f(that,)g(but)f(for)g(the)g(paten)m(t)i(license,)f(y)m(our)g (con)m(v)m(eying)h(the)330 3294 y(co)m(v)m(ered)40 b(w)m(ork)e(in)g(a)g (coun)m(try)-8 b(,)41 b(or)e(y)m(our)f(recipien)m(t's)h(use)f(of)g(the) h(co)m(v)m(ered)g(w)m(ork)g(in)e(a)i(coun)m(try)-8 b(,)330 3404 y(w)m(ould)35 b(infringe)g(one)g(or)g(more)g(iden)m(ti\014able)h (paten)m(ts)g(in)f(that)h(coun)m(try)f(that)h(y)m(ou)f(ha)m(v)m(e)i (reason)330 3513 y(to)31 b(b)s(eliev)m(e)h(are)e(v)-5 b(alid.)330 3660 y(If,)31 b(pursuan)m(t)e(to)j(or)e(in)h(connection)h (with)e(a)h(single)h(transaction)g(or)f(arrangemen)m(t,)h(y)m(ou)f(con) m(v)m(ey)-8 b(,)330 3769 y(or)35 b(propagate)h(b)m(y)e(pro)s(curing)g (con)m(v)m(ey)m(ance)j(of,)g(a)e(co)m(v)m(ered)h(w)m(ork,)g(and)f(gran) m(t)g(a)g(paten)m(t)h(license)330 3879 y(to)c(some)f(of)h(the)f (parties)h(receiving)g(the)f(co)m(v)m(ered)i(w)m(ork)e(authorizing)h (them)f(to)h(use,)g(propagate,)330 3988 y(mo)s(dify)26 b(or)h(con)m(v)m(ey)h(a)g(sp)s(eci\014c)e(cop)m(y)i(of)f(the)g(co)m(v)m (ered)i(w)m(ork,)f(then)e(the)h(paten)m(t)h(license)g(y)m(ou)f(gran)m (t)330 4098 y(is)j(automatically)k(extended)c(to)h(all)g(recipien)m(ts) h(of)e(the)h(co)m(v)m(ered)h(w)m(ork)e(and)g(w)m(orks)g(based)g(on)h (it.)330 4244 y(A)d(paten)m(t)g(license)h(is)e(\\discriminatory")i(if)e (it)h(do)s(es)f(not)h(include)f(within)g(the)h(scop)s(e)f(of)h(its)g (co)m(v)m(er-)330 4354 y(age,)f(prohibits)c(the)h(exercise)h(of,)h(or)d (is)h(conditioned)h(on)f(the)g(non-exercise)h(of)f(one)g(or)g(more)g (of)g(the)330 4463 y(righ)m(ts)32 b(that)g(are)g(sp)s(eci\014cally)h (gran)m(ted)f(under)e(this)i(License.)45 b(Y)-8 b(ou)32 b(ma)m(y)g(not)g(con)m(v)m(ey)h(a)f(co)m(v)m(ered)330 4573 y(w)m(ork)d(if)g(y)m(ou)g(are)h(a)f(part)m(y)g(to)h(an)f (arrangemen)m(t)h(with)e(a)i(third)e(part)m(y)h(that)g(is)g(in)g(the)g (business)f(of)330 4682 y(distributing)i(soft)m(w)m(are,)i(under)d (whic)m(h)h(y)m(ou)h(mak)m(e)g(pa)m(ymen)m(t)g(to)g(the)g(third)f(part) m(y)g(based)g(on)h(the)330 4792 y(exten)m(t)f(of)g(y)m(our)f(activit)m (y)i(of)e(con)m(v)m(eying)i(the)e(w)m(ork,)h(and)e(under)g(whic)m(h)g (the)i(third)e(part)m(y)h(gran)m(ts,)330 4902 y(to)35 b(an)m(y)g(of)f(the)h(parties)f(who)g(w)m(ould)g(receiv)m(e)i(the)f(co) m(v)m(ered)h(w)m(ork)e(from)g(y)m(ou,)i(a)f(discriminatory)330 5011 y(paten)m(t)g(license)h(\(a\))f(in)f(connection)h(with)f(copies)h (of)g(the)f(co)m(v)m(ered)i(w)m(ork)f(con)m(v)m(ey)m(ed)h(b)m(y)e(y)m (ou)h(\(or)330 5121 y(copies)k(made)e(from)h(those)g(copies\),)j(or)d (\(b\))g(primarily)f(for)h(and)f(in)h(connection)h(with)e(sp)s (eci\014c)330 5230 y(pro)s(ducts)32 b(or)i(compilations)h(that)f(con)m (tain)h(the)f(co)m(v)m(ered)i(w)m(ork,)e(unless)f(y)m(ou)h(en)m(tered)h (in)m(to)f(that)330 5340 y(arrangemen)m(t,)e(or)e(that)h(paten)m(t)g (license)h(w)m(as)e(gran)m(ted,)i(prior)d(to)j(28)f(Marc)m(h)g(2007.)p eop end %%Page: 78 82 TeXDict begin 78 81 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(78)330 299 y(Nothing)23 b(in)e(this)h(License)h(shall)f(b)s(e)f(construed)h(as)g(excluding)g (or)g(limiting)h(an)m(y)f(implied)g(license)h(or)330 408 y(other)k(defenses)f(to)h(infringemen)m(t)g(that)g(ma)m(y)g (otherwise)g(b)s(e)e(a)m(v)-5 b(ailable)29 b(to)e(y)m(ou)g(under)e (applicable)330 518 y(paten)m(t)31 b(la)m(w.)154 658 y(12.)61 b(No)31 b(Surrender)d(of)i(Others')g(F)-8 b(reedom.)330 797 y(If)24 b(conditions)g(are)h(imp)s(osed)f(on)g(y)m(ou)g(\(whether)g (b)m(y)g(court)h(order,)g(agreemen)m(t)h(or)e(otherwise\))h(that)330 907 y(con)m(tradict)35 b(the)f(conditions)h(of)e(this)h(License,)h (they)f(do)g(not)g(excuse)g(y)m(ou)g(from)g(the)f(conditions)330 1016 y(of)k(this)f(License.)59 b(If)36 b(y)m(ou)h(cannot)g(con)m(v)m (ey)h(a)e(co)m(v)m(ered)i(w)m(ork)f(so)g(as)f(to)h(satisfy)g(sim)m (ultaneously)330 1126 y(y)m(our)44 b(obligations)i(under)c(this)i (License)h(and)e(an)m(y)i(other)f(p)s(ertinen)m(t)g(obligations,)49 b(then)44 b(as)h(a)330 1235 y(consequence)40 b(y)m(ou)f(ma)m(y)g(not)g (con)m(v)m(ey)i(it)e(at)h(all.)67 b(F)-8 b(or)40 b(example,)i(if)d(y)m (ou)g(agree)h(to)g(terms)e(that)330 1345 y(obligate)32 b(y)m(ou)e(to)h(collect)h(a)f(ro)m(y)m(alt)m(y)h(for)e(further)e(con)m (v)m(eying)k(from)e(those)g(to)h(whom)e(y)m(ou)h(con)m(v)m(ey)330 1455 y(the)h(Program,)h(the)f(only)g(w)m(a)m(y)h(y)m(ou)g(could)f (satisfy)g(b)s(oth)g(those)g(terms)g(and)g(this)g(License)g(w)m(ould) 330 1564 y(b)s(e)f(to)h(refrain)f(en)m(tirely)h(from)f(con)m(v)m(eying) i(the)f(Program.)154 1704 y(13.)61 b(Use)31 b(with)f(the)g(GNU)h (A\013ero)g(General)h(Public)e(License.)330 1843 y(Not)m(withstanding) 39 b(an)m(y)g(other)f(pro)m(vision)h(of)f(this)g(License,)k(y)m(ou)c (ha)m(v)m(e)i(p)s(ermission)d(to)i(link)f(or)330 1953 y(com)m(bine)h(an)m(y)g(co)m(v)m(ered)i(w)m(ork)e(with)f(a)h(w)m(ork)g (licensed)g(under)e(v)m(ersion)i(3)g(of)g(the)g(GNU)g(A\013ero)330 2062 y(General)29 b(Public)f(License)h(in)m(to)h(a)f(single)g(com)m (bined)f(w)m(ork,)h(and)f(to)h(con)m(v)m(ey)h(the)f(resulting)g(w)m (ork.)330 2172 y(The)f(terms)g(of)g(this)h(License)f(will)h(con)m(tin)m (ue)g(to)g(apply)f(to)h(the)g(part)f(whic)m(h)g(is)g(the)h(co)m(v)m (ered)h(w)m(ork,)330 2281 y(but)38 b(the)h(sp)s(ecial)g(requiremen)m (ts)f(of)h(the)g(GNU)g(A\013ero)g(General)g(Public)g(License,)i (section)f(13,)330 2391 y(concerning)31 b(in)m(teraction)h(through)e(a) h(net)m(w)m(ork)g(will)f(apply)g(to)i(the)e(com)m(bination)i(as)e(suc)m (h.)154 2531 y(14.)61 b(Revised)31 b(V)-8 b(ersions)30 b(of)h(this)f(License.)330 2670 y(The)35 b(F)-8 b(ree)36 b(Soft)m(w)m(are)g(F)-8 b(oundation)36 b(ma)m(y)g(publish)d(revised)i (and/or)g(new)g(v)m(ersions)h(of)f(the)g(GNU)330 2780 y(General)f(Public)f(License)g(from)g(time)g(to)h(time.)49 b(Suc)m(h)33 b(new)f(v)m(ersions)h(will)h(b)s(e)e(similar)h(in)g (spirit)330 2889 y(to)e(the)g(presen)m(t)f(v)m(ersion,)h(but)f(ma)m(y)h (di\013er)f(in)g(detail)i(to)f(address)e(new)h(problems)g(or)g (concerns.)330 3029 y(Eac)m(h)37 b(v)m(ersion)g(is)f(giv)m(en)h(a)g (distinguishing)e(v)m(ersion)i(n)m(um)m(b)s(er.)57 b(If)36 b(the)g(Program)g(sp)s(eci\014es)g(that)330 3138 y(a)31 b(certain)h(n)m(um)m(b)s(ered)d(v)m(ersion)i(of)g(the)g(GNU)g(General)h (Public)e(License)h(\\or)g(an)m(y)g(later)h(v)m(ersion")330 3248 y(applies)h(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f (follo)m(wing)i(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 3357 y(n)m(um)m(b)s(ered)h(v)m(ersion)h(or)g(of)g(an)m(y)g(later)h(v)m (ersion)g(published)d(b)m(y)i(the)g(F)-8 b(ree)35 b(Soft)m(w)m(are)g(F) -8 b(oundation.)330 3467 y(If)28 b(the)h(Program)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)h(the)g(GNU)g(General)h (Public)e(License,)330 3577 y(y)m(ou)j(ma)m(y)g(c)m(ho)s(ose)g(an)m(y)g (v)m(ersion)g(ev)m(er)g(published)d(b)m(y)j(the)f(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation.)330 3716 y(If)39 b(the)h(Program)g(sp)s(eci\014es)f(that)h(a)g(pro)m(xy)g(can)g (decide)g(whic)m(h)f(future)g(v)m(ersions)h(of)f(the)h(GNU)330 3826 y(General)34 b(Public)e(License)i(can)f(b)s(e)f(used,)h(that)h (pro)m(xy's)e(public)h(statemen)m(t)h(of)f(acceptance)j(of)d(a)330 3935 y(v)m(ersion)e(p)s(ermanen)m(tly)f(authorizes)h(y)m(ou)g(to)g(c)m (ho)s(ose)g(that)g(v)m(ersion)g(for)f(the)h(Program.)330 4075 y(Later)37 b(license)g(v)m(ersions)f(ma)m(y)h(giv)m(e)g(y)m(ou)g (additional)g(or)f(di\013eren)m(t)h(p)s(ermissions.)56 b(Ho)m(w)m(ev)m(er,)40 b(no)330 4184 y(additional)25 b(obligations)i(are)e(imp)s(osed)f(on)g(an)m(y)h(author)f(or)h(cop)m (yrigh)m(t)h(holder)e(as)h(a)g(result)f(of)h(y)m(our)330 4294 y(c)m(ho)s(osing)31 b(to)g(follo)m(w)h(a)f(later)g(v)m(ersion.)154 4433 y(15.)61 b(Disclaimer)32 b(of)f(W)-8 b(arran)m(t)m(y)g(.)330 4573 y(THERE)47 b(IS)f(NO)h(W)-10 b(ARRANTY)48 b(F)m(OR)f(THE)g(PR)m (OGRAM,)h(TO)f(THE)g(EXTENT)f(PER-)330 4682 y(MITTED)g(BY)i(APPLICABLE) e(LA)-10 b(W.)47 b(EX)m(CEPT)f(WHEN)i(OTHER)-10 b(WISE)45 b(ST)-8 b(A)g(TED)47 b(IN)330 4792 y(WRITING)34 b(THE)f(COPYRIGHT)g (HOLDERS)g(AND/OR)i(OTHER)e(P)-8 b(AR)g(TIES)33 b(PR)m(O)m(VIDE)330 4902 y(THE)d(PR)m(OGRAM)i(\\AS)e(IS")h(WITHOUT)f(W)-10 b(ARRANTY)31 b(OF)g(ANY)g(KIND,)g(EITHER)f(EX-)330 5011 y(PRESSED)k(OR)h(IMPLIED,)g(INCLUDING,)g(BUT)h(NOT)e(LIMITED)h(TO,)f (THE)h(IMPLIED)330 5121 y(W)-10 b(ARRANTIES)38 b(OF)g(MER)m(CHANT)-8 b(ABILITY)39 b(AND)g(FITNESS)e(F)m(OR)i(A)f(P)-8 b(AR)g(TICULAR)330 5230 y(PURPOSE.)39 b(THE)h(ENTIRE)f(RISK)g(AS)h(TO)f(THE)g(QUALITY)h (AND)h(PERF)m(ORMANCE)330 5340 y(OF)29 b(THE)g(PR)m(OGRAM)h(IS)f(WITH)g (YOU.)h(SHOULD)f(THE)g(PR)m(OGRAM)h(PR)m(O)m(VE)g(DEFEC-)p eop end %%Page: 79 83 TeXDict begin 79 82 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(79)330 299 y(TIVE,)24 b(YOU)g(ASSUME)f(THE)h(COST)f(OF)h(ALL)g(NECESSAR)-8 b(Y)23 b(SER)-10 b(VICING,)23 b(REP)-8 b(AIR)24 b(OR)330 408 y(CORRECTION.)154 536 y(16.)61 b(Limitation)32 b(of)e(Liabilit)m(y) -8 b(.)330 664 y(IN)26 b(NO)g(EVENT)g(UNLESS)f(REQUIRED)h(BY)h (APPLICABLE)f(LA)-10 b(W)26 b(OR)g(A)m(GREED)h(TO)f(IN)330 774 y(WRITING)37 b(WILL)f(ANY)i(COPYRIGHT)e(HOLDER,)h(OR)f(ANY)h(OTHER) f(P)-8 b(AR)g(TY)38 b(WHO)330 883 y(MODIFIES)33 b(AND/OR)h(CONVEYS)e (THE)h(PR)m(OGRAM)h(AS)e(PERMITTED)h(ABO)m(VE,)h(BE)330 993 y(LIABLE)d(TO)e(YOU)i(F)m(OR)g(D)m(AMA)m(GES,)i(INCLUDING)e(ANY)g (GENERAL,)g(SPECIAL,)f(IN-)330 1102 y(CIDENT)-8 b(AL)32 b(OR)f(CONSEQUENTIAL)f(D)m(AMA)m(GES)j(ARISING)f(OUT)f(OF)h(THE)f(USE)g (OR)330 1212 y(INABILITY)47 b(TO)f(USE)g(THE)g(PR)m(OGRAM)i (\(INCLUDING)f(BUT)g(NOT)f(LIMITED)h(TO)330 1322 y(LOSS)28 b(OF)h(D)m(A)-8 b(T)g(A)31 b(OR)e(D)m(A)-8 b(T)g(A)31 b(BEING)f(RENDERED)f(INA)m(CCURA)-8 b(TE)30 b(OR)e(LOSSES)g(SUS-)330 1431 y(T)-8 b(AINED)43 b(BY)g(YOU)f(OR)g(THIRD)h(P)-8 b(AR)g(TIES)42 b(OR)g(A)g(F)-10 b(AILURE)43 b(OF)f(THE)g(PR)m(OGRAM)330 1541 y(TO)30 b(OPERA)-8 b(TE)29 b(WITH)i(ANY)f(OTHER)g(PR)m(OGRAMS\),)h (EVEN)f(IF)h(SUCH)e(HOLDER)h(OR)330 1650 y(OTHER)36 b(P)-8 b(AR)g(TY)37 b(HAS)g(BEEN)f(AD)m(VISED)i(OF)f(THE)f(POSSIBILITY)f(OF)h (SUCH)g(D)m(AM-)330 1760 y(A)m(GES.)154 1888 y(17.)61 b(In)m(terpretation)31 b(of)g(Sections)g(15)g(and)f(16.)330 2015 y(If)d(the)h(disclaimer)g(of)f(w)m(arran)m(t)m(y)i(and)d (limitation)k(of)d(liabilit)m(y)j(pro)m(vided)d(ab)s(o)m(v)m(e)h (cannot)g(b)s(e)f(giv)m(en)330 2125 y(lo)s(cal)35 b(legal)h(e\013ect)g (according)f(to)f(their)h(terms,)g(reviewing)f(courts)g(shall)h(apply)e (lo)s(cal)j(la)m(w)e(that)330 2235 y(most)j(closely)i(appro)m(ximates)f (an)f(absolute)g(w)m(aiv)m(er)i(of)e(all)g(civil)i(liabilit)m(y)f(in)f (connection)h(with)330 2344 y(the)d(Program,)i(unless)d(a)h(w)m(arran)m (t)m(y)h(or)f(assumption)g(of)g(liabilit)m(y)i(accompanies)f(a)g(cop)m (y)g(of)f(the)330 2454 y(Program)c(in)f(return)f(for)h(a)h(fee.)150 2673 y Fo(END)45 b(OF)g(TERMS)f(AND)h(CONDITIONS)150 2924 y(Ho)l(w)h(to)f(Apply)f(These)h(T)-11 b(erms)45 b(to)g(Y)-11 b(our)44 b(New)i(Programs)150 3083 y Fp(If)20 b(y)m(ou)i(dev)m(elop)f(a)h(new)e(program,)j(and)d(y)m(ou)i(w)m(an)m(t) f(it)h(to)f(b)s(e)g(of)g(the)g(greatest)i(p)s(ossible)d(use)h(to)g(the) g(public,)150 3192 y(the)28 b(b)s(est)f(w)m(a)m(y)i(to)g(ac)m(hiev)m(e) h(this)e(is)g(to)g(mak)m(e)h(it)g(free)f(soft)m(w)m(are)h(whic)m(h)e (ev)m(ery)m(one)j(can)e(redistribute)g(and)150 3302 y(c)m(hange)k (under)c(these)j(terms.)275 3430 y(T)-8 b(o)29 b(do)h(so,)g(attac)m(h)h (the)f(follo)m(wing)h(notices)f(to)h(the)e(program.)40 b(It)30 b(is)g(safest)g(to)g(attac)m(h)h(them)f(to)g(the)150 3539 y(start)38 b(of)g(eac)m(h)g(source)g(\014le)f(to)h(most)g (e\013ectiv)m(ely)i(state)f(the)f(exclusion)g(of)f(w)m(arran)m(t)m(y;) 42 b(and)37 b(eac)m(h)i(\014le)150 3649 y(should)29 b(ha)m(v)m(e)j(at)f (least)h(the)e(\\cop)m(yrigh)m(t")j(line)e(and)e(a)i(p)s(oin)m(ter)g (to)g(where)f(the)g(full)g(notice)i(is)e(found.)390 3754 y Fc(one)40 b(line)g(to)g(give)g(the)g(program's)h(name)f(and)g(a)g (brief)g(idea)g(of)g(what)g(it)g(does.)390 3842 y Fd(Copyright)h(\(C\)) f Fc(year)49 b(name)40 b(of)g(author)390 4016 y Fd(This)g(program)h(is) f(free)g(software:)h(you)f(can)g(redistribute)i(it)e(and/or)g(modify) 390 4103 y(it)g(under)g(the)g(terms)g(of)g(the)g(GNU)g(General)h (Public)f(License)h(as)f(published)h(by)390 4190 y(the)f(Free)g (Software)h(Foundation,)h(either)e(version)h(3)f(of)f(the)h(License,)h (or)f(\(at)390 4277 y(your)g(option\))h(any)f(later)g(version.)390 4452 y(This)g(program)h(is)f(distributed)h(in)f(the)g(hope)g(that)g(it) g(will)g(be)g(useful,)h(but)390 4539 y(WITHOUT)g(ANY)f(WARRANTY;)h (without)g(even)f(the)g(implied)h(warranty)g(of)390 4626 y(MERCHANTABILITY)i(or)c(FITNESS)i(FOR)f(A)g(PARTICULAR)h(PURPOSE.)80 b(See)40 b(the)g(GNU)390 4713 y(General)h(Public)f(License)h(for)f (more)g(details.)390 4888 y(You)g(should)g(have)h(received)g(a)e(copy)h (of)g(the)g(GNU)g(General)h(Public)f(License)390 4975 y(along)g(with)g(this)h(program.)80 b(If)40 b(not,)g(see)g (http://www.gnu.org/licenses/.)275 5103 y Fp(Also)31 b(add)e(information)i(on)f(ho)m(w)h(to)g(con)m(tact)i(y)m(ou)d(b)m(y)g (electronic)j(and)d(pap)s(er)f(mail.)275 5230 y(If)e(the)i(program)f (do)s(es)f(terminal)i(in)m(teraction,)i(mak)m(e)e(it)g(output)f(a)g (short)g(notice)i(lik)m(e)f(this)f(when)f(it)150 5340 y(starts)k(in)f(an)g(in)m(teractiv)m(e)j(mo)s(de:)p eop end %%Page: 80 84 TeXDict begin 80 83 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(80)390 299 y Fc(program)49 b Fd(Copyright)42 b(\(C\))e Fc(year)48 b(name)41 b(of)e(author)390 386 y Fd(This)h(program)h(comes)f(with)g(ABSOLUTELY)i(NO)e(WARRANTY;)h (for)f(details)h(type)f(`show)g(w'.)390 473 y(This)g(is)g(free)g (software,)h(and)f(you)g(are)g(welcome)h(to)e(redistribute)j(it)390 560 y(under)e(certain)h(conditions;)h(type)e(`show)g(c')g(for)g (details.)275 695 y Fp(The)27 b(h)m(yp)s(othetical)i(commands)f(`)p Fj(show)h(w)p Fp(')f(and)f(`)p Fj(show)j(c)p Fp(')d(should)g(sho)m(w)h (the)g(appropriate)g(parts)g(of)150 804 y(the)i(General)h(Public)f (License.)41 b(Of)30 b(course,)h(y)m(our)f(program's)g(commands)f(migh) m(t)i(b)s(e)f(di\013eren)m(t;)h(for)f(a)150 914 y(GUI)h(in)m(terface,)h (y)m(ou)f(w)m(ould)f(use)g(an)g(\\ab)s(out)h(b)s(o)m(x".)275 1049 y(Y)-8 b(ou)34 b(should)f(also)i(get)g(y)m(our)e(emplo)m(y)m(er)i (\(if)g(y)m(ou)f(w)m(ork)g(as)g(a)g(programmer\))g(or)g(sc)m(ho)s(ol,)i (if)d(an)m(y)-8 b(,)36 b(to)150 1158 y(sign)d(a)g(\\cop)m(yrigh)m(t)h (disclaimer")g(for)e(the)h(program,)g(if)f(necessary)-8 b(.)48 b(F)-8 b(or)34 b(more)e(information)h(on)g(this,)150 1268 y(and)d(ho)m(w)g(to)h(apply)f(and)g(follo)m(w)i(the)e(GNU)h(GPL,)g (see)g Fj(http://www.gnu.org/licen)o(ses)o(/)p Fp(.)275 1402 y(The)44 b(GNU)h(General)g(Public)f(License)i(do)s(es)e(not)h(p)s (ermit)e(incorp)s(orating)i(y)m(our)g(program)f(in)m(to)150 1512 y(proprietary)35 b(programs.)57 b(If)35 b(y)m(our)h(program)f(is)h (a)g(subroutine)f(library)-8 b(,)37 b(y)m(ou)f(ma)m(y)h(consider)e(it)i (more)150 1621 y(useful)30 b(to)i(p)s(ermit)e(linking)i(proprietary)e (applications)i(with)f(the)g(library)-8 b(.)43 b(If)31 b(this)g(is)g(what)g(y)m(ou)g(w)m(an)m(t)150 1731 y(to)f(do,)g(use)f (the)g(GNU)h(Lesser)g(General)g(Public)f(License)h(instead)g(of)f(this) h(License.)40 b(But)30 b(\014rst,)f(please)150 1841 y(read)h Fj(http://www.gnu.org/philos)o(ophy)o(/why)o(-no)o(t-lg)o(pl.h)o(tml)o Fp(.)p eop end %%Page: 81 85 TeXDict begin 81 84 bop 150 -116 a Fp(Concept)31 b(Index)2927 b(81)150 299 y Fm(Concept)52 b(Index)150 638 y Fo(A)150 757 y Fb(AIX)14 b Fa(:)e(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)41 b Fb(3)150 998 y Fo(C)150 1117 y Fb(command)26 b(line)20 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)46 b Fb(58)150 1206 y(Compiling)27 b(y)n(our)e(application)c Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)46 b Fb(8)150 1295 y(Con)n(tributing)23 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)50 b Fb(5)150 1552 y Fo(D)150 1671 y Fb(Debian)9 b Fa(:)k(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)37 b Fb(2,)26 b(3)150 1760 y(Do)n(wnload)c Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)48 b Fb(4)150 2001 y Fo(F)150 2120 y Fb(FDL,)26 b(GNU)f(F)-6 b(ree)25 b(Do)r(cumen)n(tation)h(License)20 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)45 b Fb(62)150 2209 y(F)-6 b(reeBSD)22 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)49 b Fb(4)150 2298 y(F)-6 b(uture)25 b(goals)14 b Fa(:)h(:)e(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)41 b Fb(6)150 2555 y Fo(G)150 2674 y Fb(GPL,)26 b(GNU)f(General)i(Public)f(License)e Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)49 b Fb(69)150 2932 y Fo(H)150 3051 y Fb(Hac)n(king)18 b Fa(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)45 b Fb(5)150 3140 y(Header)26 b(\014les)10 b Fa(:)j(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)37 b Fb(7)150 3228 y(HP-UX)12 b Fa(:)f(:)j(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(3)150 3469 y Fo(I)150 3588 y Fb(Installation)14 b Fa(:)g(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)41 b Fb(4)150 3677 y(in)n(v)n(oking)25 b Fd(gss)8 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)34 b Fb(58)150 3766 y(IRIX)18 b Fa(:)12 b(:)h(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)45 b Fb(3)150 4007 y Fo(L)150 4126 y Fb(License,)27 b(GNU)e(GPL)13 b Fa(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(69)2025 638 y Fo(M)2025 754 y Fb(Mandrak)n(e)20 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)48 b Fb(3)2025 841 y(mec)n(hanism)26 b(status)g(co)r(des)e Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)50 b Fb(15)2025 929 y(Memory)26 b(allo)r(cation)i(failure)11 b Fa(:)j(:)f(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) 38 b Fb(8)2025 1016 y(Motorola)28 b(Cold\014re)10 b Fa(:)j(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(4)2025 1249 y Fo(N)2025 1365 y Fb(NetBSD)15 b Fa(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)42 b Fb(3)2025 1598 y Fo(O)2025 1714 y Fb(Op)r(enBSD)18 b Fa(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)47 b Fb(3)2025 1801 y(Out)25 b(of)h(Memory)g(handling)8 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(8)2025 2050 y Fo(R)2025 2166 y Fb(RedHat)7 b Fa(:)12 b(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)34 b Fb(3)2025 2254 y(RedHat)25 b(Adv)l(anced)f(Serv)n(er)19 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)47 b Fb(3)2025 2341 y(Rep)r(orting)26 b(Bugs)10 b Fa(:)j(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)37 b Fb(5)2025 2590 y Fo(S)2025 2706 y Fb(Solaris)9 b Fa(:)14 b(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(3)2025 2794 y(status)26 b(co)r(des)16 b Fa(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)42 b Fb(15)2025 2881 y(SuSE)13 b Fa(:)f(:)h(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)40 b Fb(3)2025 2968 y(SuSE)25 b(Lin)n(ux)c Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)50 b Fb(3)2025 3201 y Fo(T)2025 3317 y Fb(T)-6 b(o)r(do)26 b(list)c Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)49 b Fb(6)2025 3404 y(T)-6 b(ru64)21 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(3)2025 3637 y Fo(U)2025 3753 y Fb(uClib)r(c)10 b Fa(:)k(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)37 b Fb(4)2025 3840 y(uClin)n(ux)21 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(4)2025 4073 y Fo(W)2025 4189 y Fb(Windo)n(ws)17 b Fa(:)d(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)44 b Fb(3)p eop end %%Page: 82 86 TeXDict begin 82 85 bop 150 -116 a Fp(API)30 b(Index)3093 b(82)150 299 y Fm(API)54 b(Index)150 610 y Fd(gss)8 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(58)150 698 y Fd(gss_accept_sec_context)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(31)150 785 y Fd(gss_acquire_cred)9 b Fa(:)16 b(:)e(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)35 b Fb(19)150 873 y Fd(gss_add_cred)22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fb(20)150 960 y Fd(gss_add_oid_set_member)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)37 b Fb(50)150 1047 y Fd(GSS_CALLING_ERROR)6 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fb(17)150 1135 y Fd(gss_canonicalize_name)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(48)150 1222 y Fd(gss_check_version)6 b Fa(:)17 b(:)c(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)32 b Fb(57)150 1310 y Fd(gss_compare_name)9 b Fa(:)16 b(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 b Fb(47)150 1397 y Fd(gss_context_time)9 b Fa(:)16 b(:)e(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)35 b Fb(37)150 1485 y Fd (gss_create_empty_oid_set)28 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)49 b Fb(53)150 1572 y Fd(gss_decapsulate_token)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(54)150 1660 y Fd(gss_delete_sec_context)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)37 b Fb(35)150 1747 y Fd(gss_display_name)9 b Fa(:)16 b(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 b Fb(46)150 1834 y Fd(gss_display_status)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(51)150 1922 y Fd(gss_duplicate_name)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(49)150 2009 y Fd(gss_encapsulate_token)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)39 b Fb(54)150 2097 y Fd(GSS_ERROR)9 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)36 b Fb(17)150 2184 y Fd(gss_export_name)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(49)150 2272 y Fd(gss_export_sec_context)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)37 b Fb(40)150 2359 y Fd(gss_get_mic)24 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) 48 b Fb(42)150 2447 y Fd(gss_import_name)11 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(45)150 2534 y Fd(gss_import_sec_context)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)37 b Fb(41)150 2621 y Fd(gss_indicate_mechs)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fb(52)2025 610 y Fd(gss_init_sec_context)16 b Fa(:)h(:)c(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b Fb(25)2025 702 y Fd(gss_inquire_context)18 b Fa(:)f(:)c(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)45 b Fb(37)2025 793 y Fd(gss_inquire_cred)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(23)2025 884 y Fd(gss_inquire_cred_by_mech)28 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)49 b Fb(23)2025 976 y Fd(gss_inquire_mech_for_saslname)10 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(55)2025 1067 y Fd(gss_inquire_mechs_for_name)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)44 b Fb(48)2025 1159 y Fd(gss_inquire_names_for_mech)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)44 b Fb(47)2025 1250 y Fd(gss_inquire_saslname_for_mech)10 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(55)2025 1342 y Fd(gss_oid_equal)16 b Fa(:)g(:)d(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fb(55)2025 1433 y Fd(gss_process_context_token)25 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)46 b Fb(36)2025 1524 y Fd(gss_release_buffer)25 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) 47 b Fb(52)2025 1616 y Fd(gss_release_cred)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(24)2025 1707 y Fd(gss_release_name)9 b Fa(:)16 b(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)35 b Fb(47)2025 1799 y Fd(gss_release_oid_set)18 b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(53)2025 1890 y Fd(GSS_ROUTINE_ERROR)6 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)33 b Fb(17)2025 1981 y Fd(GSS_S_...)9 b Fa(:)15 b(:)f(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(16)2025 2073 y Fd(GSS_SUPPLEMENTARY_INFO)10 b Fa(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)37 b Fb(17)2025 2164 y Fd(gss_test_oid_set_member)8 b Fa(:)18 b(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)34 b Fb(53)2025 2256 y Fd(gss_unwrap)7 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)33 b Fb(44)2025 2347 y Fd(gss_userok)7 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) 33 b Fb(57)2025 2439 y Fd(gss_verify_mic)14 b Fa(:)i(:)d(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 b Fb(42)2025 2530 y Fd(gss_wrap)12 b Fa(:)j(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fb(43)2025 2621 y Fd (gss_wrap_size_limit)18 b Fa(:)f(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)45 b Fb(39)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF gss-1.0.2/doc/gpl-3.0.texi0000644000000000000000000010441311546676326011740 00000000000000@c The GNU General Public License. @center Version 3, 29 June 2007 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @heading Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program---to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. @heading TERMS AND CONDITIONS @enumerate 0 @item Definitions. ``This License'' refers to version 3 of the GNU General Public License. ``Copyright'' also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. ``The Program'' refers to any copyrightable work licensed under this License. Each licensee is addressed as ``you''. ``Licensees'' and ``recipients'' may be individuals or organizations. To ``modify'' a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a ``modified version'' of the earlier work or a work ``based on'' the earlier work. A ``covered work'' means either the unmodified Program or a work based on the Program. To ``propagate'' a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To ``convey'' a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays ``Appropriate Legal Notices'' to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. @item Source Code. The ``source code'' for a work means the preferred form of the work for making modifications to it. ``Object code'' means any non-source form of a work. A ``Standard Interface'' means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The ``System Libraries'' of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A ``Major Component'', in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The ``Corresponding Source'' for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. @item Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. @item Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. @item Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. @item Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: @enumerate a @item The work must carry prominent notices stating that you modified it, and giving a relevant date. @item The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to ``keep intact all notices''. @item You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. @item If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. @end enumerate A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. @item Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: @enumerate a @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. @item Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. @item Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. @item Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. @end enumerate A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A ``User Product'' is either (1) a ``consumer product'', which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, ``normally used'' refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. ``Installation Information'' for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. @item Additional Terms. ``Additional permissions'' are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: @enumerate a @item Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or @item Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or @item Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or @item Limiting the use for publicity purposes of names of licensors or authors of the material; or @item Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or @item Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. @end enumerate All other non-permissive additional terms are considered ``further restrictions'' within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. @item Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. @item Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. @item Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An ``entity transaction'' is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. @item Patents. A ``contributor'' is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's ``contributor version''. A contributor's ``essential patent claims'' are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, ``control'' includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a ``patent license'' is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To ``grant'' such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. ``Knowingly relying'' means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is ``discriminatory'' if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. @item No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. @item Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. @item Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. @item Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @item Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. @end enumerate @heading END OF TERMS AND CONDITIONS @heading How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{year} @var{name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see @url{http://www.gnu.org/licenses/}. @end smallexample Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: @smallexample @var{program} Copyright (C) @var{year} @var{name of author} This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. This is free software, and you are welcome to redistribute it under certain conditions; type @samp{show c} for details. @end smallexample The hypothetical commands @samp{show w} and @samp{show c} should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an ``about box''. You should also get your employer (if you work as a programmer) or school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see @url{http://www.gnu.org/licenses/}. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. gss-1.0.2/doc/fdl-1.3.texi0000644000000000000000000005561011662446265011724 00000000000000@c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. @uref{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, La@TeX{} input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The ``publisher'' means any person or entity that distributes copies of the Document to the public. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.''@: line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: gss-1.0.2/doc/cyclo/0000755000000000000000000000000011663555057011150 500000000000000gss-1.0.2/doc/cyclo/Makefile.am0000644000000000000000000000253311662452447013125 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2008-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. EXTRA_DIST = cyclo-$(PACKAGE).html vcurl = "http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=lib/%FILENAME%;hb=HEAD" cyclo-$(PACKAGE).html: (cd ${top_srcdir}/lib && \ $(PMCCABE) *.[ch] krb5/*.[ch] \ | sort -nr \ | LANG=C $(AWK) -f ${abs_top_srcdir}/build-aux/pmccabe2html \ -v lang=html -v name="$(PACKAGE_STRING)" \ -v vcurl=$(vcurl) \ -v url="http://www.gnu.org/software/$(PACKAGE)/" \ -v css=${abs_top_srcdir}/build-aux/pmccabe.css) \ > tmp mv tmp $@ gss-1.0.2/doc/cyclo/cyclo-gss.html0000644000000000000000000022724411663555057013674 00000000000000 Cyclomatic Complexity report for GNU Generic Security Service 1.0.2 Back to GNU Generic Security Service 1.0.2 Homepage

GNU Generic Security Service 1.0.2 Cyclomatic Complexity Report

Report generated at: Fri Nov 25 00:58:39 CET 2011

Summary
Total number of functions 82
Number of low risk functions 71
Number of moderate risk functions 7
Number of high risk functions 4
Number of untestable functions 0

Details for all functions
  Cyclomatic Complexity Risk Evaluation
  0 - 10 Simple module, without much risk
  11 - 20 More complex module, moderate risk
  21 - 50 Complex module, high risk
  greater than 50 Untestable module, very high risk

Function Name Modified Cyclo Number of
Statements
Number of
Lines
Source File
gss_krb5_unwrap 41 131 227 krb5/msg.c
gss_krb5_accept_sec_context 30 100 190 krb5/context.c
gss_display_status 23 67 157 error.c
gss_krb5_wrap 22 112 213 krb5/msg.c
gss_init_sec_context 16 38 88 context.c
gss_krb5_init_sec_context 16 38 107 krb5/context.c
gss_krb5_canonicalize_name 14 40 83 krb5/name.c
gss_add_oid_set_member 13 29 56 misc.c
acquire_cred1 12 34 68 krb5/cred.c
_gss_krb5_checksum_parse 11 39 72 krb5/checksum.c
gss_inquire_saslname_for_mech 11 24 47 saslname.c
  init_request 10 38 81 krb5/context.c
  hash_cb 10 36 61 krb5/checksum.c
  gss_acquire_cred 10 27 63 cred.c
  gss_duplicate_name 10 26 42 name.c
  inquire_cred 10 21 40 krb5/cred.c
  _gss_decapsulate_token 9 33 51 asn1.c
  gss_krb5_acquire_cred 9 25 53 krb5/cred.c
  gss_krb5_display_status 9 24 68 krb5/error.c
  gss_delete_sec_context 8 22 43 context.c
  gss_import_name 8 21 37 name.c
  gss_release_cred 8 21 36 cred.c
  gss_inquire_cred_by_mech 8 20 51 cred.c
  gss_display_name 8 17 30 name.c
  gss_compare_name 7 9 20 name.c
  _gss_find_mech_by_saslname 7 9 17 meta.c
  init_reply 7 24 58 krb5/context.c
  gss_decapsulate_token 7 21 36 asn1.c
  _gss_asn1_get_length_der 7 20 43 asn1.c
  gss_accept_sec_context 7 15 51 context.c
  _gss_copy_oid 7 14 25 misc.c
  _gss_krb5_checksum_pack 6 25 124 krb5/checksum.c
  _gss_inquire_mechs_for_name3 6 17 30 name.c
  gss_export_name 6 16 33 name.c
  gss_inquire_cred 6 16 36 cred.c
  gss_inquire_mechs_for_name 6 15 30 name.c
  _gss_asn1_length_der 6 15 32 asn1.c
  gss_test_oid_set_member 6 14 28 misc.c
  gss_inquire_mech_for_saslname 6 13 27 saslname.c
  gss_inquire_names_for_mech 5 17 29 name.c
  gss_release_oid_set 5 14 20 misc.c
  gss_context_time 5 11 23 context.c
  gss_get_mic 5 11 26 msg.c
  gss_krb5_delete_sec_context 5 11 21 krb5/context.c
  gss_unwrap 5 11 27 msg.c
  dup_data 5 11 21 saslname.c
  gss_wrap 5 11 28 msg.c
  gss_encapsulate_token 5 11 26 asn1.c
  gss_verify_mic 5 11 26 msg.c
  gss_krb5_context_time 5 10 23 krb5/context.c
  gss_release_name 5 10 20 name.c
  _gss_encapsulate_token_prefix 4 25 39 asn1.c
  gss_krb5_export_name 4 20 32 krb5/name.c
  _gss_inquire_mechs_for_name1 4 12 22 name.c
  _gss_inquire_mechs_for_name2 4 11 22 name.c
  gss_indicate_mechs 4 11 20 misc.c
  _gss_indicate_mechs1 4 11 18 meta.c
  gss_create_empty_oid_set 4 10 18 misc.c
  gss_oid_equal 4 1 8 oid.c
  gss_krb5_release_cred 3 9 16 krb5/cred.c
  gss_krb5_tktlifetime 3 8 16 krb5/utils.c
  _gss_find_mech_no_default 3 7 11 meta.c
  gss_canonicalize_name 3 7 18 name.c
  gss_release_buffer 3 7 15 misc.c
  _gss_find_mech 3 4 12 meta.c
  gss_check_version 3 3 8 version.c
  gss_krb5_inquire_cred_by_mech 2 5 19 krb5/cred.c
  gss_userok 2 1 7 ext.c
  pack_uint32 1 4 8 krb5/checksum.c
  gss_process_context_token 1 1 7 context.c
  gss_unseal 1 1 11 obsolete.c
  gss_seal 1 1 12 obsolete.c
  gss_krb5_verify_mic 1 1 8 krb5/msg.c
  gss_verify 1 1 9 obsolete.c
  gss_krb5_get_mic 1 1 9 krb5/msg.c
  gss_add_cred 1 1 14 cred.c
  gss_sign 1 1 9 obsolete.c
  gss_krb5_inquire_cred 1 1 11 krb5/cred.c
  gss_import_sec_context 1 1 7 context.c
  gss_export_sec_context 1 1 7 context.c
  gss_wrap_size_limit 1 1 9 context.c
  gss_inquire_context 1 1 11 context.c

Copyright (c) 2007, 2008 Free Software Foundation, Inc. gss-1.0.2/doc/cyclo/Makefile.in0000644000000000000000000005343511663554704013145 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2008-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/cyclo DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = cyclo-$(PACKAGE).html vcurl = "http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=lib/%FILENAME%;hb=HEAD" all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/cyclo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/cyclo/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am cyclo-$(PACKAGE).html: (cd ${top_srcdir}/lib && \ $(PMCCABE) *.[ch] krb5/*.[ch] \ | sort -nr \ | LANG=C $(AWK) -f ${abs_top_srcdir}/build-aux/pmccabe2html \ -v lang=html -v name="$(PACKAGE_STRING)" \ -v vcurl=$(vcurl) \ -v url="http://www.gnu.org/software/$(PACKAGE)/" \ -v css=${abs_top_srcdir}/build-aux/pmccabe.css) \ > tmp mv tmp $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/gl/0000755000000000000000000000000011663555055007672 500000000000000gss-1.0.2/gl/dummy.c0000644000000000000000000000325411662447025011111 00000000000000/* A dummy file, to prevent empty libraries from breaking builds. Copyright (C) 2004, 2007, 2009-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* Some systems, reportedly OpenBSD and Mac OS X, refuse to create libraries without any object files. You might get an error like: > ar cru .libs/libgl.a > ar: no archive members specified Compiling this file, and adding its object file to the library, will prevent the library from being empty. */ /* Some systems, such as Solaris with cc 5.0, refuse to work with libraries that don't export any symbol. You might get an error like: > cc ... libgnu.a > ild: (bad file) garbled symbol table in archive ../gllib/libgnu.a Compiling this file, and adding its object file to the library, will prevent the library from exporting no symbols. */ #ifdef __sun /* This declaration ensures that the library will export at least 1 symbol. */ int gl_dummy_symbol; #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif gss-1.0.2/gl/Makefile.am0000644000000000000000000000675211662447025011654 00000000000000## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: gnulib-tool --import --dir=. --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs gnupload gpl-3.0 havelib lib-symbol-versions maintainer-makefile manywarnings pmccabe2html update-copyright valgrind-tests warnings AUTOMAKE_OPTIONS = 1.5 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = EXTRA_DIST += m4/gnulib-cache.m4 AM_CPPFLAGS = AM_CFLAGS = noinst_LTLIBRARIES += libgnu.la libgnu_la_SOURCES = libgnu_la_LIBADD = $(gl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) libgnu_la_LDFLAGS += -no-undefined ## begin gnulib module gendocs EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh ## end gnulib module gendocs ## begin gnulib module gnumakefile distclean-local: clean-GNUmakefile clean-GNUmakefile: test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || : EXTRA_DIST += $(top_srcdir)/GNUmakefile ## end gnulib module gnumakefile ## begin gnulib module gnupload EXTRA_DIST += $(top_srcdir)/build-aux/gnupload ## end gnulib module gnupload ## begin gnulib module havelib EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath ## end gnulib module havelib ## begin gnulib module maintainer-makefile EXTRA_DIST += $(top_srcdir)/maint.mk ## end gnulib module maintainer-makefile ## begin gnulib module pmccabe2html EXTRA_DIST += $(top_srcdir)/build-aux/pmccabe2html $(top_srcdir)/build-aux/pmccabe.css ## end gnulib module pmccabe2html ## begin gnulib module update-copyright EXTRA_DIST += $(top_srcdir)/build-aux/update-copyright ## end gnulib module update-copyright ## begin gnulib module useless-if-before-free EXTRA_DIST += $(top_srcdir)/build-aux/useless-if-before-free ## end gnulib module useless-if-before-free ## begin gnulib module vc-list-files EXTRA_DIST += $(top_srcdir)/build-aux/vc-list-files ## end gnulib module vc-list-files ## begin gnulib module dummy libgnu_la_SOURCES += dummy.c ## end gnulib module dummy mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : gss-1.0.2/gl/Makefile.in0000644000000000000000000010431011663554705011657 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: gnulib-tool --import --dir=. --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs gnupload gpl-3.0 havelib lib-symbol-versions maintainer-makefile manywarnings pmccabe2html update-copyright valgrind-tests warnings VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = gl DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = am_libgnu_la_OBJECTS = dummy.lo libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS) AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.5 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = libgnu.la EXTRA_DIST = m4/gnulib-cache.m4 $(top_srcdir)/build-aux/gendocs.sh \ $(top_srcdir)/GNUmakefile $(top_srcdir)/build-aux/gnupload \ $(top_srcdir)/build-aux/config.rpath $(top_srcdir)/maint.mk \ $(top_srcdir)/build-aux/pmccabe2html \ $(top_srcdir)/build-aux/pmccabe.css \ $(top_srcdir)/build-aux/update-copyright \ $(top_srcdir)/build-aux/useless-if-before-free \ $(top_srcdir)/build-aux/vc-list-files BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CPPFLAGS = AM_CFLAGS = libgnu_la_SOURCES = dummy.c libgnu_la_LIBADD = $(gl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits gl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits gl/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(AM_V_CCLD)$(libgnu_la_LINK) $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ ctags-recursive install install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-local distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ mostlyclean-local pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am distclean-local: clean-GNUmakefile clean-GNUmakefile: test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || : mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/gl/m4/0000755000000000000000000000000011663555055010212 500000000000000gss-1.0.2/gl/m4/00gnulib.m40000644000000000000000000000252211662447025012011 00000000000000# 00gnulib.m4 serial 2 dnl Copyright (C) 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file must be named something that sorts before all other dnl gnulib-provided .m4 files. It is needed until such time as we can dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics. # AC_DEFUN_ONCE([NAME], VALUE) # ---------------------------- # Define NAME to expand to VALUE on the first use (whether by direct # expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. # Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This # definition is slower than the version in Autoconf 2.64, because it # can only use interfaces that existed since 2.59; but it achieves the # same effect. Quoting is necessary to avoid confusing Automake. m4_version_prereq([2.63.263], [], [m4_define([AC][_DEFUN_ONCE], [AC][_DEFUN([$1], [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl [AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) # gl_00GNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file prior to all other gnulib .m4 files. AC_DEFUN([gl_00GNULIB]) gss-1.0.2/gl/m4/gnulib-cache.m40000644000000000000000000000426711662447025012722 00000000000000# Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the specification of how gnulib-tool is used. # It acts as a cache: It is written and read by gnulib-tool. # In projects that use version control, this file is meant to be put under # version control, like the configure.ac and various Makefile.am files. # Specification in the form of a command-line invocation: # gnulib-tool --import --dir=. --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs gnupload gpl-3.0 havelib lib-symbol-versions maintainer-makefile manywarnings pmccabe2html update-copyright valgrind-tests warnings # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([gl/override]) gl_MODULES([ autobuild fdl-1.3 gendocs gnupload gpl-3.0 havelib lib-symbol-versions maintainer-makefile manywarnings pmccabe2html update-copyright valgrind-tests warnings ]) gl_AVOID([]) gl_SOURCE_BASE([gl]) gl_M4_BASE([gl/m4]) gl_PO_BASE([]) gl_DOC_BASE([doc]) gl_TESTS_BASE([gl/tests]) gl_LIB([libgnu]) gl_MAKEFILE_NAME([]) gl_LIBTOOL gl_MACRO_PREFIX([gl]) gl_PO_DOMAIN([]) gl_WITNESS_C_DOMAIN([]) gl_VC_FILES([false]) gss-1.0.2/gl/m4/ld-version-script.m40000644000000000000000000000275711662447025013767 00000000000000# ld-version-script.m4 serial 2 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # FIXME: The test below returns a false positive for mingw # cross-compiles, 'local:' statements does not reduce number of # exported symbols in a DLL. Use --disable-ld-version-script to work # around the problem. # gl_LD_VERSION_SCRIPT # -------------------- # Check if LD supports linker scripts, and define automake conditional # HAVE_LD_VERSION_SCRIPT if so. AC_DEFUN([gl_LD_VERSION_SCRIPT], [ AC_ARG_ENABLE([ld-version-script], AS_HELP_STRING([--enable-ld-version-script], [enable linker version script (default is enabled when possible)]), [have_ld_version_script=$enableval], []) if test -z "$have_ld_version_script"; then AC_MSG_CHECKING([if LD -Wl,--version-script works]) save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" cat > conftest.map < /dev/null 2>&1; then opt_valgrind_tests=yes VALGRIND="$VALGRIND $OPTS" else opt_valgrind_tests=no VALGRIND= fi AC_MSG_CHECKING([whether self tests are run under valgrind]) AC_MSG_RESULT($opt_valgrind_tests) ]) gss-1.0.2/gl/m4/gnulib-common.m40000644000000000000000000003276011662450052013140 00000000000000# gnulib-common.m4 serial 31 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_COMMON # is expanded unconditionally through gnulib-tool magic. AC_DEFUN([gl_COMMON], [ dnl Use AC_REQUIRE here, so that the code is expanded once only. AC_REQUIRE([gl_00GNULIB]) AC_REQUIRE([gl_COMMON_BODY]) ]) AC_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of draft C1X. */ #ifndef _Noreturn # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ]) AH_VERBATIM([isoc99_inline], [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for MacOS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif]) AH_VERBATIM([unused_parameter], [/* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif ]) dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not dnl to /dev/tty, so they can be redirected to log files. Such diagnostics dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ ]) # gl_MODULE_INDICATOR_CONDITION # expands to a C preprocessor expression that evaluates to 1 or 0, depending # whether a gnulib module that has been requested shall be considered present # or not. m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) # gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) # sets the shell variable that indicates the presence of the given module to # a C preprocessor expression that will evaluate to 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], [ gl_MODULE_INDICATOR_SET_VARIABLE_AUX( [GNULIB_[]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], [gl_MODULE_INDICATOR_CONDITION]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) # modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. # The shell variable's value is a C preprocessor expression that evaluates # to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], [ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], [ dnl Simplify the expression VALUE || 1 to 1. $1=1 ], [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], [gl_MODULE_INDICATOR_CONDITION])]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) # modifies the shell variable to include the given condition. The shell # variable's value is a C preprocessor expression that evaluates to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], [ dnl Simplify the expression 1 || CONDITION to 1. if test "$[]$1" != 1; then dnl Simplify the expression 0 || CONDITION to CONDITION. if test "$[]$1" = 0; then $1=$2 else $1="($[]$1 || $2)" fi fi ]) # gl_MODULE_INDICATOR([modulename]) # defines a C macro indicating the presence of the given module # in a location where it can be used. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 0 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR], [ AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [gl_MODULE_INDICATOR_CONDITION], [Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module $1 shall be considered present.]) ]) # gl_MODULE_INDICATOR_FOR_TESTS([modulename]) # defines a C macro indicating the presence of the given module # in lib or tests. This is useful to determine whether the module # should be tested. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [ AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], [Define to 1 when the gnulib module $1 should be tested.]) ]) # gl_ASSERT_NO_GNULIB_POSIXCHECK # asserts that there will never be a need to #define GNULIB_POSIXCHECK. # and thereby enables an optimization of configure and config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], [ dnl Override gl_WARN_ON_USE_PREPARE. dnl But hide this definition from 'aclocal'. AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) ]) # gl_ASSERT_NO_GNULIB_TESTS # asserts that there will be no gnulib tests in the scope of the configure.ac # and thereby enables an optimization of config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], [ dnl Override gl_MODULE_INDICATOR_FOR_TESTS. AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) ]) # Test whether exists. # Set HAVE_FEATURES_H. AC_DEFUN([gl_FEATURES_H], [ AC_CHECK_HEADERS_ONCE([features.h]) if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi AC_SUBST([HAVE_FEATURES_H]) ]) # m4_foreach_w # is a backport of autoconf-2.59c's m4_foreach_w. # Remove this macro when we can assume autoconf >= 2.60. m4_ifndef([m4_foreach_w], [m4_define([m4_foreach_w], [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) # AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) # ---------------------------------------------------- # Backport of autoconf-2.63b's macro. # Remove this macro when we can assume autoconf >= 2.64. m4_ifndef([AS_VAR_IF], [m4_define([AS_VAR_IF], [AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. # This is like AC_PROG_CC_C99, except that # - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60, # - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC # , # but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 # . # Remaining problems: # - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options # to CC twice # . # - AC_PROG_CC_STDC is likely to change when C1X is an ISO standard. AC_DEFUN([gl_PROG_CC_C99], [ dnl Change that version number to the minimum Autoconf version that supports dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. m4_version_prereq([9.0], [AC_REQUIRE([AC_PROG_CC_C99])], [AC_REQUIRE([AC_PROG_CC_STDC])]) ]) # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override # the values. AC_DEFUN([gl_PROG_AR_RANLIB], [ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler dnl as "cc", and GCC as "gcc". They have different object file formats and dnl library formats. In particular, the GNU binutils programs ar, ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], [ #ifdef __ACK__ Amsterdam #endif ], [gl_cv_c_amsterdam_compiler=yes], [gl_cv_c_amsterdam_compiler=no]) ]) if test -z "$AR"; then if test $gl_cv_c_amsterdam_compiler = yes; then AR='cc -c.a' if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl Use the Automake-documented default values for AR and ARFLAGS, dnl but prefer ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cru' fi fi else if test -z "$ARFLAGS"; then ARFLAGS='cru' fi fi AC_SUBST([AR]) AC_SUBST([ARFLAGS]) if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else dnl Use the ranlib program if it is available. AC_PROG_RANLIB fi fi AC_SUBST([RANLIB]) ]) # AC_PROG_MKDIR_P # is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix # for interoperability with automake-1.9.6 from autoconf-2.62. # Remove this macro when we can assume autoconf >= 2.62 or # autoconf >= 2.60 && automake >= 1.10. m4_ifdef([AC_PROG_MKDIR_P], [ dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed. m4_define([AC_PROG_MKDIR_P], m4_defn([AC_PROG_MKDIR_P])[ AC_SUBST([MKDIR_P])])], [ dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P. AC_DEFUN_ONCE([AC_PROG_MKDIR_P], [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake MKDIR_P='$(mkdir_p)' AC_SUBST([MKDIR_P])])]) # AC_C_RESTRICT # This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61, # so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++ # works. # This definition can be removed once autoconf >= 2.62 can be assumed. m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.62]),[-1],[ AC_DEFUN([AC_C_RESTRICT], [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], [ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[typedef int * int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; }]], [[int s[1]; int * $ac_kw t = s; t[0] = 0; return foo(t)]])], [ac_cv_c_restrict=$ac_kw]) test "$ac_cv_c_restrict" != no && break done ]) AH_VERBATIM([restrict], [/* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict, even though the corresponding Sun C compiler does, which causes "#define restrict _Restrict" in the previous line. Perhaps some future version of Sun C++ will work with _Restrict; if so, it'll probably define __RESTRICT, just as Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict #endif]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ]) ]) # gl_BIGENDIAN # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. # Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some # macros invoke AC_C_BIGENDIAN with arguments. AC_DEFUN([gl_BIGENDIAN], [ AC_C_BIGENDIAN ]) # gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) # is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not # output a spurious "(cached)" mark in the midst of other configure output. # This macro should be used instead of AC_CACHE_VAL when it is not surrounded # by an AC_MSG_CHECKING/AC_MSG_RESULT pair. AC_DEFUN([gl_CACHE_VAL_SILENT], [ saved_as_echo_n="$as_echo_n" as_echo_n=':' AC_CACHE_VAL([$1], [$2]) as_echo_n="$saved_as_echo_n" ]) gss-1.0.2/gl/m4/autobuild.m40000644000000000000000000000201011662447025012351 00000000000000# autobuild.m4 serial 7 dnl Copyright (C) 2004, 2006-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # Usage: AB_INIT([MODE]). AC_DEFUN([AB_INIT], [ AC_REQUIRE([AC_CANONICAL_BUILD]) AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$AB_PACKAGE"; then AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} fi AC_MSG_NOTICE([autobuild project... $AB_PACKAGE]) if test -z "$AB_VERSION"; then AB_VERSION=${PACKAGE_VERSION:-$VERSION} fi AC_MSG_NOTICE([autobuild revision... $AB_VERSION]) hostname=`hostname` if test "$hostname"; then AC_MSG_NOTICE([autobuild hostname... $hostname]) fi ifelse([$1],[],,[AC_MSG_NOTICE([autobuild mode... $1])]) date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` if test "$?" != 0; then date=`date` fi if test "$date"; then AC_MSG_NOTICE([autobuild timestamp... $date]) fi ]) gss-1.0.2/gl/m4/gnulib-comp.m40000644000000000000000000002175311662447025012614 00000000000000# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2011 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from ./configure.ac, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([gl_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable AC_REQUIRE([gl_PROG_AR_RANLIB]) # Code from module autobuild: AB_INIT # Code from module fdl-1.3: # Code from module gendocs: # Code from module gnumakefile: # Code from module gnupload: # Code from module gpl-3.0: # Code from module havelib: # Code from module lib-symbol-versions: # Code from module maintainer-makefile: # Code from module manywarnings: # Code from module pmccabe2html: # Code from module update-copyright: # Code from module useless-if-before-free: # Code from module valgrind-tests: # Code from module vc-list-files: # Code from module warnings: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([gl_INIT], [ AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) gl_cond_libtool=true gl_m4_base='gl/m4' m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) m4_pushdef([gl_LIBSOURCES_LIST], []) m4_pushdef([gl_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='gl' # Autoconf 2.61a.99 and earlier don't support linking a file only # in VPATH builds. But since GNUmakefile is for maintainer use # only, it does not matter if we skip the link with older autoconf. # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH # builds, so use a shell variable to bypass this. GNUmakefile=GNUmakefile m4_if(m4_version_compare([2.61a.100], m4_defn([m4_PACKAGE_VERSION])), [1], [], [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [], [GNUmakefile=$GNUmakefile])]) gl_LD_VERSION_SCRIPT AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER], [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])]) AC_PATH_PROG([PMCCABE], [pmccabe], [false]) gl_VALGRIND_TESTS AC_SUBST([WARN_CFLAGS]) # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || for gl_file in ]gl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([gl_LIBSOURCES_DIR]) m4_popdef([gl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gl_libobjs= gl_ltlibobjs= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" done fi AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) m4_pushdef([gltests_LIBSOURCES_LIST], []) m4_pushdef([gltests_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='gl/tests' changequote(,)dnl gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS changequote([, ])dnl AC_SUBST([gltests_WITNESS]) gl_module_indicator_condition=$gltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) gl_VALGRIND_TESTS m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(gltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || for gl_file in ]gltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([gltests_LIBSOURCES_DIR]) m4_popdef([gltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gltests_libobjs= gltests_ltlibobjs= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" done fi AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_LIBOBJ], [ AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gl_LIBSOURCES_DIR], [gl]) m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_LIBOBJ], [ AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gltests_LIBSOURCES_DIR], [gl/tests]) m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([gl_FILE_LIST], [ build-aux/config.rpath build-aux/gendocs.sh build-aux/gnupload build-aux/pmccabe.css build-aux/pmccabe2html build-aux/update-copyright build-aux/useless-if-before-free build-aux/vc-list-files doc/fdl-1.3.texi doc/gendocs_template doc/gpl-3.0.texi lib/dummy.c m4/00gnulib.m4 m4/autobuild.m4 m4/gnulib-common.m4 m4/ld-version-script.m4 m4/lib-ld.m4 m4/lib-link.m4 m4/lib-prefix.m4 m4/manywarnings.m4 m4/valgrind-tests.m4 m4/warnings.m4 top/GNUmakefile top/maint.mk ]) gss-1.0.2/gl/m4/warnings.m40000644000000000000000000000265711662447025012232 00000000000000# warnings.m4 serial 5 dnl Copyright (C) 2008-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # gl_AS_VAR_APPEND(VAR, VALUE) # ---------------------------- # Provide the functionality of AS_VAR_APPEND if Autoconf does not have it. m4_ifdef([AS_VAR_APPEND], [m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])], [m4_define([gl_AS_VAR_APPEND], [AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])]) # gl_WARN_ADD(PARAMETER, [VARIABLE = WARN_CFLAGS]) # ------------------------------------------------ # Adds parameter to WARN_CFLAGS if the compiler supports it. For example, # gl_WARN_ADD([-Wparentheses]). AC_DEFUN([gl_WARN_ADD], dnl FIXME: gl_Warn must be used unquoted until we can assume dnl autoconf 2.64 or newer. [AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_$1])dnl AC_CACHE_CHECK([whether compiler handles $1], m4_defn([gl_Warn]), [ gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="${CPPFLAGS} $1" AC_PREPROC_IFELSE([AC_LANG_PROGRAM([])], [AS_VAR_SET(gl_Warn, [yes])], [AS_VAR_SET(gl_Warn, [no])]) CPPFLAGS="$gl_save_CPPFLAGS" ]) AS_VAR_IF(gl_Warn, [yes], [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])]) AS_VAR_POPDEF([gl_Warn])dnl m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])], [])])dnl ]) gss-1.0.2/tests/0000755000000000000000000000000011663555055010432 500000000000000gss-1.0.2/tests/krb5context.key0000644000000000000000000000022411361023201013304 00000000000000-----BEGIN SHISHI KEY----- Keytype: 3 (des-cbc-md5) Principal: host/latte.josefsson.org Realm: JOSEFSSON.ORG s3WXrcITWPE= -----END SHISHI KEY----- gss-1.0.2/tests/shishi.conf0000644000000000000000000000001511545156215012476 00000000000000quick-random gss-1.0.2/tests/utils.c0000644000000000000000000000152611546676457011674 00000000000000#ifndef __attribute__ /* This feature is available in gcc versions 2.5 and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) # define __attribute__(Spec) /* empty */ # endif #endif static void fail (const char *format, ...) __attribute__ ((format (printf, 1, 2))); static void success (const char *format, ...) __attribute__ ((format (printf, 1, 2))); static int debug = 0; static int error_count = 0; static int break_on_error = 0; static void fail (const char *format, ...) { va_list arg_ptr; va_start (arg_ptr, format); vfprintf (stderr, format, arg_ptr); va_end (arg_ptr); error_count++; if (break_on_error) exit (EXIT_FAILURE); } static void success (const char *format, ...) { va_list arg_ptr; va_start (arg_ptr, format); if (debug) vfprintf (stdout, format, arg_ptr); va_end (arg_ptr); } gss-1.0.2/tests/Makefile.am0000644000000000000000000000324711546676326012421 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers AM_LDFLAGS = -no-install LDADD = ../lib/libgss.la @LTLIBINTL@ TESTS_ENVIRONMENT = \ SHISHI_KEYS=$(srcdir)/krb5context.key \ SHISHI_TICKETS=$(srcdir)/krb5context.tkt \ SHISHI_CONFIG=$(srcdir)/shishi.conf \ SHISHI_HOME=$(srcdir) \ SHISHI_USER=ignore-this-warning \ THREADSAFETY_FILES="$(top_srcdir)/lib/*.c $(top_srcdir)/lib/krb5/*.c" \ $(VALGRIND) buildtests = basic saslname if KRB5 buildtests += krb5context endif TESTS = $(buildtests) threadsafety check_PROGRAMS = $(buildtests) dist_check_SCRIPTS = threadsafety krb5context_LDADD = $(LDADD) @LTLIBSHISHI@ EXTRA_DIST = krb5context.key krb5context.tkt utils.c shishi.conf localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ gss-1.0.2/tests/krb5context.tkt0000644000000000000000000002166211662453474013356 00000000000000name:NULL type:SEQUENCE name:pvno type:INTEGER value:0x05 name:msg-type type:INTEGER value:0x0b name:crealm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:cname type:SEQUENCE name:name-type type:INTEGER value:0x00 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:6a6173 name:ticket type:SEQUENCE name:tkt-vno type:INTEGER value:0x05 name:realm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:6b7262746774 name:?2 type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:2cfc45fc973b8a8f8dc9dbdba1e5b7fc6d1c6d7929abb91ddac6c6dc5a96eafdbf38d24b2e4e8847215b2d47c771310b6f2ccf6ad4d2a961d37f466810c6f66941e776bdfeaa712a78b346de634efb3e524c36877bf9e393c615f052cf6dadd256304894b93a77d891a7fa738c636146c35fa379b7c4bc9fbde7224bd45d992ab9c5ac3c041419872beaec83c6fa1e95 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:db294db40293d895918c50032d1666b0e0eb2408202a9282d68173af833a32a412ceb91a51f29aadc2913de2b01e779b1dd85528151653646b14c4be2b93a2fccc906011a024a975153acc9b6be255093d5ce7912c651bf4cb04b041e60f04d00b6364b4023b3284f436ef1eeaa7aae15d77ce643daff4e764433c1af43c4591d23e2945d0b27b9709e3c79629484c1e9aefba783570dff7848e6c1b3f861de74a89250fbd125ab2 -----BEGIN SHISHI KDC-REP----- a4IBzjCCAcqgAwIBBaEDAgELow8bDUpPU0VGU1NPTi5PUkekEDAOoAMCAQChBzAF GwNqYXOlgeFhgd4wgdugAwIBBaEPGw1KT1NFRlNTT04uT1JHoiIwIKADAgEBoRkw FxsGa3JidGd0Gw1KT1NFRlNTT04uT1JHo4GeMIGboAMCAQOigZMEgZAs/EX8lzuK j43J29uh5bf8bRxteSmruR3axsbcWpbq/b840ksuTohHIVstR8dxMQtvLM9q1NKp YdN/RmgQxvZpQed2vf6qcSp4s0beY077PlJMNod7+eOTxhXwUs9trdJWMEiUuTp3 2JGn+nOMY2FGw1+jebfEvJ+95yJL1F2ZKrnFrDwEFBmHK+rsg8b6HpWmgbYwgbOg AwIBA6KBqwSBqNspTbQCk9iVkYxQAy0WZrDg6yQIICqSgtaBc6+DOjKkEs65GlHy mq3CkT3isB53mx3YVSgVFlNkaxTEviuTovzMkGARoCSpdRU6zJtr4lUJPVznkSxl G/TLBLBB5g8E0AtjZLQCOzKE9DbvHuqnquFdd85kPa/052RDPBr0PEWR0j4pRdCy e5cJ48eWKUhMHprvung1cN/3hI5sGz+GHedKiSUPvRJasg== -----END SHISHI KDC-REP----- name:NULL type:SEQUENCE name:key type:SEQUENCE name:keytype type:INTEGER value:0x03 name:keyvalue type:OCT_STR value:d63e808cfe7f643d name:last-req type:SEQ_OF name:NULL type:SEQUENCE name:lr-type type:INTEGER name:lr-value type:TIME name:nonce type:INTEGER value:0x0c418523 name:flags type:BIT_STR value(32):00400000 name:authtime type:TIME value:20040711155558Z name:endtime type:TIME value:20240711155558Z name:srealm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:6b7262746774 name:?2 type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 -----BEGIN SHISHI EncKDCRepPart----- eYGIMIGFoBMwEaADAgEDoQoECNY+gIz+f2Q9oQIwAKIGAgQMQYUjpAcDBQAAQAAA pREYDzIwMDQwNzExMTU1NTU4WqcRGA8yMDI0MDcxMTE1NTU1OFqpDxsNSk9TRUZT U09OLk9SR6oiMCCgAwIBAaEZMBcbBmtyYnRndBsNSk9TRUZTU09OLk9SRw== -----END SHISHI EncKDCRepPart----- name:NULL type:SEQUENCE name:tkt-vno type:INTEGER value:0x05 name:realm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:6b7262746774 name:?2 type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:2cfc45fc973b8a8f8dc9dbdba1e5b7fc6d1c6d7929abb91ddac6c6dc5a96eafdbf38d24b2e4e8847215b2d47c771310b6f2ccf6ad4d2a961d37f466810c6f66941e776bdfeaa712a78b346de634efb3e524c36877bf9e393c615f052cf6dadd256304894b93a77d891a7fa738c636146c35fa379b7c4bc9fbde7224bd45d992ab9c5ac3c041419872beaec83c6fa1e95 -----BEGIN SHISHI Ticket----- YYHeMIHboAMCAQWhDxsNSk9TRUZTU09OLk9SR6IiMCCgAwIBAaEZMBcbBmtyYnRn dBsNSk9TRUZTU09OLk9SR6OBnjCBm6ADAgEDooGTBIGQLPxF/Jc7io+NydvboeW3 /G0cbXkpq7kd2sbG3FqW6v2/ONJLLk6IRyFbLUfHcTELbyzPatTSqWHTf0ZoEMb2 aUHndr3+qnEqeLNG3mNO+z5STDaHe/njk8YV8FLPba3SVjBIlLk6d9iRp/pzjGNh RsNfo3m3xLyfveciS9RdmSq5xaw8BBQZhyvq7IPG+h6V -----END SHISHI Ticket----- name:NULL type:SEQUENCE name:pvno type:INTEGER value:0x05 name:msg-type type:INTEGER value:0x0d name:crealm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:cname type:SEQUENCE name:name-type type:INTEGER value:0x00 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:6a6173 name:ticket type:SEQUENCE name:tkt-vno type:INTEGER value:0x05 name:realm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:686f7374 name:?2 type:GENERALSTRING value:6c617474652e6a6f73656673736f6e2e6f7267 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:80f8af4800aecb22c4852cc25cad377332375c7365f4eca15a99c1c13ff785be023e7d0315bd53d2937541aada9b672c62b1df632d33cb85de83e7e7efa2f0fa6551dcab98ac0a910fdb916ea816554fb9aed666133a58984be22d37da46d98252b883a0acee17d8c98c097428866a0906a1dc70c1909eb511618fdadf8c435c39ec154a564a1a2b7508051c663ca8a5 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:87359dbbdd34da11cc17e22e1edb181f14be09749c81af24bb00c0ebe4ae9132449e710a4c455b28f48509ca01ef3ff883c7d9da57bca4e37959e45c1e3fca2355236c3edc87233d30577d5d79f5395d29133c44cac7e5af077d0f40c4e8ab1134c86dad8ebc7251e8178e3f8df4eb3ae00760889716ff4443a40d1ba5995d3a48bea574f41a019fc8467a944f3c700233a6fe42e42057b6e4419cd173e483c8cf3119c39e064cda -----BEGIN SHISHI KDC-REP----- bYIB0jCCAc6gAwIBBaEDAgENow8bDUpPU0VGU1NPTi5PUkekEDAOoAMCAQChBzAF GwNqYXOlgeVhgeIwgd+gAwIBBaEPGw1KT1NFRlNTT04uT1JHoiYwJKADAgEBoR0w GxsEaG9zdBsTbGF0dGUuam9zZWZzc29uLm9yZ6OBnjCBm6ADAgEDooGTBIGQgPiv SACuyyLEhSzCXK03czI3XHNl9OyhWpnBwT/3hb4CPn0DFb1T0pN1Qaram2csYrHf Yy0zy4Xeg+fn76Lw+mVR3KuYrAqRD9uRbqgWVU+5rtZmEzpYmEviLTfaRtmCUriD oKzuF9jJjAl0KIZqCQah3HDBkJ61EWGP2t+MQ1w57BVKVkoaK3UIBRxmPKilpoG2 MIGzoAMCAQOigasEgaiHNZ273TTaEcwX4i4e2xgfFL4JdJyBryS7AMDr5K6RMkSe cQpMRVso9IUJygHvP/iDx9naV7yk43lZ5FweP8ojVSNsPtyHIz0wV31defU5XSkT PETKx+WvB30PQMToqxE0yG2tjrxyUegXjj+N9Os64AdgiJcW/0RDpA0bpZldOki+ pXT0GgGfyEZ6lE88cAIzpv5C5CBXtuRBnNFz5IPIzzEZw54GTNo= -----END SHISHI KDC-REP----- name:NULL type:SEQUENCE name:key type:SEQUENCE name:keytype type:INTEGER value:0x03 name:keyvalue type:OCT_STR value:37705d1c54a84683 name:last-req type:SEQ_OF name:NULL type:SEQUENCE name:lr-type type:INTEGER name:lr-value type:TIME name:nonce type:INTEGER value:0x22cc41a9 name:flags type:BIT_STR value(32):00000000 name:authtime type:TIME value:20040711155559Z name:endtime type:TIME value:20240711155558Z name:srealm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:686f7374 name:?2 type:GENERALSTRING value:6c617474652e6a6f73656673736f6e2e6f7267 -----BEGIN SHISHI EncKDCRepPart----- eYGMMIGJoBMwEaADAgEDoQoECDdwXRxUqEaDoQIwAKIGAgQizEGppAcDBQAAAAAA pREYDzIwMDQwNzExMTU1NTU5WqcRGA8yMDI0MDcxMTE1NTU1OFqpDxsNSk9TRUZT U09OLk9SR6omMCSgAwIBAaEdMBsbBGhvc3QbE2xhdHRlLmpvc2Vmc3Nvbi5vcmc= -----END SHISHI EncKDCRepPart----- name:NULL type:SEQUENCE name:tkt-vno type:INTEGER value:0x05 name:realm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:686f7374 name:?2 type:GENERALSTRING value:6c617474652e6a6f73656673736f6e2e6f7267 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:80f8af4800aecb22c4852cc25cad377332375c7365f4eca15a99c1c13ff785be023e7d0315bd53d2937541aada9b672c62b1df632d33cb85de83e7e7efa2f0fa6551dcab98ac0a910fdb916ea816554fb9aed666133a58984be22d37da46d98252b883a0acee17d8c98c097428866a0906a1dc70c1909eb511618fdadf8c435c39ec154a564a1a2b7508051c663ca8a5 -----BEGIN SHISHI Ticket----- YYHiMIHfoAMCAQWhDxsNSk9TRUZTU09OLk9SR6ImMCSgAwIBAaEdMBsbBGhvc3Qb E2xhdHRlLmpvc2Vmc3Nvbi5vcmejgZ4wgZugAwIBA6KBkwSBkID4r0gArssixIUs wlytN3MyN1xzZfTsoVqZwcE/94W+Aj59AxW9U9KTdUGq2ptnLGKx32MtM8uF3oPn 5++i8PplUdyrmKwKkQ/bkW6oFlVPua7WZhM6WJhL4i032kbZglK4g6Cs7hfYyYwJ dCiGagkGodxwwZCetRFhj9rfjENcOewVSlZKGit1CAUcZjyopQ== -----END SHISHI Ticket----- gss-1.0.2/tests/saslname.c0000644000000000000000000001357411546676340012334 00000000000000/* saslname.c --- Test of new SASL GS2 related GSS-API functions * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "config.h" #include #include #include #include #include /* Get GSS prototypes. */ #include #include "utils.c" int main (int argc, char *argv[]) { gss_uint32 maj_stat, min_stat; gss_buffer_desc bufdesc; gss_OID oid; do if (strcmp (argv[argc - 1], "-v") == 0 || strcmp (argv[argc - 1], "--verbose") == 0) debug = 1; else if (strcmp (argv[argc - 1], "-b") == 0 || strcmp (argv[argc - 1], "--break-on-error") == 0) break_on_error = 1; else if (strcmp (argv[argc - 1], "-h") == 0 || strcmp (argv[argc - 1], "-?") == 0 || strcmp (argv[argc - 1], "--help") == 0) { printf ("Usage: %s [-vbh?] [--verbose] [--break-on-error] [--help]\n", argv[0]); return 1; } while (argc-- > 1); maj_stat = gss_inquire_mech_for_saslname (&min_stat, NULL, NULL); if (maj_stat == GSS_S_CALL_INACCESSIBLE_READ) success ("gss_inquire_mech_for_saslname (NULL, NULL) success\n"); else fail ("gss_inquire_mech_for_saslname (NULL, NULL) failed (%d,%d)\n", maj_stat, min_stat); bufdesc.value = NULL; bufdesc.length = 0; maj_stat = gss_inquire_mech_for_saslname (&min_stat, &bufdesc, NULL); if (maj_stat == GSS_S_BAD_MECH) success ("gss_inquire_mech_for_saslname (EMPTY, NULL) success\n"); else fail ("gss_inquire_mech_for_saslname (EMPTY, NULL) failed (%d,%d)\n", maj_stat, min_stat); #ifdef USE_KERBEROS5 bufdesc.length = 8; bufdesc.value = malloc (bufdesc.length); memcpy (bufdesc.value, "GS2-KRB5", bufdesc.length); maj_stat = gss_inquire_mech_for_saslname (&min_stat, &bufdesc, NULL); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_mech_for_saslname (GS2-KRB5, NULL) success\n"); else fail ("gss_inquire_mech_for_saslname (GS2-KRB5, NULL) failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_inquire_mech_for_saslname (&min_stat, &bufdesc, &oid); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_mech_for_saslname (GS2-KRB5, OID) success\n"); else fail ("gss_inquire_mech_for_saslname (GS2-KRB5, OID) failed (%d,%d)\n", maj_stat, min_stat); if (oid != GSS_KRB5 || !gss_oid_equal (oid, GSS_KRB5)) fail ("GS2-OID not Krb5?!\n"); free (bufdesc.value); #endif maj_stat = gss_inquire_saslname_for_mech (&min_stat, NULL, NULL, NULL, NULL); if (maj_stat == GSS_S_CALL_INACCESSIBLE_READ) success ("gss_inquire_saslname_for_mech (NULL) success\n"); else fail ("gss_inquire_saslname_for_mech (NULL) failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_inquire_saslname_for_mech (&min_stat, GSS_C_NT_USER_NAME, NULL, NULL, NULL); if (maj_stat == GSS_S_BAD_MECH) success ("gss_inquire_saslname_for_mech (NT_USER_NAME) success\n"); else fail ("gss_inquire_saslname_for_mech (NT_USER_NAME) failed (%d,%d)\n", maj_stat, min_stat); #ifdef USE_KERBEROS5 maj_stat = gss_inquire_saslname_for_mech (&min_stat, GSS_KRB5, NULL, NULL, NULL); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_saslname_for_mech (GSS-KRB5) success\n"); else fail ("gss_inquire_saslname_for_mech (GSS-KRB5) failed (%d,%d)\n", maj_stat, min_stat); bufdesc.value = NULL; bufdesc.length = 0; maj_stat = gss_inquire_saslname_for_mech (&min_stat, GSS_KRB5, &bufdesc, NULL, NULL); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_saslname_for_mech (GSS-KRB5) success: %.*s\n", (int) bufdesc.length, (char *) bufdesc.value); else fail ("gss_inquire_saslname_for_mech (GSS-KRB5) failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_buffer (&min_stat, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_inquire_saslname_for_mech (&min_stat, GSS_KRB5, NULL, &bufdesc, NULL); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_saslname_for_mech (GSS-KRB5-2) success: %.*s\n", (int) bufdesc.length, (char *) bufdesc.value); else fail ("gss_inquire_saslname_for_mech (GSS-KRB5-2) failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_buffer (&min_stat, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_inquire_saslname_for_mech (&min_stat, GSS_KRB5, NULL, NULL, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_saslname_for_mech (GSS-KRB5-3) success: %.*s\n", (int) bufdesc.length, (char *) bufdesc.value); else fail ("gss_inquire_saslname_for_mech (GSS-KRB5-3) failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_buffer (&min_stat, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); #endif if (debug) printf ("Basic self tests done with %d errors\n", error_count); return error_count ? 1 : 0; } gss-1.0.2/tests/Makefile.in0000644000000000000000000007535311663554705012435 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @KRB5_TRUE@am__append_1 = krb5context TESTS = $(am__EXEEXT_2) threadsafety check_PROGRAMS = $(am__EXEEXT_2) subdir = tests DIST_COMMON = $(dist_check_SCRIPTS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @KRB5_TRUE@am__EXEEXT_1 = krb5context$(EXEEXT) am__EXEEXT_2 = basic$(EXEEXT) saslname$(EXEEXT) $(am__EXEEXT_1) basic_SOURCES = basic.c basic_OBJECTS = basic.$(OBJEXT) basic_LDADD = $(LDADD) basic_DEPENDENCIES = ../lib/libgss.la AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) am__v_lt_0 = --silent krb5context_SOURCES = krb5context.c krb5context_OBJECTS = krb5context.$(OBJEXT) am__DEPENDENCIES_1 = ../lib/libgss.la krb5context_DEPENDENCIES = $(am__DEPENDENCIES_1) saslname_SOURCES = saslname.c saslname_OBJECTS = saslname.$(OBJEXT) saslname_LDADD = $(LDADD) saslname_DEPENDENCIES = ../lib/libgss.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_$(V)) am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; SOURCES = basic.c krb5context.c saslname.c DIST_SOURCES = basic.c krb5context.c saslname.c ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers AM_LDFLAGS = -no-install LDADD = ../lib/libgss.la @LTLIBINTL@ TESTS_ENVIRONMENT = \ SHISHI_KEYS=$(srcdir)/krb5context.key \ SHISHI_TICKETS=$(srcdir)/krb5context.tkt \ SHISHI_CONFIG=$(srcdir)/shishi.conf \ SHISHI_HOME=$(srcdir) \ SHISHI_USER=ignore-this-warning \ THREADSAFETY_FILES="$(top_srcdir)/lib/*.c $(top_srcdir)/lib/krb5/*.c" \ $(VALGRIND) buildtests = basic saslname $(am__append_1) dist_check_SCRIPTS = threadsafety krb5context_LDADD = $(LDADD) @LTLIBSHISHI@ EXTRA_DIST = krb5context.key krb5context.tkt utils.c shishi.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list basic$(EXEEXT): $(basic_OBJECTS) $(basic_DEPENDENCIES) @rm -f basic$(EXEEXT) $(AM_V_CCLD)$(LINK) $(basic_OBJECTS) $(basic_LDADD) $(LIBS) krb5context$(EXEEXT): $(krb5context_OBJECTS) $(krb5context_DEPENDENCIES) @rm -f krb5context$(EXEEXT) $(AM_V_CCLD)$(LINK) $(krb5context_OBJECTS) $(krb5context_LDADD) $(LIBS) saslname$(EXEEXT): $(saslname_OBJECTS) $(saslname_DEPENDENCIES) @rm -f saslname$(EXEEXT) $(AM_V_CCLD)$(LINK) $(saslname_OBJECTS) $(saslname_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/krb5context.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saslname.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \ $(dist_check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/tests/threadsafety0000755000000000000000000000366711546676326013004 00000000000000#!/bin/sh # Copyright (C) 2004-2011 Simon Josefsson # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file; if not, see http://www.gnu.org/licenses or # write to the Free Software Foundation, Inc., 51 Franklin Street, # Fifth Floor, Boston, MA 02110-1301, USA. FILES="$@" FILES=${FILES:-$THREADSAFETY_FILES} if test -z "$FILES"; then echo "Usage: $0 [FILE...]" exit 1 fi # http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html UNSAFE="asctime basename catgets crypt ctime dbm_clearerr dbm_close dbm_delete dbm_error dbm_fetch dbm_firstkey dbm_nextkey dbm_open dbm_store dirname dlerror drand48 ecvt encrypt endgrent endpwent endutxent fcvt ftw gcvt getc_unlocked getchar_unlocked getdate getenv getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getopt getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getutxent getutxid getutxline gmtime hcreate hdestroy hsearch inet_ntoa l64a lgamma lgammaf lgammal localeconv localtime lrand48 mrand48 nftw nl_langinfo ptsname putc_unlocked putchar_unlocked putenv pututxline rand readdir setenv setgrent setkey setpwent setutxent strerror strtok ttyname unsetenv wcstombs wctomb" set -- $UNSAFE cmd="-e [^_0-9a-z]($1" shift while test "$1"; do cmd="${cmd}|$1" shift done cmd="${cmd})[^_0-9a-z]*\(" if egrep $cmd $FILES; then exit 1 fi exit 0 gss-1.0.2/tests/krb5context.c0000644000000000000000000002363711546676340013002 00000000000000/* krb5context.c --- Kerberos 5 security context self tests. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "config.h" #include #include #include #include #include /* Get GSS prototypes. */ #include /* Get Shishi prototypes. */ #include #include "utils.c" static void display_status_1 (const char *m, OM_uint32 code, int type) { OM_uint32 maj_stat, min_stat; gss_buffer_desc msg; OM_uint32 msg_ctx; msg_ctx = 0; do { maj_stat = gss_display_status (&min_stat, code, type, GSS_C_NO_OID, &msg_ctx, &msg); if (GSS_ERROR (maj_stat)) printf ("GSS-API display_status failed on code %d type %d\n", code, type); else { printf ("GSS-API error %s (%s): %.*s\n", m, type == GSS_C_GSS_CODE ? "major" : "minor", (int) msg.length, (char *) msg.value); gss_release_buffer (&min_stat, &msg); } } while (!GSS_ERROR (maj_stat) && msg_ctx); } static void display_status (const char *msg, OM_uint32 maj_stat, OM_uint32 min_stat) { display_status_1 (msg, maj_stat, GSS_C_GSS_CODE); display_status_1 (msg, min_stat, GSS_C_MECH_CODE); } int main (int argc, char *argv[]) { gss_uint32 maj_stat, min_stat, ret_flags, time_rec; gss_buffer_desc bufdesc, bufdesc2; gss_name_t servername = GSS_C_NO_NAME, name; gss_ctx_id_t cctx = GSS_C_NO_CONTEXT; gss_ctx_id_t sctx = GSS_C_NO_CONTEXT; gss_cred_id_t server_creds; Shishi *handle; size_t i; struct gss_channel_bindings_struct cb; memset (&cb, 0, sizeof (cb)); cb.application_data.length = 3; cb.application_data.value = (char *) "hej"; do if (strcmp (argv[argc - 1], "-v") == 0 || strcmp (argv[argc - 1], "--verbose") == 0) debug = 1; else if (strcmp (argv[argc - 1], "-b") == 0 || strcmp (argv[argc - 1], "--break-on-error") == 0) break_on_error = 1; else if (strcmp (argv[argc - 1], "-h") == 0 || strcmp (argv[argc - 1], "-?") == 0 || strcmp (argv[argc - 1], "--help") == 0) { printf ("Usage: %s [-vbh?] [--verbose] [--break-on-error] [--help]\n", argv[0]); return 1; } while (argc-- > 1); handle = shishi (); /* Name of service. */ bufdesc.value = (char *) "host@latte.josefsson.org"; bufdesc.length = strlen (bufdesc.value); maj_stat = gss_import_name (&min_stat, &bufdesc, GSS_C_NT_HOSTBASED_SERVICE, &servername); if (GSS_ERROR (maj_stat)) fail ("gss_import_name (host/server)\n"); /* Get credential, for server. */ maj_stat = gss_acquire_cred (&min_stat, servername, 0, GSS_C_NULL_OID_SET, GSS_C_ACCEPT, &server_creds, NULL, NULL); if (GSS_ERROR (maj_stat)) { fail ("gss_acquire_cred"); display_status ("acquire credentials", maj_stat, min_stat); } for (i = 0; i < 3; i++) { /* Start client. */ switch (i) { case 0: maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &cctx, servername, GSS_KRB5, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, GSS_C_NO_BUFFER, NULL, &bufdesc2, NULL, NULL); if (maj_stat != GSS_S_CONTINUE_NEEDED) fail ("loop 0 init failure\n"); break; case 1: /* Default OID, channel bindings. */ maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &cctx, servername, GSS_C_NO_OID, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG, 0, &cb, GSS_C_NO_BUFFER, NULL, &bufdesc2, NULL, NULL); if (maj_stat != GSS_S_CONTINUE_NEEDED) fail ("loop 0 init failure\n"); break; case 2: /* No mutual authentication. */ maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &cctx, servername, GSS_KRB5, GSS_C_REPLAY_FLAG | GSS_C_CONF_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, GSS_C_NO_BUFFER, NULL, &bufdesc2, &ret_flags, NULL); if (ret_flags != (GSS_C_REPLAY_FLAG | GSS_C_CONF_FLAG | GSS_C_SEQUENCE_FLAG | GSS_C_PROT_READY_FLAG)) fail ("loop 2 ret_flags failure (%d)\n", ret_flags); if (maj_stat != GSS_S_COMPLETE) fail ("loop 1 init failure\n"); break; default: fail ("default?!\n"); break; } if (GSS_ERROR (maj_stat)) { fail ("gss_accept_sec_context failure\n"); display_status ("accept_sec_context", maj_stat, min_stat); } if (debug) { char *p = bufdesc2.value; Shishi_asn1 apreq = shishi_der2asn1_apreq (handle, p + 17, bufdesc2.length - 17); printf ("\nClient AP-REQ:\n\n"); shishi_apreq_print (handle, stdout, apreq); } /* Start server. */ switch (i) { case 0: maj_stat = gss_accept_sec_context (&min_stat, &sctx, server_creds, &bufdesc2, GSS_C_NO_CHANNEL_BINDINGS, &name, NULL, &bufdesc, &ret_flags, &time_rec, NULL); if (ret_flags != (GSS_C_MUTUAL_FLAG | /* XXX GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG | */ GSS_C_PROT_READY_FLAG)) fail ("loop 0 accept flag failure (%d)\n", ret_flags); break; case 1: maj_stat = gss_accept_sec_context (&min_stat, &sctx, server_creds, &bufdesc2, &cb, &name, NULL, &bufdesc, &ret_flags, &time_rec, NULL); break; case 2: maj_stat = gss_accept_sec_context (&min_stat, &sctx, server_creds, &bufdesc2, GSS_C_NO_CHANNEL_BINDINGS, &name, NULL, &bufdesc, &ret_flags, &time_rec, NULL); break; default: fail ("default?!\n"); break; } if (GSS_ERROR (maj_stat)) { fail ("gss_accept_sec_context failure\n"); display_status ("accept_sec_context", maj_stat, min_stat); } if (debug) { char *p = bufdesc2.value; Shishi_asn1 aprep = shishi_der2asn1_aprep (handle, p + 15, bufdesc.length - 15); printf ("\nServer AP-REP:\n\n"); shishi_aprep_print (handle, stdout, aprep); } switch (i) { case 0: maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &cctx, servername, GSS_KRB5, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, &bufdesc, NULL, &bufdesc2, NULL, NULL); break; case 1: /* Check ret_flags. */ maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &cctx, servername, GSS_KRB5, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, &bufdesc, NULL, &bufdesc2, &ret_flags, &time_rec); if (ret_flags != (GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG | GSS_C_PROT_READY_FLAG)) fail ("loop 1 ret_flags failure (%d)\n", ret_flags); break; /* No case 2. */ default: break; } if (GSS_ERROR (maj_stat)) { fail ("gss_init_sec_context failure (2)\n"); display_status ("init_sec_context", maj_stat, min_stat); } { gss_buffer_desc pt, pt2, ct; int conf_state; gss_qop_t qop_state; pt.value = (char *) "foo"; pt.length = strlen (pt.value) + 1; maj_stat = gss_wrap (&min_stat, cctx, 0, 0, &pt, &conf_state, &ct); if (GSS_ERROR (maj_stat)) { fail ("client gss_wrap failure\n"); display_status ("client wrap", maj_stat, min_stat); } maj_stat = gss_unwrap (&min_stat, sctx, &ct, &pt2, &conf_state, &qop_state); if (GSS_ERROR (maj_stat)) { fail ("server gss_unwrap failure\n"); display_status ("client wrap", maj_stat, min_stat); } if (pt.length != pt2.length || memcmp (pt2.value, pt.value, pt.length) != 0) fail ("wrap+unwrap failed (%d, %d, %.*s)\n", (int) pt.length, (int) pt2.length, (int) pt2.length, (char *) pt2.value); gss_release_buffer (&min_stat, &ct); gss_release_buffer (&min_stat, &pt2); } maj_stat = gss_delete_sec_context (&min_stat, &cctx, GSS_C_NO_BUFFER); if (GSS_ERROR (maj_stat)) { fail ("client gss_delete_sec_context failure\n"); display_status ("client delete_sec_context", maj_stat, min_stat); } maj_stat = gss_delete_sec_context (&min_stat, &sctx, GSS_C_NO_BUFFER); if (GSS_ERROR (maj_stat)) { fail ("server gss_delete_sec_context failure\n"); display_status ("server delete_sec_context", maj_stat, min_stat); } success ("loop %d ok\n", (int) i); } /* Clean up. */ maj_stat = gss_release_cred (&min_stat, &server_creds); if (GSS_ERROR (maj_stat)) { fail ("gss_release_cred"); display_status ("release credentials", maj_stat, min_stat); } maj_stat = gss_release_name (&min_stat, &servername); if (GSS_ERROR (maj_stat)) { fail ("gss_release_name failure\n"); display_status ("gss_release_name", maj_stat, min_stat); } shishi_done (handle); /* We're done. */ if (debug) printf ("Kerberos 5 security context self tests done with %d errors\n", error_count); return error_count ? 1 : 0; } gss-1.0.2/tests/basic.c0000644000000000000000000003231711546676457011617 00000000000000/* basic.c --- Basic GSS self tests. * Copyright (C) 2003-2011 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * GSS is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public * License for more details. * * You should have received a copy of the GNU General Public License * along with GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "config.h" #include #include #include #include #include /* Get GSS prototypes. */ #include #include "utils.c" int main (int argc, char *argv[]) { gss_uint32 maj_stat, min_stat, msgctx; gss_buffer_desc bufdesc, bufdesc2; gss_name_t service; gss_OID_set oids; int n; do if (strcmp (argv[argc - 1], "-v") == 0 || strcmp (argv[argc - 1], "--verbose") == 0) debug = 1; else if (strcmp (argv[argc - 1], "-b") == 0 || strcmp (argv[argc - 1], "--break-on-error") == 0) break_on_error = 1; else if (strcmp (argv[argc - 1], "-h") == 0 || strcmp (argv[argc - 1], "-?") == 0 || strcmp (argv[argc - 1], "--help") == 0) { printf ("Usage: %s [-vbh?] [--verbose] [--break-on-error] [--help]\n", argv[0]); return 1; } while (argc-- > 1); /* OID set tests */ oids = GSS_C_NO_OID_SET; maj_stat = gss_create_empty_oid_set (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_create_empty_oid_set() OK\n"); else fail ("gss_create_empty_oid_set() failed (%d,%d)\n", maj_stat, min_stat); /* Test empty set */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_USER_NAME, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" OID present in empty set => %d\n", n); if (!n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Add an OID */ maj_stat = gss_add_oid_set_member (&min_stat, GSS_C_NT_USER_NAME, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_add_oid_set_member() OK\n"); else fail ("gss_add_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Test set for added OID */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_USER_NAME, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" OID present in set with the OID added to it => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Test set for another OID */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_ANONYMOUS, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" Another OID present in set without the OID => %d\n", n); if (!n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Add another OID */ maj_stat = gss_add_oid_set_member (&min_stat, GSS_C_NT_ANONYMOUS, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_add_oid_set_member() OK\n"); else fail ("gss_add_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Test set for added OID */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_ANONYMOUS, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" Another OID present in set with it added => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Test set for first OID */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_USER_NAME, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" First OID present in set => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_oid_set (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_oid_set() OK\n"); else fail ("gss_release_oid_set() failed (%d,%d)\n", maj_stat, min_stat); /* Check mechs */ oids = GSS_C_NO_OID_SET; maj_stat = gss_indicate_mechs (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_indicate_mechs() OK\n"); else fail ("gss_indicate_mechs() failed (%d,%d)\n", maj_stat, min_stat); #ifdef USE_KERBEROS5 maj_stat = gss_test_oid_set_member (&min_stat, GSS_KRB5, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" kerberos5 supported => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); #endif maj_stat = gss_release_oid_set (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_oid_set() OK\n"); else fail ("gss_release_oid_set() failed (%d,%d)\n", maj_stat, min_stat); #ifdef USE_KERBEROS5 maj_stat = gss_inquire_names_for_mech (&min_stat, GSS_KRB5, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_names_for_mech() OK\n"); else fail ("gss_inquire_names_for_mech() failed (%d,%d)\n", maj_stat, min_stat); /* Check if KRB5 supports PRINCIPAL_NAME name type */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_KRB5_NT_PRINCIPAL_NAME, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" kerberos5 supports PRINCIPAL_NAME name type => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Check if KRB5 supports HOSTBASED NAME name type */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_HOSTBASED_SERVICE, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" kerberos5 supports HOSTBASED_SERVICE name type => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Check if KRB5 supports ANONYMOUS name type */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_ANONYMOUS, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" kerberos5 supports ANONYMOUS name type => %d\n", n); if (!n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_oid_set (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_oid_set() OK\n"); else fail ("gss_release_oid_set() failed (%d,%d)\n", maj_stat, min_stat); #endif /* Check name */ service = NULL; bufdesc.value = (char *) "imap@server.example.org@FOO"; bufdesc.length = strlen (bufdesc.value); maj_stat = gss_import_name (&min_stat, &bufdesc, GSS_C_NT_HOSTBASED_SERVICE, &service); if (maj_stat == GSS_S_COMPLETE) success ("gss_import_name() OK\n"); else fail ("gss_import_name() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_display_name (&min_stat, service, &bufdesc2, NULL); if (maj_stat == GSS_S_COMPLETE) success ("gss_display_name() OK\n"); else fail ("gss_display_name() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" display_name() => %d: %.*s\n", (int) bufdesc2.length, (int) bufdesc2.length, (char *) bufdesc2.value); maj_stat = gss_release_buffer (&min_stat, &bufdesc2); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); #ifdef USE_KERBEROS5 /* NB: "service" resused from previous test */ maj_stat = gss_inquire_mechs_for_name (&min_stat, service, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_mechs_for_name() OK\n"); else fail ("gss_inquire_mechs_for_name() failed (%d,%d)\n", maj_stat, min_stat); /* Check GSS_C_NT_HOSTBASED_SERVICE name type is supported by KRB5 */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_KRB5, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" HOSTBASED_SERVICE supported by kerberos5 => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Dummy OID check */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_ANONYMOUS, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" Dummy oid supported by kerberos5 => %d\n", n); if (!n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_oid_set (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_oid_set() OK\n"); else fail ("gss_release_oid_set() failed (%d,%d)\n", maj_stat, min_stat); #endif /* Release service allocated earlier. */ maj_stat = gss_release_name (&min_stat, &service); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_name() OK\n"); else fail ("gss_release_name() failed (%d,%d)\n", maj_stat, min_stat); /* Check display_status */ msgctx = 0; maj_stat = gss_display_status (&min_stat, GSS_S_COMPLETE, GSS_C_GSS_CODE, GSS_C_NO_OID, &msgctx, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_display_status() OK\n"); else fail ("gss_display_status() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" Display status for GSS_S_COMPLETE => %*s\n", (int) bufdesc.length, (char *) bufdesc.value); maj_stat = gss_release_buffer (&min_stat, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); /* Encapsulate. */ bufdesc.value = (char *) "context token"; bufdesc.length = strlen (bufdesc.value); maj_stat = gss_encapsulate_token (&bufdesc, GSS_C_NT_USER_NAME, &bufdesc2); if (maj_stat == GSS_S_COMPLETE) success ("gss_encapsulate_token() OK\n"); else fail ("gss_encapsulate_token() failed (%d)\n", maj_stat); maj_stat = gss_decapsulate_token (&bufdesc2, GSS_C_NT_ANONYMOUS, &bufdesc); if (maj_stat == GSS_S_DEFECTIVE_TOKEN) success ("gss_decapsulate_token(bad oid) OK\n"); else fail ("gss_decapsulate_token() failed (%d)\n", maj_stat); n = ((char *)bufdesc2.value)[3]; ((char *)bufdesc2.value)[3] = 42; maj_stat = gss_decapsulate_token (&bufdesc2, GSS_C_NT_USER_NAME, &bufdesc); ((char *)bufdesc2.value)[3] = n; if (maj_stat == GSS_S_DEFECTIVE_TOKEN) success ("gss_decapsulate_token(bad length) OK\n"); else fail ("gss_decapsulate_token() failed (%d)\n", maj_stat); maj_stat = gss_decapsulate_token (&bufdesc2, GSS_C_NT_USER_NAME, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_decapsulate_token() OK\n"); else fail ("gss_decapsulate_token() failed (%d)\n", maj_stat); maj_stat = gss_release_buffer (&min_stat, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_buffer (&min_stat, &bufdesc2); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf ("Basic self tests done with %d errors\n", error_count); return error_count ? 1 : 0; } gss-1.0.2/AUTHORS0000644000000000000000000011604711546676602010273 00000000000000GSS AUTHORS -- Information about the authors. Copyright (C) 2003-2011 Simon Josefsson See the end for copying conditions. Simon Josefsson Designed and implemented GSS. -----BEGIN PGP PUBLIC KEY BLOCK----- URL: http://josefsson.org/key.txt Comment: This 0xB565716F key is used to sign releases of GSS. mKsEPNUHKwEFALqJSBHn6Qk5ex138kwymxA3idCFoTi5Q6mVooEVVaYVfeDG+5uV T5rhTFDfDcT9SO0eIlfKOraSRnVEHyDDH2PAgJFxyneFELcmLUQ66D+m8z+ziGro 6bcDSBBDMRkHIX6/kH/vnevjqivIld+j8WTcVX+SArcKyzgQ58uMTrfQdLqzh6D9 sE/838+ZPZkabmKKWMVWccoaUbWGYOcNwO0ABim0IVNpbW9uIEpvc2Vmc3NvbiA8 amFzQGV4dHVuZG8uY29tPoj7BBMBAgBFAhsDBAsHAwIDFQIDAxYCAQIeAQIXgCIY ZG5zOnNpbW9uLmpvc2Vmc3Nvbi5vcmc/dHlwZT1DRVJUBQJNk3g8BQkSSfMGAAoJ EO2iHpS1ZXFvltYE/0LvBFeDVbatm7EHO/eG/Jk1V1IEKG/Dws9LJ+Aadrj/mSLA EudgoK4JRkADV9rRQ48NSzGV8nGB5JGbJuHbTZ9KQW8eIC9Pmp/dMMEplNkHKxnt zG+FROBMsD2XmlV61gimUKj37mSpq/RvQ67KSVoWX8HA71lwJqCUfqhN4vjHm20R caML3xXlR6YP2cogU8uoP0bJzGC250QVWWHLzYeIRgQTEQIABgUCPVjyvwAKCRBX kynTwBsqIhf3AJ9HasyJd0rNkH3lpwDlhJDgwtDLKACfU2/szfpICh9H/vdaOqU+ lUBD59GITAQTEQIADAUCPV6wdQWDAVeKNgAKCRC8u8SVcYqSVhmdAJ45cjOYShnn I5U3KCmFiZTA439LwgCffaBYPJpMymrINwkRB4t2NxbtuhKIRgQTEQIABgUCQQDK fQAKCRCe11g/wU6ygvegAJ9cAzRBE2V+rw6AmHVBqVfDVIsllQCgoCgYAAAZvsXU c72NsrSjAgjyyx6IRgQTEQIABgUCQP8/dwAKCRCW/5nEJcDsC1uxAKC6gBDLFxVI 90nAFw2HL0GkfuZTewCgzz7P/bYsbVpLh21vUj7mlHw4s0GITAQSEQIADAUCQOBX PQWDAJO07AAKCRDIgd1HSuerR2AIAKCp7WDpLQxo+R+bvYXyKhPWCGsoRwCfT3Sz w8ijOgtNX3dNNs0Hv3mqbI+IRgQTEQIABgUCQkkBkAAKCRCPw3JfPWjWOuuxAKCr uWhKUy59naZRTz3O/qI0SXPr1QCg3JjqylCoyJmViIfmP7yS8Dh2IvOITAQSEQIA DAUCQh3wIwWDAD8iMQAKCRAYKCtrRTlKAWLKAJ4xLXJER/0ZaQtfG5Vi8BGA00oM OwCgpUFMz4MvSjX94+/zLD/xJq5ePkiIogQQAQIADAUCQkb5wQWDAOaxDgAKCRC/ 1u5YV/d/CZTyA/4gQg1rKbsrsVS9la4KR0lweyEIZUGVM6oj1gHUJNjws11EenyO tFcFkVk4M8DOIf/VmiJJCOyBODzwFSnEstKAkdk6qG48xaUvBrpazK0oZOS4UKdn 6aSYcp7stWeNIqvw6s/vLk6EW11Wpvl2CL1Ih4rZqyzVej70RZltyj6/84hMBBMR AgAMBQJCSUQKBYMAE85KAAoJEGa+cf9nSGiDgwsAn3jgiKCQHBL3u0JnYrJ61zrp 257PAJ9aWgtpDW2H3FnjuFzpx3oJT1cOR4hMBBARAgAMBQJCTYK1BYMA4CgaAAoJ EDuOpB+C9hJABNIAoM+b0ThD6p/FUCWdw+nRYV0CEo2qAKC+QaW6C+mZcFBFIx6A fGyRkE8SEIkBIgQTAQIADAUCQmE5nQWDAMxxMgAKCRALeDLzc9YtQfYGB/0YcwIJ hvfj2brrznkTI+QmaVVEYjlCLqbfuuNGa8CMv5oFIVigBjJQp59PK/dOwnyX5sBC yhpFTrBufu5z8vCglRMHJcWPus86ghPHHpJrdU/Wdh1eMK1qsqaPNBNhTVxbB8pR sQDd9KCziCl3zTWXoLbUX4NtKY/wJs60ZvrY2/VTHUJeJafavxVTLkBVZnRUPiq/ HEgYafnxHS8vEoLmAYWJ2z0l0yEl3VIdDSYWRmn82k06dvDYDS1+FoWyl1ACgMSM 4dOv1+zQ8BQGu3lhw/Zb6I1n0o983ZzvTun/e8StI/FBkKhcGac3YsDnB40hVZmc q4k9R7JDkXAf2is+iEwEExECAAwFAkLYsI0FgwBU+kIACgkQGFnQH2d7oexBSwCf Yuf/9OyYSogv9twu23xXPzaWqMIAn1rlNsu5Q6nj6HjcXYImOtQEvsIriEwEExEC AAwFAkLYsLEFgwBU+h4ACgkQgcL36+ITtpK5xQCfRx96KP6Px2NTqMM+b+2tAcvn 8qgAnjJIDKzJVDxTd9n45jdd9gpc99UoiEwEExECAAwFAkLYsNEFgwBU+f4ACgkQ a3Ds2V3D9HNhHwCfWMtWNP/fE5TRd31NXU43f2rEl60AoPoah6NEdoNc7YoGhCes ZWCn3BVQiQIiBBMBAgAMBQJC2LDxBYMAVPneAAoJEKrj5s5moURoo2EP+QENiDYV YrAiRIyXPQplagAXCg725RaqtsXvPyDBkqU4Zb2C9wXQ49ijK/LT3het2p20bwjY mop9iClo+vuMVTdWJpjUyvzBA+rF9ya4qWwJ9mMPEppgfHhUpOILkhcniC4x5OWr NtPHeudNkubRJ7J6GZAN8g9NpxV6JIAzRYscTPR88jnBggErugNlDJIi2VFII4mY irlMQZURv0Hnsil7Nbg7RbBGoTqHDxNOfum4wcd1Osjw9LJ2g8DBJGZTFXynYQvh liBNNSu3O/SZN4bs93NT1hzZMXc5cnARPWhqR7Q80uGuJrIOp1WW+zWHYXUoQgCi 24wpdF3wKJREqWdqGPt5a23chWKvw92gHNEC1Pf4mbwRLfbH9N1dDwoO3XA+z/R6 QsxwjPIAhJbqBWL7q61SlO9RcxD+D+xBlePZitFNKME0U/paYTiE9zWHcm4mbQFv BcHRzyMTrRgQZ3QAdImA852+tr0B428xTp2fpzROzVuhXTfkO9NmFO1QBv2QBz9P mi40PCbyCyihvsTTZQVF+EwijRmqPkGfaYLRAKdJv0/wvULpsBtkQVd79Sucf54o Gv5gximFMhZZn8JJmEnAFpUMUIvOqv1n86KsQtIQkoJwbRXLGiKBB8eYfoJGMz0r giYnavmuvgUpPfDzwa63Gz3KllbpcSFD1OPZiEYEEBECAAYFAkLySu4ACgkQbviv woZXSsrD/QCePeaIjTq/mM4ptEm3rDAsg0Ds3pEAn2l18L7gln5IyrTD1w7c0oYS wnXaiEwEExECAAwFAkLxwHAFgwA76l8ACgkQKaooUjM+fCN/nwCgim7PNo7IYXeD YrL11X2+oQIE2zUAniNFTbtnCi/L+HOchH2r6j564iOgiEYEEBECAAYFAkP405YA CgkQ4V3YV7FcN9G7NgCfaOMHBmqno18hFkz5w9AVaixqcwgAn2Bka5leo4ZxEcNi jVXBQrsqDxqdiEYEEBECAAYFAkP405gACgkQ4V3YV7FcN9FFWgCeP6Q2HbImIgAj 0kRVxyB2/xx0SWAAn2NkcVrgoh0ix0ZBnkbipLRiQfAqiNgEEwECACICGwMECwcD AgMVAgMDFgIBAh4BAheABQI+vUdGBQkC1Y4ZAAoJEO2iHpS1ZXFvGNkE/j40miCY 9+4o3sfsCfxwS5MsnalmFWYbkz01TC7Leg0DKHUQY914u1GJYIO5SerUcWq1bhf3 mFumb+I8eRXj8SiwXgBvh+BUUB/qICF3gZQ8eNV+y9ucI0scT4UOAsATTJkinJA/ OC3UIj68oG1/CUC7CdPF7k8wxu++NHdEaLasYsxoWD9ECUw+u1b336ENIC7QeXIc Oz3PaLE9fo+Mos6I2AQTAQIAIgIbAwQLBwMCAxUCAwMWAgECHgECF4AFAj+kK1EF CQO8ciYACgkQ7aIelLVlcW8LngT+LofWRDrko7dp+TqX7gGm5bK0c4ZYD35bgTH4 xzcpxBbBo5/NZfNUwqkrUZZ+8A1I/eWbn0ot2L6GEhRtY33xjJP5Nra4CDbU95MW hpH57OncpAbleyotsFqnSZE3tYm8movkQqrfidZXUlLh3X0GecACzyUEW+B6ouzN vWsxR3H8WzC398hmMgbigu3gVTVWkefFExSuq9Al90+3hrpPG4jYBBMBAgAiAhsD BAsHAwIDFQIDAxYCAQIeAQIXgAUCQIa+KwUJBJ8E/gAKCRDtoh6UtWVxb5MYBP9m XwgamCiHt0gzNLTlTayHkmblTVMp9saKkSiuFaJr0yNXjEoXxmtLcD1ZQQecVx7d OskW8I6GycpJg3Px5rXnpfhVVjnHoZ16vE9toCxDZRDNAlGXpZaLDcBcHZ1hjhxm bPweAVQodqc7Aq2unYuzCgs52Qzh190wS6KlR41swpXcbcHOmO3wLBLay1aLOPtC b40KGGIB0Mq4pecsB2LPiNgEEwECACICGwMECwcDAgMVAgMDFgIBAh4BAheABQJB b8RUBQkFiAspAAoJEO2iHpS1ZXFv8W4E/Ajt3JTsRb+C/YLCbcXupUVCEpb5o6Ik IoJsPDyEMBn0wkWAOaCuDI2uO/tT826s2NQJRItychaSEDAwqUYZIXxxozlR9r2q d2hl8Uha/CRjNEjtWefvPLjaPTe0QIuJKGspCMvhmCsqaMhfVCxo+UC/21GIMyyx vHrTWrJhPw5fPJhF4WN8Lj8GniBG3L/xwxwcpm7+1aZT/91YbQDXzs+I2AQTAQIA IgUCPNUHKwIbAwUJAeEzgAQLBwMCAxUCAwMWAgECHgECF4AACgkQ7aIelLVlcW+I 8gT9Gq0zczE2pA4TvAQhNN3dIq7urAhSdqkHoeFABV8vCmecm7VicRU/0O8Z9Lly royffXF4bsu4nA0dd8FpEShttCIyojb/cs0GjUd+vpufJo2btVA5xlZtj0/WxC2J ik1aLpouOEFoFOZYKuSmX1obAOQUBKkubafZOAgQYN+iQsI2MR351scpgNYUsjCj 5oJj5umhXfi7/Xd4eaE1bPUwToj7BBMBAgBFAhsDBAsHAwIDFQIDAxYCAQIeAQIX gCIYZG5zOnNpbW9uLmpvc2Vmc3Nvbi5vcmc/dHlwZT1DRVJUBQJCQFzPBQkGWKOk AAoJEO2iHpS1ZXFvLfME+QHcoVJUM3FqCzf/d+JhZvM5O0wtZ5qBxO793rsE7psg AcHVIe5f87QZNtDp7ZmrnugyBhC67H2FrQKr8lqsIvKbaSzjro8yUoQtswVSef/O rhqSgEqs08Aifa66sowT1ZWO181m4BCC7aoNRovx8Huy0P+Y1Z2btPA+uu6UvZLh 2iKqMP+95zloNHNHZWooG5THFQl0RdCJtybyDmLpn+uI+wQTAQIARQIbAwQLBwMC AxUCAwMWAgECHgECF4AiGGRuczpzaW1vbi5qb3NlZnNzb24ub3JnP3R5cGU9Q0VS VAUCQxWs0gUJBy9FJgAKCRDtoh6UtWVxb/gpBP4irIXMfgUgQtneRCtuA8MOrAQz zReD+ZqiwjH2tlWxnlmX31UJRoCXi307dprSABkaAsmlGs1o49tOiuNTn+xtGVRX gsnz8owbShZcDS64zFs+5ABrS7Vxf2yp7ODK95QfClySojk4+bhSPZvm+XpgDA1y ckBtw52v1kXHoKSPrq650dD3WYWAb2Dz2OoIHLS7F7Xy9xP23rNVy7Mi1s0jiEYE EBECAAYFAkRzhvwACgkQCLEjjt2tR7bvyACfXmm4Rp4uOWlpOd2W/FP4sAf/3nUA n1vQeWjs/LoX1zWWIuww1Y0OfK9niEYEEBECAAYFAkRzhwAACgkQCLEjjt2tR7Zf uQCfZJN5fLHTvbQC/6RqWjLsMFxtD08AoJ4e760bQEmJoUnk+UUv3PthN/oqiPsE EwECAEUCGwMECwcDAgMVAgMDFgIBAh4BAheAIhhkbnM6c2ltb24uam9zZWZzc29u Lm9yZz90eXBlPUNFUlQFAkPzKP8FCQgLb9QACgkQ7aIelLVlcW+cLwT/abfnHnfz lMJ+kEFQtvF0hI/kNlxOUz07fQv5dmefWUVUAUNB6ztm0sl9C0ZRjNI+gDXXQbty SrxiYs3jqH761XVwR1Q0L/6mr5n6Fv7AZN1cv3PZwZhcfhjJRM8ViCoC96AUSlRB vYCk/205+c2UC7eC7vgZQE3gAzVJVI53IICkl16d7mEIIVqmUB6xLN7ZNDcMwcWD 1vew5rWHI0jWkIhGBBARAgAGBQJFjAuOAAoJECmqKFIzPnwjjEMAn1PGwa5O+Wkr fj8P+kUbrNDbQ4njAJwNHA9EwqAhV/iunGMkeXqyYR4ESoj7BBMBAgBFAhsDBAsH AwIDFQIDAxYCAQIeAQIXgCIYZG5zOnNpbW9uLmpvc2Vmc3Nvbi5vcmc/dHlwZT1D RVJUBQJE5uh1BQkI/y9IAAoJEO2iHpS1ZXFvgWQE/20EMJJ151G/XmiF8fmkmwHq DuYHKMMhc5YHIp2lMh7uif9aIDsIpZKED7MYYEROgP7p5N2WnJLwa86TdpsPWJ1R kQvjXParnkVihYQXyjVBcDAnKVSMtSIwkf3wM9cZVeJKSeUEF+Wz3vE2FKnykUuo X1kbwWXdElLgtbNeSMqoCqvUWREJ6uxjs8kLzG0gXkZK2+Brr2SHcHW0fqg9j5mI awQQEQIAKwUCReF29QWDAoeMYx4aaHR0cDovL3d3dy5jYWNlcnQub3JnL2Nwcy5w aHAACgkQ0rsNAWXQ/VgiLQCgiPqK/6keqoRc1gY4ezjVthcLdboAnjD5FfICPgGI aPM2+7HKj/FrcSJHiEYEEBECAAYFAkXiwsYACgkQqs+zhiEbbu9orwCg7c41zi8e i142vgnW47+xoj++4wMAoPgVJ2wZTQNwxTNnAjH4dPvhRzFGiQIcBBABAgAGBQJF 4ZT5AAoJECZJ5ijF000FiXAP/1cQ9iih1PuCQpzBzALS0Md+vzJQcKhho1V+PmQI I/c893bTj/aGHh/lOV0AltG8lW6p8mHQ1tMOblHLaSrcTrUUt4wkZszw9mr36Vto 53oO8pX43iEJ59xJZLdbMbt0Ikn7xcRYMOBnyRiLNP534TueKjhl+fqDIrWryYjQ utIRie4Pk6BGTpjV5FktbPd0s3/PDm8ubusbUaKmDsS54+pAOYj2EpddMs/qKYq6 5QpsYfbMI7+9xfLronmwjoiTLjDZ0DYP/oJAZT+U1Awquxwop4jZ9dDwjtQU8aiY OKw7WXGvPlBD7PVXHqdwjm7mKs2McUVg+Wyru0XgmDJVfXmxOmwAcwEAleGQT1/w LVjGy00qc/0XQm1zOorhsUXVtWhoTkfQinw40t92gF6az1CXoGC8bJAz3ifqtNhW eWHLH0870suEXyRT8GmU9wDz5w82QHXTG4rjzMzyq+tKiEH9AdSjjoffcnY90x0W NkzgqrO04kLYOw84TwvpZkEwJy8xd5M5N2go+ZxG148AoX5rNQdY55ykCRdIorsf MnBlbI2tBaNcSLmnlaMS5QYUGAWYaVvOLsAtgsqPOMcMW8EOdvZ1lbMu2zA90r90 QxyhWW9lRCOljQDOES47o0VDrGJwczP3rea9qzW4VWGaV1yNPbZ/W7ggpL76nMQy UpXqiEYEEBECAAYFAkXh9ugACgkQTUTAIMXAW66YCwCgq8N4NAXq8HGawNANEDJp faFnPzUAnR8Q2R0Vw5SSm961rJNayI9Sr2bEiEYEEBECAAYFAkXiDPoACgkQVRVg dpFh6RGgYACguR4IPZ6tjHNslKOJrWJ+eU2dJs8An1LmY0Y6eYtMBjEY5UkCABcC 1m3EiEYEEBECAAYFAkXiCtQACgkQx9kwJZ3/qtSAjACcCr6J7Cd+9ClhcxFA9AcV DVDighYAoJtSPYUQVSVTpwXOc+ogydTNzYDPiEYEEBECAAYFAkXiEUMACgkQ5UTe B5t8Mo3fvQCfX+MTeXy4L9TOu1jgTwXMHWlq+PAAniwTjjAxrwGJ3HpImfLaksVj GJxniEYEEBECAAYFAkXiLeIACgkQdklABUmu6/bvPwCgvVLQxlTJYHFvSot1AG1o Oc4QPAMAoMV6GpPMtrgYjVcFaczv7m+t4rLeiEYEEBECAAYFAkXiW1UACgkQW5PA L55KnJ3lCQCfQicMzcR/vgYMR6AQmL0LJXrxGjMAnjsKUKxvivtYYJgmimWwUe+8 Z1YaiEYEEBECAAYFAkXiw0YACgkQfk6lT9CrQHWEIgCfeh3GOsUbJz3HwoJp4Fhc 9wzic3gAoNztXrSsJ15tuG0WETN3Dy7DZMffiEwEEBECAAwFAkXixHwFgwKGPtwA CgkQcxyv01PBoy8jxgCgx9GeUDRfVDBYFIV7xkdfJlfiEDAAoJDPri9GY0rv71xs DOkUKi1rD6GLiEYEEBECAAYFAkXh4voACgkQeGfVPHR5Nd01FgCg0T30FiLvPq1W o0Oerb7n2bHzFKoAn3em1Xsv9MJcRR9wbimgeJmlKDM7iEYEEBECAAYFAkXizqIA CgkQ2hliNwI7P08vvACfYZ5BmdyeXRi9SEx5uuwuc7qYcJgAnj52eTucZYVyHiPg /Ps9SRqRJq9NiQIcBBABAgAGBQJF4s7iAAoJEFIiU8PXJzmBZVcP/2j+knr/TnAy 18so2tzJd6vxF3tHXiIGcS7pyyXL/Yq0p624P34dsmcaIJ20iwTHQVEQNkCtdt2s F1Ho+yboIZ9Up1C74tvzqiOfqawVeEMdK1PQaJsBEBPr1h0v9KhZnNMPiM6KAQtD 14VSPbU7z6v7yjK20i4gZcasOhJMrH3EYByCHsaTzQfZDA+GG6E70x1zksabYWN4 dHoToZ0XosOuwkBt9AjEF3T6dNbrx/OuehdwgOSxoU7/k/qxgHCfEhYkoYxfnF1j pSOw7QhX44S/w/UvVINkljIoKM+GBPmrdNUhs7NGoYoxf3I31uvExv5gcQVxebmN 60VNO3/dvZLNqDMvpfZ6VT8HA7yrGB8DaL7TeDOcEuVFqYF+pCOGTz1fp52p9hVK jQnGSPfqVLMjrxCI7HWZBly4Mi+Vmjd9Q4WTc/cjFhiTmjR5UaXQ5vHT16Zzz6Fx Spuzt4cmpkltZoymjDxtjzIoApR9Sn5yuZGNg/xvs9X5OZDORLPh/sz8ksQzLKdy L8BPpHQCBZapWv2PuiENpmwG2kc88zqwddvmKTX5Amz5qUGTD93LtWCIHSf2frq3 RNJ0nqR3/soC+1rrOmn1D+RlhRTXtgUiUf+hXHdq/j1ew1P7oYWwLusqhECVN/1+ Bg8MM78cUMke/QviWKXqIOf4AM3VmvtpiEYEEBECAAYFAkXi+TsACgkQi0rEgawe cV7H7QCeJngXmqYTFwSH0jfcf+Ia1DlAoakAnj4Uk1Ht8PaEJsRv5vNYt8HkNT7v iEYEEBECAAYFAkXjIqgACgkQ06NwBK5NHNQpNgCgl4xfWCc9Up+Mq9wIXZc44WuG VpQAoN9v+RDoNgj/SLPaqjOzZqdjhwATiEYEEBECAAYFAkXjLSoACgkQs7H4GgJ4 eIBUAQCcCFscWaidGGh3B7oVJqTtI8N4XEoAnjDvewmf1lvfpLaOO2c5iCat+Aso iEYEEBECAAYFAkXjQPcACgkQOJpWPMJyoSZfbACeL43DwlkxbaN0fG5hX3YTI28x dnQAoJRMDoknf2YJS1cSlKAHLbOUCmPKiEYEEBECAAYFAkXjQN0ACgkQH38yahLu 9iqlwgCgrECipUP7veV2ROZWgxrxIaBFzNkAniTIO3MWz5uzFTzuqvVCcBskLju9 iQEcBBABAgAGBQJF4zp6AAoJEOjgYvYNywQx7e0H/jufUUzX7Yw7sX2iFVN4sCIF bPJ13km/75+W63NRH6WhBnTa1z1h7w8v7ugEWd/OhuReHc9xG+JLoGgPvz+KdKTy JkZnokUYHMr6QE3RBfv2O/O3YZJf31bOv6Iy8ewauS6TsR7PUmSI4cV5HT80tOk9 Hac1dog1WxlM9ZmS/LskBdHptc5XaIrMMxdPIKOJKFnhK17WQMtCobubqfLAyEml Fp5tlQx6xS3a/Dxc6VL/Gd+HvlzYolaD/fPXROhsdqoAYZkf6a8WOeCQsTIf3rL0 0S43/XM3t7dTyPNJiv5Jqds7FSLHdUiHcPn482HeGcw4uIAPJ+uE5b+YJXRp+QyI RgQQEQIABgUCReNLlwAKCRAonP/A5jzW1rOCAJ9L6VNwC3YPMk9GquKkCXV9aFYu WwCfRFapHzpBOlqjyGgOaZ6HQmkyHXSIRgQTEQIABgUCReNEyAAKCRCMJe4PDcC3 1u8IAJ4wdJrBzCyI2byvKEh9JFqT8ZoghgCgymlKpEr2NMvOyIsy0GIo6HakLwyI RgQQEQIABgUCReNVBQAKCRCYS9OArF9wDDMvAKDSNaHT/n0AOoeAi1o2hCtap3R4 ZQCgzWNuY7C86gnCZ9CakGjTd4JLzceIRgQQEQIABgUCReNPSAAKCRAhp7U7gAlp 78A/AJ9hRfyRGslSji/vvWGzS16QVXkcWgCeOIaLdxjjkktjiGWfS/58OGUYh1qI RgQQEQIABgUCReN9owAKCRDPEjR8lovVh3rwAJ9k3Exch/OIzqXozpg0k6yt9MUM dQCeOpBpzOZoCFbqkg65f9UeD5q2DeOIRgQQEQIABgUCReQa/gAKCRBkNkNhCfNA JHkMAJ4rhsrQceSbxnBSVeTQZYjhn8YbNACdG3uYyP8loyv25/PMdsJjad5nAOOJ AhwEEAECAAYFAkXpWk4ACgkQV5MNqwuGsGf1lw/9HYUm+Lyrl9B+mdxMr5XoWK42 VCo7/LU/gdDlpr3sblBAulbWjxnVdGxyFiIuwI4o04LcEQ7E+qi4PjfMHwM3xpaA is+wQIhdlIGqf19CcGxF6tDoEsydC1OX7BwTI/QW9qR1ZmVaspSaaboTEp0OKWhH LX6ty7NFCbJTYRrX5QBOoiGrLCKWaiPGmXwbQugFh5OwLFJfzEOBpcZJjZlTSaAU LfIewxCtNgDqsAS2KxzUsqgZZo8/dAnd6vDJ7IdXe9NvjSWRdiLho6kgL+RNmljQ mUNs5KDIThk5aj7JRMyIW+xv2tCNttqcfA7QM2F/KSgNMy1fuFtOqSzq26ojxDgQ jxOMLfLf4za7dG1YN4ay+kn/twGKYAxty1xK4RmxHD07DkVHkDFnBrWi3ygrNvQZ Z+VgVYHoiQA797e8OBDBQY+YFZR2rjWw84qeKvfotweFo5m6pOxzqX5sZYjihCF+ mihPUn3nCV7WuwNaaLTvKYNC5Xs7n4ze9stz0lCGtFZ6nTAFcmFzGFD7rwE5Ra9K ln88KpeXfye8zYoBc1wltIgZb+YKk6aKifm8ma9kVHbQv0Nsplj+P3AHEnBa0eGp w534jqgXjhkAcu3HmHeA1nd/DwVPn5+Gfa5/B3yEZSd8tgou5y7MG26d/Bi4GGMK trYzaMbhq/+Pr2/HN8uIRgQQEQIABgUCReWBtgAKCRB5DoyUYf/aq1uUAJ4sGur3 1pRLdR/KHlDoyQsqewHeBgCeOEFlabOQVqHjaSVnEt5uHCBWBF2IRgQQEQIABgUC Re3kuQAKCRAwaekht5qHHGbrAJ0W7gdbJW0SwHmwY1IU5cr4EnbImwCdFfzX3pDL L8F+nupsuSgUxWOFsrqIRgQQEQIABgUCReTBXQAKCRBwsgMhOvWdFubfAKC4EM92 YRnv4c8ENmwUzHlddgMs4QCdEFoPwR7x7HgXXuf9eGvlfKbdEl2IRgQQEQIABgUC ReqhowAKCRAvlRUIquYCLpAlAJ9lF2s4WaxBy72R9HOejdi3TR2COgCeM2ZzfL2N PaYKQOqe/mBkH547sgaIRgQQEQIABgUCRf9scAAKCRA6kP/BFAjX8UlBAKCA0EDB ykHbbCpXECi93btpAXmo/gCdFhCjYEYfDYK3J6aVtk6TsoL0KjOIRgQQEQIABgUC RrXYMQAKCRBd4kmWWwNYorELAKCeC1hSzbUsAwOGzYvqiAByFZBLGwCglvOkljot 0HE/3GfnnTGXak013kaIRgQQEQIABgUCR1m07gAKCRByBDZwveXx7kW/AJ9hN5Gh srBOYbKygX5CAZXKNkm9iACfdXq9WKtpPFTqVLAYnv3crL4LGIeIRgQQEQIABgUC R1m3zAAKCRDhDnoJ5y95+k2MAJ9qwPkrhFPctC1M8a+ef8HOmshvjACdE7Mga0Ac AObY/cYNu3ar5GcvkWKIRgQTEQIABgUCR1pzJQAKCRBoa1bdYIokmy3KAJ0YH++O F0tmmb1816XZL6iaPEA2dQCdGgTD/dfAvPE3+TXdbBCIPrd/YXaIRgQQEQIABgUC R10ggAAKCRC3nCiw6X+FbcwuAKDRub4/V8/4r12srO7jnemqoWqUQQCgjKULl0mH jzlwwhJIhhvmA7aHuZmIegQTEQIAOgUCR1yTYjMaaHR0cDovL3d3dy5oZW5yaWtu b3Jkc3Ryb20ubmV0L3NpZ24tcG9saWN5LTIwMDYtMTAACgkQ516QwDnMM9uJNACf cNHCcZ68HDIOeELxDAVUcs6Ohe0AnRbqDI9wciFrvY3NBhTf5ZrWrp05iEYEEBEC AAYFAkddH84ACgkQ8bpMHtHIuo8lUACfRyTbEF9UTA5cgC9h+Ki1MADMCwUAoKCY d4CvSJSsLpggJqxRGh5xWgmBiEYEEBECAAYFAkddhUQACgkQhQZbWdUt0afiaQCg lSfNOE9hln6LnUiOZcA1OqvvKzUAn2kOWUE1bpJ0nT8f98rej0x1r8+riEYEEBEC AAYFAkdcC9IACgkQ7b8eESbyJLgT2gCaAiZB/OBvoxDh2tXrE7UWsaQ/aDgAoKz1 sLDhM+GyO6hUsvCc6DMTr4Q9iEYEExECAAYFAkde5N4ACgkQhcIn5aVXOPLUJACf XWv0ygnQYo/j5vd6z1KadkbJavcAoKcZCeWDa2AmsKHMn2kD3sbB2SiyiPsEEwEC AEUCGwMECwcDAgMVAgMDFgIBAh4BAheAIhhkbnM6c2ltb24uam9zZWZzc29uLm9y Zz90eXBlPUNFUlQFAkXV1VgFCQuT/C0ACgkQ7aIelLVlcW/oNAT7BnY+otbWxp6n uX2aKTnnmXVsVXS1DWFXLPplGwAp6b2rdlrm8pdj1BsXr9J4mLTBPdGmcJq7Yt7S rw9o/Lb3j9LqcZYBIQP108oUMOQoDAgxgxln9ES0CucRAbFrrjeIFeZ9WM3ceoo4 nmcDSXxOHTizjODgj5GmhNvSYtE1V/wZxEgT1s91v0dNBYw3XP5deHgTuTpZskFf 8wCk/kdLQYhGBBARAgAGBQJIRLl4AAoJEFAsTymWnyod1UAAn2eE7xX2Tm0cJTuG M86y/DTgYEWOAJwLQTb+RmtjruSpboc4HQ+HHP4T9ohGBBIRAgAGBQJIWW8rAAoJ ECTTK/mqlcNJLoYAnjT3gs2YZrIjXS+XrW8VGc1W013uAKCophfcMkBjGBdHkDUN WvDce6uGJokBoAQQAQIABgUCSQa/OQAKCRAp7li5loZRcRIvDCCoP0WynVZn3xtm Zbozv1qkW0O2WjDdR5Kxs3ti31vK5HoVf+Qyii0U9AR/OJ26Rcjj1TOBR7975vNn 4dMgw58ensBZRoBnO6L5i4xw5bSO/DsrRBZirfzu0jN748rc9f/17fa7ZWlg64QN rZzBEN/cQOwK8bcqUcsIXOddNxbp/udWVEoBhsyZZFCmpvP5APG+g9FPsd2cGXAc y3wVvj+oJ3nNr2RKID8cbpGD67S20RNma1BtFNUbm1F7u+n5+LbqyAd2meLxXQmN 2pf8QSJIOieZVtXc0XPr2PE3/aZ9/4CscoBOtSJtO/2/KQCiyQRHLqJsyJ/pVkuJ 6dzuIeh61ThUkFv/+MSueYlOxfZ1ZqUAMJo9vdUpeyrMKdLH+DQyec7qOIgxaEVC o77XnBu7NXUQU9dA2ppKr6tTyArEDeudKE4UGg8PlQ4pi9YVUcDlHc1CM/gJCuUk cz+g3t54bmMTKUm8acQjkLmBj+W1IQdt0Y4CcFnqq9uESGRqmxDQ/aLRiEUEEBEC AAYFAklnJY8ACgkQRzjqIWV0mXolGACXXwrZtQIo93VS0waciEtZZOYmKwCeKlzf XkACcBQtvFWYLlPlVQj4Ns+I+wQTAQIARQIbAwQLBwMCAxUCAwMWAgECHgECF4Ai GGRuczpzaW1vbi5qb3NlZnNzb24ub3JnP3R5cGU9Q0VSVAUCSGH5iQUJDRh0XgAK CRDtoh6UtWVxbz4eBPsHj7IiAP6zHbcDHsBHBMjSpn3HUb20liyVcpCe+gSDFE3t oAQKw5pPCE/mt/MnW2F+13x/jJiA7Sn07hrGTJk47JRFUl9BwnPYQ2m4WaXUryM6 W9krOKWJMskwp9DGane90wmTF/x7TMNHBk98D7adX3RY+07x+yHjA5HP7wkj3GXM SblaUb4Ksx3Cihq8aDvfCHhdFy2ucxAadCbTbh3iiPsEEwECAEUCGwMECwcDAgMV AgMDFgIBAh4BAheAIhhkbnM6c2ltb24uam9zZWZzc29uLm9yZz90eXBlPUNFUlQF AkmhLgAFCQ6tWk4ACgkQ7aIelLVlcW/pRAT/X8oFdC6KZMRTukipZfy2cp2zQWmY s93T5Itr5VrqU4kGzIyeGpYlIS+7jD1/jILjK3DYQLXpwNOf3ABwulLYYTeX5SmH k5KJhi/UW059X6tOZ6lppW24fRL93OzX6gVBHGpj4qfirLzM7eq+VyJf93he8znY OWJ/vy3mXa/QdMLmIL1eC+Z2AysulpDAOeIDzQbQNqbPMoNrmcO6VnZyHYj7BBMB AgBFAhsDBAsHAwIDFQIDAxYCAQIeAQIXgCIYZG5zOnNpbW9uLmpvc2Vmc3Nvbi5v cmc/dHlwZT1DRVJUBQJCQFzQBQkGWKOkAAoJEO2iHpS1ZXFv0QgE/imT/O1AX5dX kviStcSZuMCwZv0L4j7g6hFRj+ZYO80CMammSEUP7xDehC+D7V1w+wnmtAdJeADb DVs6xOScr0NqbJjfksd31PRlKWVc5Rf2rdB4qIMFhzYoHflm3Eo0gDgu3moOBhtK C2URHENj3gEJLLhgCl3ABN6Lc7fa3kihH4Guh4iv7D7Of2ZW6WSfelFcHJgNf+xz FxO1bBEv5Q2InAQQAQIABgUCSw6cnwAKCRD1TYragIIf6k+ABACFJpUa/RJ1k73T agx6FUKE4SVP8DdlfJyAk54GeQugNMz+lU1HRduHQZSKCOpNd75Fwtf+u5V1P2vU 06YuCBM0Y629LReYkbxQUFJXbgcs2zSXRoFpJFc5rAUI0g/lnlZOgKQ6XcOrOeU4 O7P+uNx+nih6+eAL1iHpDAdAvZTp54hGBBARAgAGBQJK/ASbAAoJENG84OKPoRoV gpAAn0UxXXsO8AC23hNCfuvgjSaA9kYnAJ4u5O69pG6D9X0ZmxSjBVSxv6VD2YhG BBARAgAGBQJK/BdwAAoJEHJZXrGBcEuTggAAoN5Z9FTq5ZsRFYBMq4pM1IIi5Tbh AKCNUYEW6JV1TeYtU216eCIVuOV8Q4hGBBARAgAGBQJLASucAAoJEBgFUbrZWjw1 BBAAoI0+3cP62FnI3Z1TRcf+OHU9VnSZAKCA2suW6DOY2I/dKl6cP44NTvUc0YhG BBARAgAGBQJLDEARAAoJEHfdleLqUuz0thAAnRssFLNOymUkbXRMV2xCTBxX/Mpf AKCYjyOzjPSVoS5eNl+VlRSOAM1Gv4hGBBMRAgAGBQJCSQGLAAoJEI/Dcl89aNY6 Fn8AoLW/JrZSPK4Odr0+Q0VPgrdzbg3xAKC+yF/Nt3s23ux1XoIXoq396u85iohG BBARAgAGBQJLHGRGAAoJEMcaTGXwWbHRgkUAnRLnoCpmX6989NXjLRnSNS/dzq2U AJ0QHa6xy3Sn2641FpQ4LLsXwLrZwYhWBBARCwAGBQJLEp4JAAoJEPKthaweQrNn ybMA3ixjtagoUDd5XAO9addD51xRSP6tBBnSpzAniPcA31KUOXObtU+ns4gDrv81 TxB+LJdJZMdYJkvC8aGJAiIEEwECAAwFAkLYsPEFgwBU+d4ACgkQquPmzmahRGhf dA//cVfLmv3s4VjruQA4BxNcnljFkLHnCMfUwOUFUIPKaYwNxNkRHv5SWwsHlYcH 70prr7spkUMO9XCHZqhdXc/UfJm+tjda9Ow3D8Ym4bR4uKaBDcSB6rxG7Tkde2Ok JeA1uD4ytbrfctsufByul04qgrW4ON4xHG15Na/aiyZdi4KKWCUNSiQsH5/gwlWn UQNhYFXJTBlBiHYok8KddvhP+9KGKDMy8JvuzFIGyVKUS8rbHOX64U/dYl9pT6Hs pQBwENOvNVomsL3sZarQD7aPRo27Z8N9qEjqiCXG2zITfBvO6ZLwYZOcF31TO5Mr rQRYSB3EBRnrhpGaYHl7eNDXFCX35/ijn3l84HUMJsDZaPStGq8TaSLpILoL1Xjb bCo9YLVuyJGHC5r5Q8koc/3MrYLjRFPtVtGXhu9046YbPJgkpQilXDVnMtpe8/w7 wd1T4m2nOduf0sNWSKuw0oURx7/MdNv+ufCxFu4Er72eI98rmUjYC9pYD82mKEKP vMrByvXalYlQVwByMFWU5l6bW+c8UHB7RVJ0edSA0gHwRne4I1OTSTXyip4C4wyc uep5iRjMP/tdxeVxXIxjwvbemSqELne9divE0SHM1oBjJ4JGock5eCiMD8Vc1p1D dCJHLDv+cjtybnVs82Aeq9UKJgkgAAProq7LScFbQVrAgOeI+wQTAQIARQIbAwQL BwMCAxUCAwMWAgECHgECF4AiGGRuczpzaW1vbi5qb3NlZnNzb24ub3JnP3R5cGU9 Q0VSVAUCQkBc0AUJBlijpAAKCRDtoh6UtWVxb9EIBP4pk/ztQF+XV5L4krXEmbjA sGb9C+I+4OoRUY/mWDvNAjGppkhFD+8Q3oQvg+1dcPsJ5rQHSXgA2w1bOsTknK9D amyY35LHd9T0ZSllXOUX9q3QeKiDBYc2KB35ZtxKNIA4Lt5qDgYbSgtlERxDY94B CSy4YApdwATei3O32t5IoR+BroeIr+w+zn9mVulkn3pRXByYDX/scxcTtWwRL+UN iEwEExECAAwFAkLYsNEFgwBU+f4ACgkQa3Ds2V3D9HPaIQCgkWvOhiORHkA1lht5 f+jNB5xAKYAAnA0Kg/JKZrGvA7oGJR3XVs7zRs/FiEwEExECAAwFAkLYsLEFgwBU +h4ACgkQgcL36+ITtpLuwACdFi5eiQDLrrGLThgPU4O2yxgXDucAniWqyEVWfs1H nLOe7S2KhgsXDJzniEwEExECAAwFAkLYsI0FgwBU+kIACgkQGFnQH2d7oezt8QCf XjmAsN4+tvGt/A3Z0bn4i6+m+1gAnihGZHKHHCnBqEYT7nbzXPZVOtD1iEwEExEC AAwFAkJJRAoFgwATzkoACgkQZr5x/2dIaIPZGACdECs/Brf5HO0PWPwIYf8GTur2 kPUAoIHIKUWKCeoNUF2FnUzvx8b3uC7viEwEEBECAAwFAkJNgrUFgwDgKBoACgkQ O46kH4L2EkA4fACeN2w05Staf2i18Sdv9aRax1hb53AAoL1ZYuFfT+qVYT/afh9w D7UPlEVUiEYEExECAAYFAkJJAYsACgkQj8NyXz1o1joWfwCgtb8mtlI8rg52vT5D RU+Ct3NuDfEAoL7IX823ezbe7HVegheirf3q7zmKiPsEEwECAEUCGwMECwcDAgMV AgMDFgIBAh4BAheAIhhkbnM6c2ltb24uam9zZWZzc29uLm9yZz90eXBlPUNFUlQF Aknt59oFCQ76FCsACgkQ7aIelLVlcW9HKQT+N9SWzP9QXtBIA/eYqH6hMfSKoVF6 edhFQk/7FejAX3VE6ZVo7M1iPd70e++3nwlUYU9iUp7TaeOPLKjdCAUsDbpwNGSu j9oc2/BazRdjzjBqncZaOa76IzsIvBpLN9TPCcuzRMaggu1pAQMiGReFmApThaxC kOGwjFdmcWbydb0ngO4kbeHi6BXOzy1BTTRdK3Y7ThcRFvfYodeFRZDWVohGBBAR AgAGBQJLe99SAAoJEHIYvL3gmppngOUAoL/gZ4GkR/ECCqkEeJCUzppwhvcuAJ9K MET7MeaihS3CHw974wVY0hEzI4hGBBARAgAGBQJLAZxYAAoJENsmMCSB3bBl61oA nRtDOz1x35Hloibxwa5A9TC7tGprAJ9Enw3pbl149CBC4ebPdXkfG3HFwIhGBBAR AgAGBQJMS/O2AAoJEIMSIJCi6IJev30AoI/sfMGmBnWu+UNUgQN22/V8c5NqAJ9e WEaU2hdXCP8MsbBUwIxzUAlXMYhGBBARAgAGBQJMTfFIAAoJEGUd81I9I/JdI28A oMbAB2wCwsanUZwRLvw9Hs7iCyz8AKCeXydwOVIUAX47I/wyOwHwjZVi24hGBBAR AgAGBQJMTffaAAoJEL9gcItIQmx+ngAAn3pzLNJ2gaHihWR5KIFZuM5rjZVkAJ9W q8/Vq8CthN5QAtXLwqEmiJCeVYkCIgQTAQIADAUCQtiw8QWDAFT53gAKCRCq4+bO ZqFEaF90D/9xV8ua/ezhWOu5ADgHE1yeWMWQsecIx9TA5QVQg8ppjA3E2REe/lJb CweVhwfvSmuvuymRQw71cIdmqF1dz9R8mb62N1r07DcPxibhtHi4poENxIHqvEbt OR17Y6Ql4DW4PjK1ut9y2y58HK6XTiqCtbg43jEcbXk1r9qLJl2LgopYJQ1KJCwf n+DCVadRA2FgVclMGUGIdiiTwp12+E/70oYoMzLwm+7MUgbJUpRLytsc5frhT91i X2lPoeylAHAQ0681WiawvexlqtAPto9Gjbtnw32oSOqIJcbbMhN8G87pkvBhk5wX fVM7kyutBFhIHcQFGeuGkZpgeXt40NcUJffn+KOfeXzgdQwmwNlo9K0arxNpIukg ugvVeNtsKj1gtW7IkYcLmvlDyShz/cytguNEU+1W0ZeG73Tjphs8mCSlCKVcNWcy 2l7z/DvB3VPibac525/Sw1ZIq7DShRHHv8x02/658LEW7gSvvZ4j3yuZSNgL2lgP zaYoQo+8ysHK9dqViVBXAHIwVZTmXptb5zxQcHtFUnR51IDSAfBGd7gjU5NJNfKK ngLjDJy56nmJGMw/+13F5XFcjGPC9t6ZKoQud712K8TRIczWgGMngkahyTl4KIwP xVzWnUN0IkcsO/5yO3JudWzzYB6r1QomCSAAA+uirstJwVtBWsCA54j7BBMBAgBF AhsDBAsHAwIDFQIDAxYCAQIeAQIXgCIYZG5zOnNpbW9uLmpvc2Vmc3Nvbi5vcmc/ dHlwZT1DRVJUBQJCQFzQBQkGWKOkAAoJEO2iHpS1ZXFv0QgE/imT/O1AX5dXkviS tcSZuMCwZv0L4j7g6hFRj+ZYO80CMammSEUP7xDehC+D7V1w+wnmtAdJeADbDVs6 xOScr0NqbJjfksd31PRlKWVc5Rf2rdB4qIMFhzYoHflm3Eo0gDgu3moOBhtKC2UR HENj3gEJLLhgCl3ABN6Lc7fa3kihH4Guh4iv7D7Of2ZW6WSfelFcHJgNf+xzFxO1 bBEv5Q2ITAQTEQIADAUCQtiw0QWDAFT5/gAKCRBrcOzZXcP0c9ohAKCRa86GI5Ee QDWWG3l/6M0HnEApgACcDQqD8kpmsa8DugYlHddWzvNGz8WITAQTEQIADAUCQtiw sQWDAFT6HgAKCRCBwvfr4hO2ku7AAJ0WLl6JAMuusYtOGA9Tg7bLGBcO5wCeJarI RVZ+zUecs57tLYqGCxcMnOeITAQTEQIADAUCQtiwjQWDAFT6QgAKCRAYWdAfZ3uh 7O3xAJ9eOYCw3j628a38DdnRufiLr6b7WACeKEZkcoccKcGoRhPudvNc9lU60PWI TAQTEQIADAUCQklECgWDABPOSgAKCRBmvnH/Z0hog9kYAJ0QKz8Gt/kc7Q9Y/Ahh /wZO6vaQ9QCggcgpRYoJ6g1QXYWdTO/Hxve4Lu+ITAQQEQIADAUCQk2CtQWDAOAo GgAKCRA7jqQfgvYSQDh8AJ43bDTlK1p/aLXxJ2/1pFrHWFvncACgvVli4V9P6pVh P9p+H3APtQ+URVSIRgQTEQIABgUCQkkBiwAKCRCPw3JfPWjWOhZ/AKC1vya2Ujyu Dna9PkNFT4K3c24N8QCgvshfzbd7Nt7sdV6CF6Kt/ervOYq0JVNpbW9uIEpvc2Vm c3NvbiA8c2ltb25Aam9zZWZzc29uLm9yZz6I+wQTAQIARQIbAwQLBwMCAxUCAwMW AgECHgECF4AiGGRuczpzaW1vbi5qb3NlZnNzb24ub3JnP3R5cGU9Q0VSVAUCTZN4 PgUJEknzBgAKCRDtoh6UtWVxbwjFBQCBpjVvp8OkR35lBWvEFAv25+Z7MA5huxuC QoU6W3RtXauXVtVvc4UBAWiT5CqUq0JEfy+NNK3LWCdjMT6d01nqIh5P7IERM7FO SKWR3s4ZBY2+ZMpmQcUPqavTTKRzxYRTUeWJqzYm8kxje/hYiwE2+kG2ABn3ciwn YwZsBiHdz4AV0H9uFZTZjU/LbFAvEOrsCGT8+7810ZBFEgQKzkGGiEYEExECAAYF Aj1Y8sIACgkQV5Mp08AbKiJmNwCgkgjjuS5TcZq4rVBWNYu1VwQlJWYAoJZf+pBN BvzT9xOgHcs1cAMwT4FHiEwEExECAAwFAj1esHUFgwFXijYACgkQvLvElXGKklZX lwCfTWSlL2/3q5Od3zBVMKVHgpTo4asAnAtw7vVEIwp9pPuy1oKjTB/obqltiEYE ExECAAYFAkEAyoIACgkQntdYP8FOsoK0XQCfRN1QBVk7/eu4YbFQBqH463dcHx4A oMp2QurMRXFDImswJ1Wi9K65dq66iEYEExECAAYFAkD/P4YACgkQlv+ZxCXA7Au9 KACfYKMnMPmlbZDi5/Le4mcLCUlQ+SsAn2qOQ14l/ellraqWXbvacCJkOyNpiEwE EhECAAwFAkDgVz0FgwCTtOwACgkQyIHdR0rnq0csrwCgtL27/ndpjew28bGVYU9t BmIg2GUAoKFFKKHvJB2pVjRkRL4DjohSdIrkiEYEExECAAYFAkJJAYsACgkQj8Ny Xz1o1joWfwCgtb8mtlI8rg52vT5DRU+Ct3NuDfEAoL7IX823ezbe7HVegheirf3q 7zmKiKIEEAECAAwFAkJG+cEFgwDmsQ4ACgkQv9buWFf3fwmuCwQAtAopBWKTnll1 t4lFnR+CmvXdqui6g/MhMVjGlnGaxzKfdlXIDT3i6VEMQk639rCLUxNB5YiQZZm7 aABg1dwtf10mFQUkm9dt4d852cu6ytmljXLJ4NIQFrhZQUrxvh8s8j41oN/hcwyL aX+FLI0G6Jehz0m0nPlEQf0sJ/4oCuqITAQTEQIADAUCQklECgWDABPOSgAKCRBm vnH/Z0hog9kYAJ0QKz8Gt/kc7Q9Y/Ahh/wZO6vaQ9QCggcgpRYoJ6g1QXYWdTO/H xve4Lu+ITAQQEQIADAUCQk2CtQWDAOAoGgAKCRA7jqQfgvYSQDh8AJ43bDTlK1p/ aLXxJ2/1pFrHWFvncACgvVli4V9P6pVhP9p+H3APtQ+URVSJASIEEwECAAwFAkJh OZ0FgwDMcTIACgkQC3gy83PWLUFxowf/YLAopAmpU94kKSC4ECFsLXDivJ4LCOxg qZ0u7FgiQgwWK1miJJnW9gME5vE/jMHlsjGwUKJDC3SfbgjOJj31ivrGIh4od8+z U0bwlwoJppDF/5cbzBheUiCsz+BVBZs8ii4OahnoELUzXbyVZITkMztmn/2+7DYX qqf1tCTywIR/hQzFp6W7GNT/I73Ksz/cKop4jzxE5whkl+5NMBk9VYhfa2X49/S6 5nwXg4iiBPQN0UrhN0ZvrF+uKX6oVlOX+30CrPyT8FkcRk1AOhUpqblk2M2DblOe bgxfF1ZVjXNNN/0fZhy4iTbYSggndO5PIybKMkMogVtO07F/8lvtC4hMBBMRAgAM BQJC2LCNBYMAVPpCAAoJEBhZ0B9ne6Hs7fEAn145gLDePrbxrfwN2dG5+IuvpvtY AJ4oRmRyhxwpwahGE+5281z2VTrQ9YhMBBMRAgAMBQJC2LCxBYMAVPoeAAoJEIHC 9+viE7aS7sAAnRYuXokAy66xi04YD1ODtssYFw7nAJ4lqshFVn7NR5yznu0tioYL Fwyc54hMBBMRAgAMBQJC2LDRBYMAVPn+AAoJEGtw7Nldw/Rz2iEAoJFrzoYjkR5A NZYbeX/ozQecQCmAAJwNCoPySmaxrwO6BiUd11bO80bPxYkCIgQTAQIADAUCQtiw 8QWDAFT53gAKCRCq4+bOZqFEaF90D/9xV8ua/ezhWOu5ADgHE1yeWMWQsecIx9TA 5QVQg8ppjA3E2REe/lJbCweVhwfvSmuvuymRQw71cIdmqF1dz9R8mb62N1r07DcP xibhtHi4poENxIHqvEbtOR17Y6Ql4DW4PjK1ut9y2y58HK6XTiqCtbg43jEcbXk1 r9qLJl2LgopYJQ1KJCwfn+DCVadRA2FgVclMGUGIdiiTwp12+E/70oYoMzLwm+7M UgbJUpRLytsc5frhT91iX2lPoeylAHAQ0681WiawvexlqtAPto9Gjbtnw32oSOqI JcbbMhN8G87pkvBhk5wXfVM7kyutBFhIHcQFGeuGkZpgeXt40NcUJffn+KOfeXzg dQwmwNlo9K0arxNpIukgugvVeNtsKj1gtW7IkYcLmvlDyShz/cytguNEU+1W0ZeG 73Tjphs8mCSlCKVcNWcy2l7z/DvB3VPibac525/Sw1ZIq7DShRHHv8x02/658LEW 7gSvvZ4j3yuZSNgL2lgPzaYoQo+8ysHK9dqViVBXAHIwVZTmXptb5zxQcHtFUnR5 1IDSAfBGd7gjU5NJNfKKngLjDJy56nmJGMw/+13F5XFcjGPC9t6ZKoQud712K8TR IczWgGMngkahyTl4KIwPxVzWnUN0IkcsO/5yO3JudWzzYB6r1QomCSAAA+uirstJ wVtBWsCA54hGBBARAgAGBQJC8krrAAoJEG74r8KGV0rKoI4An0CQA/3wPCxskfqL hvN69ViNc9GhAJwMR5Nl4q7Y4c5j9BOG+9Yxaom2OYhMBBMRAgAMBQJC8cBwBYMA O+pfAAoJECmqKFIzPnwjCzsAmgIwd1uJC2Ka3bIgTCJukFjCcdWRAJ47P2tLKEcv atuPnnPTyWYuXGTBqIhGBBARAgAGBQJD+NOYAAoJEOFd2FexXDfRRVoAnj+kNh2y JiIAI9JEVccgdv8cdElgAJ9jZHFa4KIdIsdGQZ5G4qS0YkHwKojYBBMBAgAiAhsD BAsHAwIDFQIDAxYCAQIeAQIXgAUCPr1HRAUJAtWOGQAKCRDtoh6UtWVxb3F2BP9W he+ArZn6WlbpHF+37Rqr+KmXL2fLI0b+phneaieRvACsOmPD3jDpvxz/xVf8s49S J2+a23IaiCA8Boyws9sBxn5N+yWhdYYjfDbH3JUOQz7BKN/9o8EAYuU8pmQtEN0q 4+QiNsU0a8qLAV3qmEOwLfkB4z4H+aDZxe/p7vIYP4QmzTn3ZQ0mYR5mxpc52pF8 2KVyNWWJvmcirPwKSckEiNgEEwECACICGwMECwcDAgMVAgMDFgIBAh4BAheABQI/ pCtUBQkDvHImAAoJEO2iHpS1ZXFvPREE/j3fX+cLxCCZNTjMhThGFujiT7ty4x1j Vc91J6QOA+Jp+78NIIeyg3JTeR3WIv7/WFNzLKJXJEEcga+0ViPjoLfvGsHMAnwX qPYAxu1cDY4jId0bCYgoVlnfF9gwOWxebtotLpCiuXGL/168zEAXWJpPg6r2MfPh AKUJ9G8q52OOWJW3cObxoZ2gyXjuWOFtygZ1vUAqP/8UGeZNdajHD5uI2AQTAQIA IgIbAwQLBwMCAxUCAwMWAgECHgECF4AFAkCGvikFCQSfBP4ACgkQ7aIelLVlcW9o qwT/a2nWkFFy1q16WURE8vp+Tqu6i4r5mTdyHjbhQeZh5Pub5DEJiFuWXxE73JVr nNozacQbVbsnn54B4Xv6tuEDMxaTXSjreDY6D08urM8A0gnUHCAOwxtmepm9wxk/ l3WAXWwzQoQaqZ2PSPFGW4Epk8+JwWKoLv1O2i9NbycGEccF9rr6I12319Vzk+P4 P3FOgCwadAQHSGS3Y6hlLm/RGIjYBBMBAgAiAhsDBAsHAwIDFQIDAxYCAQIeAQIX gAUCQW/EVgUJBYgLKQAKCRDtoh6UtWVxb8gUBP9Oiapzi+7qCcpj8Yy55jQvgpXk he9g5DuTlRiHYjP5vTvXJNF7pDOOPj1pSUxumC3viv/pxUaWKp3tSOjsT0ZVgy4a h6rUdjyybLAOAiPmAP3ryStzURF5/RnQbbzrSGZJRfeQIxY2871hWg241/wslRtN psxYSPCIPHMVB4SSFYzzbKRgUU7SXsVQYBAlRU644UE+dB+b17slv1xvagOUiNgE EwECACIFAj0lzz0CGwMFCQHhM4AECwcDAgMVAgMDFgIBAh4BAheAAAoJEO2iHpS1 ZXFvt3ME/ijwFJCSNoY1AfCEm3AX6vRKUbjiy0MdemsqajXF6awcbIaeCwk3wVr9 JOs1usu2/AQQDvz0sf/hEv6c3sMTYspD6+QzrRMUVbLm0fp+pRZKyaW1tO+/JIoO l8qsOwodkXPQ7CYFvSZhhkxdUwVOa6UtL6kOdCjQAy7DDQTzdcC/GxHQNVUNF5Kc BWC7LMN6iAt0dAFEMaQz4t37CHq+DCyI+wQTAQIARQIbAwQLBwMCAxUCAwMWAgEC HgECF4AiGGRuczpzaW1vbi5qb3NlZnNzb24ub3JnP3R5cGU9Q0VSVAUCQkBc0AUJ BlijpAAKCRDtoh6UtWVxb9EIBP4pk/ztQF+XV5L4krXEmbjAsGb9C+I+4OoRUY/m WDvNAjGppkhFD+8Q3oQvg+1dcPsJ5rQHSXgA2w1bOsTknK9DamyY35LHd9T0ZSll XOUX9q3QeKiDBYc2KB35ZtxKNIA4Lt5qDgYbSgtlERxDY94BCSy4YApdwATei3O3 2t5IoR+BroeIr+w+zn9mVulkn3pRXByYDX/scxcTtWwRL+UNiPsEEwECAEUCGwME CwcDAgMVAgMDFgIBAh4BAheAIhhkbnM6c2ltb24uam9zZWZzc29uLm9yZz90eXBl PUNFUlQFAkMVrNEFCQcvRSYACgkQ7aIelLVlcW+ahgUAnWORH5p6Cdk/zhen4sUw wnzsFyAOZ7vaVPrQPq58Czl2FymLm5kJgsGXH8b6KLxVMo8hjTZnsm+zO6XTLXsn nK7nXk70gBJ0AAM0XGlG53qDvvQmq3RkfFMHuSmxL+zL8pXTmnywIlEpgDHPVKbP KF3c508HFEPKFnDjuyRwPgq3q2mhC/qYYBRvw9hjjeRCqDTdC5wHuWLzs5MCLeG+ 3YhGBBARAgAGBQJEc4b8AAoJEAixI47drUe278gAn15puEaeLjlpaTndlvxT+LAH /951AJ9b0Hlo7Py6F9c1liLsMNWNDnyvZ4j7BBMBAgBFAhsDBAsHAwIDFQIDAxYC AQIeAQIXgCIYZG5zOnNpbW9uLmpvc2Vmc3Nvbi5vcmc/dHlwZT1DRVJUBQJD8ykB BQkIC2/UAAoJEO2iHpS1ZXFvrF0FAJLVqSWQ2fYNGCvBH4xRS4n2LruzdubmzNuC IZrc75M+RfTvYeHwCNDY8H+PggYuXMT8armHvFvyL7jln864M9LTX4TwROrqKlkN gOkfxdSgOz4QE9RHxxooF1GMl1yhxCoumixYE5w0z0LGYRKy/Xzd3+VMcUaFXvEq Y6Q+cnQoqChCvKRmsIFhF4b4SAqzRePdx6U3PBpC4FbIlkQkpbaIRgQQEQIABgUC RYwLkgAKCRApqihSMz58I53iAJ47ZGEOrZrMqV6WKmfKa8+5907zeQCeI9LFETr1 SK3IHx/7S7RlQhoqAzeI+wQTAQIARQIbAwQLBwMCAxUCAwMWAgECHgECF4AiGGRu czpzaW1vbi5qb3NlZnNzb24ub3JnP3R5cGU9Q0VSVAUCRObocwUJCP8vSAAKCRDt oh6UtWVxb9fhBQCRE0dBfP855Vv2fPCzIxnu1I0GM9BjmAC4uMNdW6o7I4yQMXNY pP8RdxDzPTon1JYQZqQW77EdqtwjFeguScudF8+85I2FtKDmzl0NNubmX6ckxdCb uUmOk2VuH0IQ8O0f1htk0h4dQB97YA8zu9AtqyASkdCDbRC7RgoaeUaV7N7v8RM3 KpEJm6pceQT1DLqOQIFAp/cDa76xXK2Xrd4IiGsEEBECACsFAkXhdvUFgwKHjGMe Gmh0dHA6Ly93d3cuY2FjZXJ0Lm9yZy9jcHMucGhwAAoJENK7DQFl0P1YbgMAnj34 VvAwJhWnZ79fbgSY9O7CIBJFAKCJEs0DbASutepLJhiysH3J61b5D4hGBBARAgAG BQJF4sLAAAoJEKrPs4YhG27v90UAoKBHaY3RXOkwk5YL58jSYoOWltJ/AKDTwdKS URBZ3RTeGkriWGZRy2sfd4kCHAQQAQIABgUCReGU9AAKCRAmSeYoxdNNBWHAD/4+ /J4V7cM1dMrr6rpaggfgRa7d121f4n+KVn69fmxBr6vMkGP+8Aor4xMGvkL6HYJv OMRK752HwXij7TM0HdGqU0S6cisOXiS/LOPQOayz6HuvliIhJeyDF4wfI358ZH8g VTKTn+1ltqWmggd8KVbU2pEvNte+lD0VIxK0wrUT0nFEYoJsDlTUVpnmM4PxP8Tw oIRwo/h9NnL8zeh+5sj0D5tZW4DsTC1AVPH1WYUN4aY2lv49twDh63oXbzXZQ+xK WJeiByaoDeEOFtouwTb7RbmDBB1i0aeb7gWCryUiHD4p2zf+R+4ikcwcG0LzR7DC 3WFdlPnbNII/G31ZDacpPqkk5S3LL2jIXKhpD15ilbXGjkqsBAkOJpO7rehVbxEG UfGh+2TZcCvLHeh9ckgjimFlZywk230H/tkQJpnHaTOmhNbBbowUkIdCjTBLkqyW 99sM2heDkmkYh9jJTj2BLVED4HrgyMp+dXGeDM7nVGDCPfbaFTTz6It+ODndAC2Q 0d0N59Szx2Xb8LYfngezdhV0q0GgGXl+vh9zvZnpHV7Bef6ABTq0IOQri83IZv3H lyBeK6KPJTx+ll32ByQ8JcMuAAaVqWXI914J/fD9bvsTzJNQsPEa8yBta22Ww+jc nHBBhAbUKfw5FKNDrqYr4VGY9+am80YmnIRQIt7Fu4hGBBARAgAGBQJF4fboAAoJ EE1EwCDFwFuuzREAn11W3gtaynmEAcxw/WxLdndmL0mmAKCsf55yO8kTmKoohRXp fo+jn4HBXYhGBBARAgAGBQJF4gz4AAoJEFUVYHaRYekRxxwAmwVy1T7YQQtP7xXN dM+EVUxLnteTAJ9AzaxlVV4dO/OZTG9QDbqztagH54hGBBARAgAGBQJF4grQAAoJ EMfZMCWd/6rUv38An3mkvCWcxGKhN6/PgQ2+W4zpFQPDAKCxweB0Xh/TQDjQ/dSa oj/BccNKLIhGBBARAgAGBQJF4hFCAAoJEOVE3gebfDKNJ4sAn3owtLwwEWtpw9VQ xTc66cmdoFqPAJ4r2z3VgRa/Ns/uWMxV0Zlee/f2M4hGBBARAgAGBQJF4i3gAAoJ EHZJQAVJruv2v54AoJCl4M0ClZrwxyTkOXJs7xeQjtDtAJ485636UH2u71nZdIyG TMqQkszmBohGBBARAgAGBQJF4sNEAAoJEH5OpU/Qq0B1NE8AoOJY9VXq8PPDDPjR PaJLahjOykz+AKDN3jXgHvqD26euQ1ksEBc8Vn6zF4hMBBARAgAMBQJF4sR8BYMC hj7cAAoJEHMcr9NTwaMv9/EAn35hATWBiY7ra8Z2bjy+GZ4eSLQmAKDX1GfInkT5 7/rzmpkxn+IQlikCMIhGBBARAgAGBQJF4s6iAAoJENoZYjcCOz9PA5IAoIZucQg6 PaqLETbGch/y2UM6BhZ2AJ92fj8dOvoKNxn9Rh4UcTSSiPXNDohGBBARAgAGBQJF 4eL3AAoJEHhn1Tx0eTXduhcAn2LWbAgZcRRU7PJtIO3zqsIm6keDAKCeZgrQaUd1 GSNW4AzZLuT/XXiWW4kCHAQQAQIABgUCReLO2gAKCRBSIlPD1yc5gYUMD/0ah8Kq I6rjyi7pWqPPcPKy9ZCnPJv2JJllu1wx4dqRZnUVA3rmHAUpzQp7HsfMXWLgjxOn UEvzjZkPPamYnczdE65l5M8zah1WNjfR8Vk4/XaeolVXe3a5R8Vxj27QRa+T5yEH prb5hPo4uFWkPlJgJd+qcXCIc28135QngN5uRRQK4NnM/oTtv2nv15L4M4qiH6V+ We5IW+Tjt74O0mSEekg1bB/XKlF/XcgyO8rEZgqwufZ4cHbzWYXw3C+CKkhDSDIt GUw9HesOu1FS+Mf/Js4+/kFjW8ZJPFO+A2z3gYTDzaXGq2zlvbqw1gYId5pbukVM 6PRqQrlqtI2Kza7/CY85b+DVU9Zwe/Hr+yYnEJdG+eWkshmB0mIXgQlSaf/sglsA ncrmxA/gm5IxaE3TIRW/mtizuCUwq+gigIUEANAsNwR5a/RAekc8aNaO1cSj8izl Gqrl6cuQ5jyizUJB5AcOV4CUDiazITOasbt4+xx9MTsciqWIkMLYRloVuqXgsoKO TxTT6Zq+lPEGRyYds7OEdaXHWPO0OJ2ZPCagb3OvqxJc123Xf7XXySGkGXzZgoA6 D4BwIB0b5WQFq8722b0tJPktH2a5clKJio3SMir1bpPT6b/CM/Mrk3kIFKJpmvEB YrKTCfhJnDI2GJ4Z/f6rUDhiyQ5yj5Rop2zot4hGBBARAgAGBQJF4vk5AAoJEItK xIGsHnFeeYYAnRbZnnFoSrbo5E908zFdUPwfVfUoAJ9Dgo1WuGHPD+89PSqsyMsh K1qavIhGBBARAgAGBQJF4y0kAAoJELOx+BoCeHiA9a0An0E0Zyjequ/iRSSB+Yol hRqc87tpAJ9PeRbv8Ce1TY6qCoyIO76zYScX5YhGBBARAgAGBQJF40D2AAoJEDia VjzCcqEmvrkAnimr8D1OTH8O8+E3A2VOoxLhG8PTAJ93AR9hPTBxVBY+TqzapQz1 2ROtjohGBBARAgAGBQJF40DdAAoJEB9/MmoS7vYqmnUAnjcrUSIjc8jjfdxLhJES 9yDBTP/gAJ9ZSpKAG4kvVjZqcSBhudGIw2NkQokBHAQQAQIABgUCReM6egAKCRDo 4GL2DcsEMZKUB/9bQd/kyhettf5FPhSPgtVgZanF2kI0WnDWUGXbbn8vLs7GNGsb 6eyuUDEMkL/f6xtVHNPC44HarRbawhph/m0P25KQlaHX4120gdYzPR7mnUMk9g7P 2ycNrcND730oJMS3f8FBhe9fnt4adPU8mp5fgU2zTsdVHpa2zUVZHNh84iuEoxoZ JEWEyHHJke/avbbc/G6JmMD+8vOV8nKHbuzNOAfA09kPJWAPcfR/grCpEMZ8SkB9 F4FvPEjU2HxeFKx1vWNTamkr6ygUVlX7bBwLCe9p+7ue1rMeKOMsJF7UnAkOthEC 2IeyhPn1gyErrjYzQOX+3+YPCSO73fBxSG6liEYEEBECAAYFAkXjS5cACgkQKJz/ wOY81tb5TwCeLd//hOBTT9hnSkZFuxLso9J3cToAoKnsSW/csdFyRJLh024CqSzu 3/QXiEYEExECAAYFAkXjRMAACgkQjCXuDw3At9aUHQCglgCi6nNiupwbEfwEsvd4 MRYVzGsAniDj36LSv47TIbmUQJlR/qiNJ+phiEYEEBECAAYFAkXjVQEACgkQmEvT gKxfcAxEEACgmX4IGrSutcvAs9Pfr6JYEE3hdsYAn1yLt/tyLO9laWWhLKhNH7MP Hc0xiEYEEBECAAYFAkXjT0YACgkQIae1O4AJae8N+ACfXCp09XmUQQ/xvA4LipoT AoyqX+oAn3aZHFSOKENXaHthrpt0FFaPVNEJiEYEEBECAAYFAkXjfaMACgkQzxI0 fJaL1Yct2gCdEw43ra6oy0cwLX+zwRzTXazKQn0An0FuDnGs6J5+x6hlK3MFjyfR YZc5iEYEEBECAAYFAkXkGvoACgkQZDZDYQnzQCR0eACfWdtadQLH9Bbi/YPOcheM mavmCrUAn1fBKs46WOq7jppufBXwcncegfxHiEYEEBECAAYFAkXlgbQACgkQeQ6M lGH/2qvDyQCffMAMRUHCPKIbbz59BVNmgpyvSmYAnRMspmLYF0gk0xfHoIFaS3nw t3DgiQIcBBABAgAGBQJF6Vo/AAoJEFeTDasLhrBnakQP/1Z460aR3KyxrCrEcDJ/ Vzf7vsbq1DQnmoRuIgpKmR87N3qRLb2p94ffRYYxlWcFj1jiYT3Wq2bxjHyCZPgc AM2bQuuJMFxQo2xgwobyNqesIafgdbMjdUEAVy+NTyJfdmM3I57lkrleGz6lk9oj MLoIDa/tR1C+uoLuSWMj0Xk/nCT+WnN3/xqZyPIa+i6MN8fuI6Nsa/C1jiNw2FnZ y721hl+P1Bhx+i9aiXCR0qz/3AOAOz25F0OXNKKdzOgdo5mCkelbUaey4gPpvb2o Z30rh6VTelOOlGU6WbEO3DQBuOGAxJ1Ux801przITs1923bZU8EPyfDZyZWINkpl 7M4En4bqGKQkjTIfE8GrSSCp9rsLg1siK38yMYodegSzSJ7ZWWGlyuKvrim1eQw8 svSzRphsujaDJG8Oy3Dlc3qBbA/CGx1OtyML5G/w5C5b2Wz/BkMgHnOfOJSVjGlJ JrxGyydRqThibZ88yRcZ8130COubR4Rr2I+TD+FZLhGtzQGia4gDQ9QG5td6LS5y LPc3Y52NcwWsbMHWzLTQ2k3O7PcsetRPLpduiq1eZUZZveY0MSjH+uH3xzp6qfj9 I4FDtK6epHQ0F9Dw8kK9qBAhiqrKxsUUbalx5Pup0gIkzNe1vzjByS2P/j2VMhbi nhG5FZl0O2mPcIXHeHlAJdGCiEYEEBECAAYFAkXt5LkACgkQMGnpIbeahxy4RwCg gxD0dEmGz7ipFrmwbIGTxuxIS+IAoKfxzxjiT2m3AEvfkL/xNuqgenPViEYEEBEC AAYFAkXkwVwACgkQcLIDITr1nRa4rQCfZvrXaoYQ8TeX/lhuJfmsPb7kIRcAniKy +cTGNExRmZutFX/OcnatDZExiEYEEBECAAYFAkXqoaAACgkQL5UVCKrmAi7oEwCg u/2cheN4mU+yFFIG6HmLrbeIc5IAoI2I4eLWJdmLpJleOYgF7CtTGIKxiEYEEBEC AAYFAkX/bGMACgkQOpD/wRQI1/HBUwCglcM0b6fl1oP8iofWeovuhSk4+5sAmQHr gf2pbqFW1oTBNS60dNQjA7VdiEYEEBECAAYFAka12CoACgkQXeJJllsDWKIizACg qk7R3BhnGgzraKbcP9qSMhbYBr8An2Xah3bURySnK2QBDx4GzNM/vCTqiEYEEBEC AAYFAkdZtOwACgkQcgQ2cL3l8e4/XACg2opaihfpMLeOKb2bNSD7cLpI3N0An2A2 r+PcOgUDt3qIIZ8i24HAhBnSiEYEEBECAAYFAkdZt8kACgkQ4Q56CecvefrAfgCf U/NbkK4wCiFMyviXo/F8tOEGyqkAnAgNaSmDzLkYZxHlM0SXosfHfV9diEYEExEC AAYFAkdacyUACgkQaGtW3WCKJJsOKwCeLKhorr01GCKnXR8QaGvImLVOm98AoJpy R9WMJ0csX+CuEdzGJDTlD8pxiEYEEBECAAYFAkddIIAACgkQt5wosOl/hW0OtwCg posF7nukdTQ1nsQd1AGHb0CkQzYAn06bBOKMXsPcN2VvMiO2hiv9FLhniHoEExEC ADoFAkdck2IzGmh0dHA6Ly93d3cuaGVucmlrbm9yZHN0cm9tLm5ldC9zaWduLXBv bGljeS0yMDA2LTEwAAoJEOdekMA5zDPbZ9IAnRTxxJl2Rtv1ZbnGsOuPJ6musP+5 AJ9b8b3Y9BL7PRHzWgQjzALVVXRrdIhGBBARAgAGBQJHXR/KAAoJEPG6TB7RyLqP 7nYAn048cLE/iNKJFxl/RwkY9VcRedkrAJ9+Y6u67OnG6HneUhzqGvMDbaGmAohG BBARAgAGBQJHXYVBAAoJEIUGW1nVLdGnUJ0AnjF43FY5SwhcW2JmuPVu1YnWfrww AJ990zkvmIQtRCrxMzMgThz4jVaoEIhGBBARAgAGBQJHXAvSAAoJEO2/HhEm8iS4 g2YAoMWbnnF/sbeM8+WToKO0nnoJrXVAAJ9iX3wXtSwAqrK+3X5imRfXGTxh8ohG BBMRAgAGBQJHXuTeAAoJEIXCJ+WlVzjy4fQAoKz8piSTCDPkv0qeNq0bdoDs9mOx AJ4lO8HpGDqjYheaAvKG7tFZ1fsZjIj7BBMBAgBFAhsDBAsHAwIDFQIDAxYCAQIe AQIXgCIYZG5zOnNpbW9uLmpvc2Vmc3Nvbi5vcmc/dHlwZT1DRVJUBQJF1dVYBQkL k/wtAAoJEO2iHpS1ZXFvjEQE/1HviHOOSHv0ZuOd+H6SVlkwnhmx4g6fpyeeOa49 lywggMBL8zddB/928PMYFQQ+pvYmECkOK+O6sVO2NkubopZwE/hUjt5sc0XTYQ9L vxp40N/KUR8fSR5FvLQSWYGYRDXkK3t3Cta83ZeJk2IK43DpgVoFWMN6x69DlRGT yRWbB2VdRvSZz3ZKp86p5cnwMT++K+pNxq+eY0UJorLRj+SIRgQQEQIABgUCSES5 dgAKCRBQLE8plp8qHbO7AKCPmi7Ri8FKIY/Wf9Ksa2NFDxUnRwCcCdAwwG67Zmpl FNtZlVDWwFEcvT+IRgQSEQIABgUCSFlvKwAKCRAk0yv5qpXDSUwfAJ0TPD78S3J8 UvoziG+bTCLTlPz1XwCgnWlV3PBKvOxuGSAdm/DOMlY1ogKJAaAEEAECAAYFAkkG vzkACgkQKe5YuZaGUXFYtgwgx9yOo8cCR2a0d/0J8Ux8wAnjLI8m68BCiKW6HmAz Xx/mNX2ezicSEyqcvv4q5XdpvSrcA2kmlREBpu7mmnyerUuWWsTLMbi9clXaKRZ6 yQJQBbrRYwrXtzdFziHqFjw+hC19uVXlPhXYa/8YL6aCO4JUlzWWgVF8xHupfRTI eXuGLkC+sWww2VmSm8Fg0FBG9jpIt4wYxNMI77so4szE/hoFQSdRtY1lC18jjluN iygGNQQPn7r5OKwrK9hX1gGZA2tGYVX0ZoYASRPZcUUzaYPH5cZ86SAg15zzroVD 4etmk/2iI4sdzR9PyKr0zUp5FNSAFRey6avPAhaTNsyVDRiKmK3PnZF9H9HaRLJJ nQEcvevN04Vg10VW/O3zCFMFi8zuxUP6ygoDdWZT9jR4wbzVEyFY7AUwXnStDd39 p3oamTb9XtlngTJjmVBZIOlap4vmKsm0t2xviaxto6uR+656Ya49+SoXp+u5+dGD T2o0kFlNaC5r9zovItqdDYUHtn7DsIhGBBARAgAGBQJJZyWPAAoJEEc46iFldJl6 1+EAn1jpiTpjqq/l1oKwJQYDB0WsqGd+AKDEiDHvrN46b58gzQKdVbs472bFS4j7 BBMBAgBFAhsDBAsHAwIDFQIDAxYCAQIeAQIXgCIYZG5zOnNpbW9uLmpvc2Vmc3Nv bi5vcmc/dHlwZT1DRVJUBQJIYfmJBQkNGHReAAoJEO2iHpS1ZXFvdAwFAIshSBfY 4Zn4BQfap1gTIjjcRy/v/bBnNMf8gMXkfm1FLTAaanO+n+lHsTNErPtaEfx8dyjv Eg+wmObaqAJYoR75pXBFbLKdiN/P1Tp5Wd/C0t+cTT2datz2PL5XFKAMRko9rST8 C1MWOiriH8akc6U6M+1Vy/dYcO2Tf3DxrXDLTFyrkfV9oREMsRFZu6W8P7UT578E pin/sTYYA619IXOI+wQTAQIARQIbAwQLBwMCAxUCAwMWAgECHgECF4AiGGRuczpz aW1vbi5qb3NlZnNzb24ub3JnP3R5cGU9Q0VSVAUCSaEuAAUJDq1aTgAKCRDtoh6U tWVxb4pUBP9f7+9yeYZCJTvILOWlsYIvl7J2P0em2qYn3NbDUS1yq+BUO8udTYNW wyxX9zGT5obhX9bhcWgms/UbGMsvlZcOT+e438P0t1q5q8u+FOgZtfkgZvyacCFv T4Fnd00B+RaaGZ2atnodvhN8qpzHIf8GVrhzULEtdA55BRw+x5f6ORdSD14IFWir Q4WWKaXTURx5LIRxs6twYJawkumU6m4KiNgEEwECACICGwMECwcDAgMVAgMDFgIB Ah4BAheABQJAhr4rBQkEnwT+AAoJEO2iHpS1ZXFvkxgE/2ZfCBqYKIe3SDM0tOVN rIeSZuVNUyn2xoqRKK4VomvTI1eMShfGa0twPVlBB5xXHt06yRbwjobJykmDc/Hm teel+FVWOcehnXq8T22gLENlEM0CUZellosNwFwdnWGOHGZs/B4BVCh2pzsCra6d i7MKCznZDOHX3TBLoqVHjWzCldxtwc6Y7fAsEtrLVos4+0JvjQoYYgHQyril5ywH Ys+InAQQAQIABgUCSw6cnwAKCRD1TYragIIf6syABACYfsh56PcvpDJ3pGPoylow LFW4DEP14dFlADmaZd+SedFZqXI/Vv+7fT19W1cx/HqG46WwmSQjPYSqI3IMpB4I YMnsDYDnis9GIXLZyy/s4i8WBiiuRkuG69Q+SOjyF4X7MBh3UB2zkelpHHe1OTkn OQ+7qzpZrp6YhpAMSmSx8ohGBBARAgAGBQJF6qGjAAoJEC+VFQiq5gIukCUAn2UX azhZrEHLvZH0c56N2LdNHYI6AJ4zZnN8vY09pgpA6p7+YGQfnjuyBohGBBARAgAG BQJK/ASbAAoJENG84OKPoRoVuxQAnRhqvmMVRkSQiHLSQEnXu4zO2SiXAJ4l9/uW rMqAKUPeBcxbT7xrnru0zIhGBBARAgAGBQJK/BdwAAoJEHJZXrGBcEuTMP4AoKtm e6FdYL53bVxbHklI8QwQEx6jAKCPSXqJmdslSfamkqA0dTncqUAZPohGBBARAgAG BQJLASucAAoJEBgFUbrZWjw1PeIAn3GHmjiGSmkJzDAKpovoGEviB4DQAJ4+tap0 0n1o0q+b+8YjEN9tCt/VZohGBBARAgAGBQJLDEARAAoJEHfdleLqUuz0LZMAn3fB mDQzpfUXyhciz6dUirKC0L6aAJ9IbQB4y0s1o8eR2ZxRXy5cYB30FIhGBBARAgAG BQJLDbh7AAoJEI53TMap06Pgx1gAnArZ857v7THGYpmTCjbwBz1oh7+4AJ9CNLFS BqnrZ+9pYKH12RiFHLmuLYhMBBMRAgAMBQI9XrB1BYMBV4o2AAoJELy7xJVxipJW GZ0AnjlyM5hKGecjlTcoKYWJlMDjf0vCAJ99oFg8mkzKasg3CREHi3Y3Fu26EohG BBARAgAGBQJLHGQ7AAoJEMcaTGXwWbHRLcgAn2h+moRVxidIb1mADTBGcOy0DjFj AJ9JLJMZgCvnQEmvyZcIssqTJ8Gx4YhWBBARCwAGBQJLEp4JAAoJEPKthaweQrNn E7UA3jYYOv08+w9dAdbxBmwnL+Lev2ZdSP8M+YS1pXIA31NNq1SYUuqb2CVCGUmM o8m/a5uSZ/0c2Yyr5OSI+wQTAQIARQIbAwQLBwMCAxUCAwMWAgECHgECF4AiGGRu czpzaW1vbi5qb3NlZnNzb24ub3JnP3R5cGU9Q0VSVAUCSe3n2gUJDvoUKwAKCRDt oh6UtWVxb8gaBP0SDiN4gn0EUY2PPLQvFNkvZ96dIpHbMpjfjkmYSJF0zhgcD7bx WXjXDNngBblX3JMs3yhg1GfQLvLVpQ64FakTT/XLCo9VecyFxILzq4aSQHyxG6Oc AKyq9ibpY4YtUutwV+jiO1/Zos8cdtsyDdn5RYYe6v27omKYRKrGHNlk8NjAQC2p ONY8MfPzMohWOcGhwdVYatAZXYENCo7hvlruiEYEEBECAAYFAkt731IACgkQchi8 veCamme7FQCgkuR72TM4Ii1XM3gNK/u1j3B38NwAn3GgZ51dtypPDikroOtv+W3J /bI+iEYEEBECAAYFAksBnFgACgkQ2yYwJIHdsGU/+gCff51YjGdTyDHizwOHy35N zqcJMVoAn3olfNMrg1kyD1ALOsJrRzgNyBkhiEYEEBECAAYFAkxL87YACgkQgxIg kKLogl4DuQCgvZr657F1MuZpnNSIjkwcd2ptvXgAn3eAnUDlROcQMZ0mRLYU9CX2 yfdZiEYEEBECAAYFAkxN8UgACgkQZR3zUj0j8l2XwgCgtRkGwT5aWUYbHugdou4O uCN5LzIAniyPXGVOll6eMmtikWqz2BvJC5dqiEYEEBECAAYFAkxN99oACgkQv2Bw i0hCbH4UTQCdGh2w9AKqGWfgM80p2l0bS7kRwIEAn3NoyUgMmxR2RCscRlymHiAO 27aduKsEPNUHewEFANj02qE/ETZBQ5V+1Ajgfb2kRca1/nTe5ekDvjtDIO3VXYyL RJ2mmJCfq+C13nCOOx6ILFBhMUXQ2Bk9A6u2mfBpAuFCj13N6tilkN4m98I96pwh ptyF/yNuPcnWCwM0MlqjFtPcCweb8YT4uMo3reBUxlprWFJRsw2+/ulWYpWEU7ct L4RReHFV5Ttkfr4D8RTL1HO6PFhg50N4slgIs5EABimIxQQYAQIADwIbDAUCTZN4 TgUJEkny0QAKCRDtoh6UtWVxbynQBP95riFeYed7jadJ0pCh7vFMiiz66zVEzrEs dnn8/yB0dYfl30oa+MkDm7kD/thYLGM3aIVwPnUYoSOI/QGxODmfHGSRvl0T1qD6 fBy5UedJtzQ3dQ3W6/c83zqjwokgg8UNrp1S4z5BFGdfqRP/Skr29FmxopZ4Ym4f WZtP1CTCTmAttw4T/hPBArueDCBHwlfHW4PsthyF3EbQFwN0JEoluI4ERBwt6wEE AOaG0PWwW6l4Z+nUf4bftXyaeB/jsGwFL3dEj7eZmM12r0zHj7JhQJa9bXZIsPYR toGIoKiVjZ7Qr2obwtLyQRl/I9LL4r+8FRbbxhtCF7gOfeDtP9DXwms03JY+T29W E6WdBD22tdNbbFgIAc9cZWAezh8PDP0BrKarAK7fq3AFACDNzuRhiMUEGAECAA8C GyAFAktHQWcFCQm+QXgACgkQ7aIelLVlcW9VbAUAiVWGH6mxz+3K+GXRwAKAjhKx kroM19MaHMsFN1XJaa/udyWGVnnNWn03wwLiXq/eVteIDxpnwVhegruRrfy43Olj fOWv5VdZSL6gk5AZ1g6e2/v1OjzshNT3899cU0FyHa6QJ/23/RfTjGpBgiw9/P+r 2CexOKtDGLIhx+U34e0bKKpapazmAYVKnnDmYsypNKkpB2RQXTcztEc+H6ieWriO BEQcLtIBBACsHgigl+x7ysKpE2RXNiZu3G/POu3KXcuuW42BLs3itM4uAJB5QnyW CoSvaHcoRnw+MYFY1jDDeuP8ydfriO/9hur1fElz++QUFFhPUhKoazN4Vzc/QpNe dVqEXnEbgxpDqaHLg+Ayrf80RN08f5Mn4jc4v/8o5rQykaPCa2cauwAgtfPwh4kB kgQYAQIADwIbAgUCS0dBeQUJCb5ApQDXwAsgBBkBAgA0BQJE8zgTLRSAAAAAABUA D3BrYS1hZGRyZXNzQGdudXBnLm9yZ2phc0BleHR1bmRvLmNvbQAKCRCnJxPIqrsf e3woA/9hac8iRbiR8BZTkT3c//RH0MdrWXLvM/clZumbsvF77YRI4nA+fcZZKfeH 5PL7dSE4iyogQzQhJD5I8Ab+W1qCFxP9dRadS2iVxvphRUFyNC3nzCnFFZnAR/BB HnxpN8kcEMMddZOrnw31ihqXBMIVK+IX9TPIcDKynd0GN7vv8AkQ7aIelLVlcW+g nQT7Ba4vgBu4MGskuyNh9QIVQZzhp0bL3G/fulWvq4E/NmtUlcv4lDbdeiT0gLne DfcCvyvXW1P1bW7IuqzfFfkrrEHzy2sfgMk397iBqVQFs77JFQqiBKeCTCPjaSZ2 Sb/CgwLYOpXzfz3NLVIGqbxfDlGwfR30ywC6TLKv6ofxorqcS1j7b/ftXW6pu7VH swRCGpmO6LO/Gql1NoZyWoSTRbiOBEQcLwkBBADEIt6ZjHBaobBcFSoxfvgZNBQu S+1JzzaxdaLHKuE83JrFgq4C+Uo7SeRcYQDBL9gwLib6AnuJOKyQb2JY9+hc8rlL zUCNFfs0DwHfgEBvmsltbZ4fKk4tD30xRQFjO40suqnAFlN66ahrPsOCggc2kykP jH8ivDWZfzfE2FDoXwAgpq05TYjFBBgBAgAPAhsMBQJLR0GCBQkJvkB3AAoJEO2i HpS1ZXFv5RAFAJZhm/6jE0qkf64f97wnb3eBolwn2cOQQ1vxOK7yy3sRdpCbw6rK uelnI3P5zm3xXHKCiWGbCq6ifEBqzkIfF99//WExmOeKM/anGon83bPFXGIpR8Si dD/N+dKXY66Y4oPeuVrwM8hpENPE+eHTbBQXrg8dA4smJsS3BIxvg0wch6I36n7X aKrAtf+zpargt/BDloG7q1MrK6WQPihnxAw= =fGHK -----END PGP PUBLIC KEY BLOCK----- ---------------------------------------------------------------------- Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. gss-1.0.2/NEWS0000644000000000000000000003577311663554622007725 00000000000000GSS NEWS -- History of user-visible changes. -*- outline -*- Copyright (C) 2003-2011 Simon Josefsson See the end for copying conditions. * Version 1.0.2 (released 2011-11-25) ** gss/api.h: Added RFC 5587 const typedefs. The new types are gss_const_buffer_t, gss_const_channel_bindings_t, gss_const_ctx_id_t, gss_const_cred_id_t, gss_const_name_t, gss_const_OID, and gss_const_OID_set. ** gss/api.h, gss/ext.h: Moved RFC 6339 functions from ext.h to api.h. The functions gss_oid_equal, gss_encapsulate_token, and gss_decapsulate_token are now standardized. The types have changed slightly to used RFC 5587 const types instead. This does not affect the ABI and doesn't modify any semantics: the functions did not modify the non-const parameters before. ** i18n: Translations were updated. ** build: Update gnulib files. Several QA bug fixes. ** API and ABI modifications. gss_oid_equal: gss_encapsulate_token: gss_decapsulate_token: See above. * Version 1.0.1 (released 2010-05-20) ** gss: New --list-mechanisms (-l) to list supported mechanisms in library. ** doc: Added section documenting command-line tool "gss". ** doc: Added PDF version of API reference manual. See doc/reference/gss.pdf. ** i18n: Translations were updated. ** build: The check for GNU Shishi now requires 0.0.42 or later. Earlier Shishi versions had bugs that caused the self-checks to fail. ** build: Update gnulib files. ** API and ABI modifications. No changes since last version. * Version 1.0.0 (released 2010-03-30) ** Rarely used GNU GSS extensions removed. The removed APIs are gss_copy_oid, gss_duplicate_oid, and gss_encapsulate_token_prefix. ** Align capsulation functions with Heimdal and specification document. The functions are gss_encapsulate_token and gss_decapsulate_token. The semantics and function prototypes changed slightly. ** Added --with-po-suffix configure parameter to modify the gettext domain. This parameter is useful when you want to have both this version and the older version installed at the same time. ** API and ABI modifications. gss_copy_oid: REMOVED. gss_duplicate_oid: REMOVED. gss_encapsulate_token_prefix: REMOVED. gss_encapsulate_token: MODIFIED. gss_decapsulate_token: MODIFIED. * Version 0.1.5 (released 2010-03-22) ** Properly increment shared library version for newly added APIs in v0.1.4. Note that the API/ABI is still fully backwards compatible. ** API and ABI modifications. No changes since last version. * Version 0.1.4 (released 2010-03-22) ** Add new interfaces defined in RFC 5801. The APIs are gss_inquire_mech_for_saslname and gss_inquire_saslname_for_mech. ** KRB5: Fix bug in channel binding computation. ** Update gnulib files. ** API and ABI modifications. gss_inquire_mech_for_saslname: ADDED. gss_inquire_saslname_for_mech: ADDED. * Version 0.1.3 (released 2010-03-15) ** KRB5: Add support for channel bindings. ** Build fixes and code cleanups. ** i18n: Added Finnish translation, thanks to Jorma Karvonen. ** i18n: Added Italian translation, thanks to Sergio Zanchetta. ** API and ABI modifications. No changes since last version. * Version 0.1.2 (released 2010-01-19) ** Build fixes and code cleanups. ** i18n: Added Finnish translation, thanks to Jorma Karvonen. ** API and ABI modifications. No changes since last version. * Version 0.1.1 (released 2009-04-03) ** libgss: Fix memory leak in gss_release_oid_set. ** libgss: Fix bug that prevented error messages from being translated. ** libgss krb5: no longer supports service names without hostname. The function gss_canonicalize_name will return a GSS_KRB5_S_G_BAD_SERVICE_NAME minor status code if you pass it a service name without a @hostname part. The reason is that there is no secure way to find a canonical name of the local host inside the library. Instead, the application must provide one. ** tests: Fix debug output and memory leaks. ** Install a libgss-*.def file when building under MinGW. ** Build fixes for MinGW. The krb5 mechanism now builds under MinGW as well. ** API and ABI modifications. No changes since last version. * Version 0.1.0 (released 2009-03-30) ** libgss: Shared library version is incremented. The library is backwards compatible on source code level if you don't use the gss_krb5* functions or the gss_alloc_fail_function variable. ** libgss: Kerberos V5 function symbols gss_krb5* not exported. They were never intended to be exported and have never been part of any header file. ** libgss: Obsolete gss_xalloc_die and gss_alloc_fail_function not exported. ** libgss: Add GSS_KRB5_NT_MACHINE_UID_NAME{,_static}. Defined in RFC 1964. ** libgss: New header file gss/krb5-ext.h used for GNU GSS specific extensions. Before gss/krb5.h was used for both offical and GNU GSS prototypes. ** libgss: The version script version is now GSS_0.1.0 instead of GSS_1.0. The use of GSS_1.0 in the last release was a mistake. ** libgss: Added version integer symbols to header file. The symbols are GSS_VERSION_MAJOR, GSS_VERSION_MINOR, GSS_VERSION_PATCH, and GSS_VERSION_NUMBER. ** doc: The GTK-DOC manual is now built properly. ** Fix compilation error with Sun Studio related to missing getopt. Reported by Dagobert Michelsen in . ** API and ABI modifications. GSS_KRB5_NT_MACHINE_UID_NAME: ADDED GSS_KRB5_NT_MACHINE_UID_NAME_static: ADDED gss_alloc_fail_function: REMOVED gss_krb5*: REMOVED GSS_VERSION_MAJOR: ADDED GSS_VERSION_MINOR: ADDED GSS_VERSION_PATCH: ADDED GSS_VERSION_NUMBER: ADDED * Version 0.0.26 (released 2009-03-27) ** libgss: The library will now return error codes when out of memory. The gss_alloc_fail_function variable is no longer declared, but is still available in the library for ABI compatibility. ** libgss: Use a LD version script on platforms where it is supported. Currently only GNU LD and the Solaris linker supports it. This helps Debian package tools to produce better dependencies. Before we used Libtool -export-symbols-regex that created an anonymous version tag. We use -export-symbols-regex when the system does not support LD version scripts, but that only affect symbol visibility. ** API and ABI modifications. gss_alloc_fail_function: No longer declared in header file. * Version 0.0.25 (released 2009-02-26) ** gss: Improve --help and --version output. ** doc: Change license on the manual to GFDLv1.3+. ** More compiler warnings enabled, and many warnings fixed. ** API and ABI modifications. No changes since last version. * Version 0.0.24 (released 2008-09-10) ** Fix non-portable use of brace expansion in makefiles. ** Update gnulib files. ** Fix some warnings and make distcheck build the software with -Werror. ** Translations files not stored directly in git to avoid merge conflicts. This allows us to avoid use of --no-location which makes the translation teams happier. ** API and ABI modifications. No changes since last version. * Version 0.0.23 (released 2007-12-19) ** Use gettext 0.17. ** Update gnulib files. ** API and ABI modifications. No changes since last version. * Version 0.0.22 (released 2007-06-29) ** GSS is now licensed under the GPL version 3 or later. ** GSS is now developed using Git instead of CVS. A public git mirror is available from . ** API and ABI modifications. No changes since last version. * Version 0.0.21 (released 2007-05-22) ** Fix 'make distclean'. Now src/gss_cmd.c and src/gss_cmd.h is only removed by 'make maintainer-clean'. Thanks to Bernd Zeimetz and Russ Allbery . ** Gnulib file update. ** API and ABI modifications. No changes since last version. * Version 0.0.20 (released 2007-04-16) ** Gnulib file update. ** API and ABI modifications. No changes since last version. * Version 0.0.19 (released 2007-01-09) ** Corrected years in copyright notices. ** Fixed a 64-bit bug in asn1.c:gss_decapsulate_token(). The bug resulted in 'make check' failures on AMD64 systems. Reported by Kurt Roeckx . ** Now autoconf 2.61, automake 1.10, and gettext 0.16 is required. ** Gnulib file update. ** API and ABI modifications. No changes since last version. * Version 0.0.18 (released 2006-11-06) ** Kerberos V5 gss_acquire_cred doesn't use the default realm when looking ** for hostkeys. This was the reason that 'make check' failed earlier. ** Gnulib file update, including a rewrite of `gss_check_version'. ** API and ABI modifications. No changes since last version. * Version 0.0.17 (released 2006-04-30) ** Debian packages are available from http://josefsson.org/gss/debian/ ** The library is linked with -no-undefined, for mingw32 cross compiles. ** The link test for Shishi was improved. ** Gnulib files were updated. ** API and ABI modifications. No changes since last version. * Version 0.0.16 (released 2005-08-11) ** Kinyarwanda translation added, by Steve Murphy. ** The help-gss@gnu.org mailing list is now mentioned in documentation. ** The license template in files were updated with the new FSF address. ** API and ABI modifications. gss_release_oid: REMOVED. It seem it was the wrong thing to export this API, although the underlaying question (who is responsible for managing dynamically allocated OIDs? How?) is still unanswered. * Version 0.0.15 (released 2004-11-22) ** Documentation improvements. For example, you can now browse the GSS manual using DevHelp. ** Libtool's -export-symbols-regex is now used to only export official APIs. Before, applications might accidentally access internal functions. Note that this is not supported on all platforms, so you must still make sure you are not using undocumented symbols in GSS. * Version 0.0.14 (released 2004-10-15) ** gss_import_name and gss_duplicate_name no longer clone the OID. Instead, only the pointer to the OID is cloned. It seem unclear where a cloned OID would be deallocated. ** Fixed handling of sequence numbers in gss_accept_sec_context, for servers. ** Fix crash in gss_accept_sec_context for NULL values of ret_flags. ** Fix memory leaks. ** Sync with new Shishi 0.0.18 API. * Version 0.0.13 (released 2004-08-08) ** Revamp of gnulib compatibility files. ** More translations. French (by Michel Robitaille) and Romanian (by Laurentiu Buzdugan). * Version 0.0.12 (released 2004-08-01) ** Added rudimentary self tests of Kerberos 5 context init/accept. Tests client and server authentication, with and without mutual authentication, and that various aspects of the API like ret_flags work. ** Various fixes, discovered while writing the Kerberos 5 self test. ** Cross compile builds should work. It should work for any sane cross compile target, but the only tested platform is uClibc/uClinux on Motorola Coldfire. * Version 0.0.11 (released 2004-04-18) ** Minor cleanups to the core header file. Using xom.h is no longer supported (the file doesn't exist on modern systems). ** Kerberos 5 sequence number handling fixed. First, gss_init_sec_context set the sequence numbers correctly, before the incorrect sequence numbers prevented gss_(un)wrap from working correctly. Secondly, gss_unwrap now check the sequence numbers correctly. This was prompted by the addition of randomized sequence numbers by default in Shishi 0.0.15. ** The compatibility files in gl/ where synced with Gnulib. ** Various bugfixes and cleanups. ** Polish translation added, by Jakub Bogusz. * Version 0.0.10 (released 2004-01-22) ** A command line tool "gss" added in src/. The tool can be used to split up an GSS-API error code into the calling error, the routine error and the supplementary info bits, and to print text describing the error condition. ** gss_display_status can return multiple description texts (using context). ** The Swedish translation has been updated. ** Various cleanups and improvements. * Version 0.0.9 (released 2004-01-15) ** Implemented gss_export_name and gss_krb5_inquire_cred_by_mech. The Kerberos 5 backend also support them. ** gss_inquire_cred support default credentials. ** Kerberos 5 gss_canonicalize_name now support all mandatory name types. ** Kerberos 5 gss_accept_sec_context now support sub-session keys in AP-REQ. ** Added new extended function API: gss_userok. This is the same as invoking gss_export_name on a name, removing the OID, and then comparing the remaining material using memcmp. ** API documentation in HTML format from GTK-DOC included in doc/reference/. * Version 0.0.8 (released 2004-01-11) ** Moved all backend specific code into sub-directories of lib/. This means everything related to the Kerberos 5 backend is now located in lib/krb5/. The backend is built into its own library (libgss-shishi.so), to facilitate future possible use of dlopen to dynamically load backends. ** The gss_duplicate_name function now allocate the output result properly. ** Man pages for all public functions are included. ** Documentation fixes. For example, all official APIs are now documented. * Version 0.0.7 (released 2003-11-26) ** Fixed typo that broke gss_wrap for 3DES with Kerberos 5. ** Improvements to build environment. The gss.h header file no longer include gss/krb5.h when the Kerberos 5 mechanism is disabled. ** Autoconf 2.59, Automake 1.8 beta, Libtool CVS used. * Version 0.0.6 (released 2003-09-22) ** Update for Shishi 0.0.7 API. * Version 0.0.5 (released 2003-08-31) ** Kerberos 5: Subkeys are supported. Shishi 0.0.4 required. ** Bug fixes. * Version 0.0.4 (released 2003-08-10) ** GSS is a GNU project. ** Kerberos 5 crypto fixes. This release accompany Shishi 0.0.1. * Version 0.0.3 (released 2003-07-02) ** Includes compatibility functionality from gnulib in gl/. ** Documentation improvements. The file README-alpha contains some hints for binary packagers. Essentially, don't distribute shared libraries, as this package is too immature to bump the shared object version for every modification currently. ** Bugfixes and cleanups. * Version 0.0.2 (released 2003-06-28) ** Server mode works (a little). GNU MailUtils can use GSS for its native GSSAPI authentication in server mode, which then interoperate with (at least) the GNU SASL command line client using GSS. ** Memory allocated via xalloc from gnulib. This takes care of out of memory errors, see the new section in the manual named "Out of Memory handling". * Version 0.0.1 (released 2003-06-12) ** Error handling. ** Swedish translation. ** Improved manual. ** Bug fixes. * Version 0.0.0 (released 2003-06-02) ** Initial release. The source code framework is in place, an outline of the documentation is ready, and there are some simple self tests. The Kerberos 5 mechanism (RFC 1964) supports mutual authentication and the standard DES cipher. The non-standard 3DES cipher is also implemented, but unfortunately there are no specifications for AES. GNU SASL can use this version to connect to GNU Mailutils and Cyrus IMAP servers that use the GSS implementations from MIT Kerberos or Heimdal. Server mode is not supported yet. ---------------------------------------------------------------------- Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. gss-1.0.2/README0000644000000000000000000000272511546676326010103 00000000000000GSS README -- Important introductory notes. Copyright (C) 2003-2011 Simon Josefsson See the end for copying conditions. This directory holds the Generic Security Service Library (GSSLib). See INSTALL for installation instructions, and doc/gss.{info,ps,pdf} for the manual. Unless you want to use this library to implement a new GSS mechanism, you will need to first install Shishi, as it is the only supported mechanism right now. See The GSS library (lib/) and test suite (tests/) are licensed under the GNU General Public License license version 3 or later (see COPYING), and the documentation (doc/) is licensed under the GNU Free Documentation License version 1.3 or later. The other sub-directories are included here for convenience, and are generated by other tools, or copied from other projects. If you need help to use Generic Security Service, or wish to help others, you are invited to join our mailing list help-gss@gnu.org, see . For updates to the project, see . For any copyright year range specified as YYYY-ZZZZ in this package note that the range specifies every single year in that closed interval. ---------------------------------------------------------------------- Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. gss-1.0.2/Makefile.am0000644000000000000000000000221411546676326011250 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc EXTRA_DIST = cfg.mk maint.mk .clcopying po/Makevars.in DISTCLEANFILES = po/Makevars pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gss.pc SUBDIRS = po gl lib src tests doc ACLOCAL_AMFLAGS = -I m4 -I gl/m4 -I lib/gl/m4 -I src/gl/m4 gss-1.0.2/COPYING0000644000000000000000000010437411361023201010226 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gss-1.0.2/ChangeLog0000644000000000000000000055141611663555054010775 000000000000002011-11-25 Simon Josefsson * NEWS: Version 1.0.2. 2011-11-25 Simon Josefsson * gl/m4/valgrind-tests.m4, gl/override/m4/valgrind-tests.m4.diff: Fix valgrind-tests.m4 patch. 2011-11-21 Simon Josefsson * configure.ac: Bump required gettext version (0.18.1 is part of Debian Squeeze). 2011-11-21 Simon Josefsson * configure.ac: Don't warn about missing pure/const attributes. 2011-11-21 Simon Josefsson * doc/gss.texi, lib/asn1.c: Doc fix to align with RFC 6339. 2011-11-21 Simon Josefsson * NEWS: Mention API changes. 2011-11-21 Simon Josefsson * .gitignore, NEWS, configure.ac, doc/reference/Makefile.am, doc/reference/gss-docs.sgml, doc/reference/version.xml.in, gtk-doc.make, m4/gtk-doc.m4: Update GTK-DOC infrastructure. 2011-11-21 Simon Josefsson * doc/cyclo/Makefile.am: Improve links in output. 2011-11-21 Simon Josefsson * NEWS, lib/asn1.c, lib/ext.c, lib/headers/gss/api.h, lib/headers/gss/ext.h, lib/oid.c: RFC 6339 adjustments. 2011-11-21 Simon Josefsson * NEWS: Mention RFC 6339. 2011-11-21 Simon Josefsson * GNUmakefile, build-aux/arg-nonnull.h, build-aux/c++defs.h, build-aux/gendocs.sh, build-aux/snippet/arg-nonnull.h, build-aux/snippet/c++defs.h, build-aux/snippet/warn-on-use.h, build-aux/useless-if-before-free, build-aux/vc-list-files, build-aux/warn-on-use.h, cfg.mk, doc/fdl-1.3.texi, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/manywarnings.m4, gl/m4/warnings.m4, gl/override/m4/valgrind-tests.m4.diff, lib/cred.c, lib/gl/Makefile.am, lib/gl/gettext.h, lib/gl/m4/extensions.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/include_next.m4, lib/gl/m4/stddef_h.m4, lib/gl/m4/string_h.m4, lib/gl/m4/strverscmp.m4, lib/gl/m4/warn-on-use.m4, lib/gl/override/lib/gettext.h.diff, lib/gl/stddef.in.h, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/errno.in.h, src/gl/error.c, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/gettext.h, src/gl/intprops.h, src/gl/m4/errno_h.m4, src/gl/m4/error.m4, src/gl/m4/extensions.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/include_next.m4, src/gl/m4/msvc-inval.m4, src/gl/m4/msvc-nothrow.m4, src/gl/m4/nocrash.m4, src/gl/m4/ssize_t.m4, src/gl/m4/stdarg.m4, src/gl/m4/stddef_h.m4, src/gl/m4/strerror.m4, src/gl/m4/string_h.m4, src/gl/m4/sys_socket_h.m4, src/gl/m4/unistd_h.m4, src/gl/m4/warn-on-use.m4, src/gl/msvc-inval.c, src/gl/msvc-inval.h, src/gl/msvc-nothrow.c, src/gl/msvc-nothrow.h, src/gl/override/lib/gettext.h.diff, src/gl/stdarg.in.h, src/gl/stddef.in.h, src/gl/strerror-override.c, src/gl/strerror-override.h, src/gl/strerror.c, src/gl/string.in.h, src/gl/unistd.in.h, src/gl/verify.h: Update gnulib files. 2011-04-05 Simon Josefsson * NEWS: Improve RFC 5587 entry. 2011-04-05 Simon Josefsson * cfg.mk, lib/asn1.c, lib/ext.c, lib/headers/gss/api.h: Update remaining copyright headers. 2011-04-05 Simon Josefsson * AUTHORS: Update PGP key. 2011-04-05 Simon Josefsson * lib/headers/gss/api.h: Indent RFC 5587 types. 2011-04-05 Simon Josefsson * maint.mk: Update gnulib files. 2011-04-05 Simon Josefsson * .clcopying, AUTHORS, Makefile.am, README-alpha, THANKS, cfg.mk, configure.ac, doc/Makefile.gdoci, doc/cyclo/Makefile.am, doc/gdoc, doc/gss.texi, gss.pc.in, lib/Makefile.am, lib/context.c, lib/cred.c, lib/error.c, lib/headers/gss.h.in, lib/headers/gss/krb5-ext.h, lib/headers/gss/krb5.h, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c, lib/libgss.map, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/saslname.c, lib/version.c, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/krb5context.c, tests/saslname.c, tests/threadsafety: Update copyright years. Use ranges. 2011-04-05 Simon Josefsson * build-aux/update-copyright, cfg.mk, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4: Add update-copyright gnulib module. 2011-04-03 Simon Josefsson * NEWS, gl/m4/valgrind-tests.m4, lib/asn1.c, lib/ext.c, lib/headers/gss/ext.h: Constify capsulate and oid equal function. Fix valgrind check. 2011-04-03 Simon Josefsson * gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-common.m4: Update gnulib files. 2011-04-03 Simon Josefsson * NEWS, README, doc/Makefile.am, lib/headers/gss/api.h: Add RFC 5587 const typedefs. 2011-03-31 Simon Josefsson * gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-common.m4: Work around gnulib issue. 2011-03-31 Simon Josefsson * GNUmakefile, build-aux/arg-nonnull.h, build-aux/c++defs.h, build-aux/config.rpath, build-aux/gendocs.sh, build-aux/pmccabe2html, build-aux/useless-if-before-free, build-aux/vc-list-files, build-aux/warn-on-use.h, doc/gendocs_template, gl/Makefile.am, gl/dummy.c, gl/m4/00gnulib.m4, gl/m4/autobuild.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4, gl/m4/ld-version-script.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/m4/manywarnings.m4, gl/m4/valgrind-tests.m4, gl/m4/warnings.m4, lib/gl/Makefile.am, lib/gl/dummy.c, lib/gl/gettext.h, lib/gl/m4/00gnulib.m4, lib/gl/m4/extensions.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/gnulib-tool.m4, lib/gl/m4/include_next.m4, lib/gl/m4/ld-output-def.m4, lib/gl/m4/stddef_h.m4, lib/gl/m4/string_h.m4, lib/gl/m4/strverscmp.m4, lib/gl/m4/warn-on-use.m4, lib/gl/m4/wchar_t.m4, lib/gl/stddef.in.h, lib/gl/string.in.h, lib/gl/strverscmp.c, maint.mk, src/gl/Makefile.am, src/gl/errno.in.h, src/gl/error.c, src/gl/error.h, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/getopt1.c, src/gl/getopt_int.h, src/gl/gettext.h, src/gl/intprops.h, src/gl/m4/00gnulib.m4, src/gl/m4/errno_h.m4, src/gl/m4/error.m4, src/gl/m4/extensions.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/gnulib-tool.m4, src/gl/m4/include_next.m4, src/gl/m4/stdarg.m4, src/gl/m4/stddef_h.m4, src/gl/m4/strerror.m4, src/gl/m4/string_h.m4, src/gl/m4/unistd_h.m4, src/gl/m4/version-etc.m4, src/gl/m4/warn-on-use.m4, src/gl/m4/wchar_t.m4, src/gl/progname.c, src/gl/progname.h, src/gl/stdarg.in.h, src/gl/stddef.in.h, src/gl/strerror.c, src/gl/string.in.h, src/gl/unistd.in.h, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2011-03-31 Simon Josefsson * po/LINGUAS, po/eo.po.in, po/fr.po.in, po/zh_CN.po.in: Sync with TP. 2010-12-09 Simon Josefsson * po/fi.po.in, po/it.po.in, po/pl.po.in: Sync with TP. 2010-12-09 Simon Josefsson * configure.ac: Use silent build rules. 2010-12-09 Simon Josefsson * build-aux/gendocs.sh, gl/m4/gnulib-common.m4, lib/gl/gettext.h, lib/gl/m4/gnulib-common.m4, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/gettext.h, src/gl/intprops.h, src/gl/m4/getopt.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/unistd_h.m4, src/gl/string.in.h, src/gl/unistd.in.h: Update gnulib files. 2010-11-16 Simon Josefsson * tests/basic.c, tests/krb5context.c, tests/saslname.c: Fix warnings. 2010-11-16 Simon Josefsson * src/gss.c: Fix compiler warnings. 2010-11-16 Simon Josefsson * configure.ac: Disable -Wtraditional-conversion because of too many warnings with gcc 4.4. 2010-11-16 Simon Josefsson * configure.ac: Drop -Wpadded because standard GSS-API header files are unpadded on 64-bit archs. 2010-11-16 Simon Josefsson * cfg.mk: Remove mingw32 rules, not useful anymore. 2010-11-16 Simon Josefsson * .x-sc_bindtextdomain: Fix syntax checks. 2010-11-16 Simon Josefsson * gtk-doc.make: Fix syntax checks. 2010-11-16 Simon Josefsson * NEWS, configure.ac: Bump versions. 2010-11-16 Simon Josefsson * po/it.po.in: Sync with TP. 2010-11-16 Simon Josefsson * GNUmakefile, build-aux/gendocs.sh, build-aux/gnupload, build-aux/pmccabe.css, build-aux/pmccabe2html, doc/fdl-1.3.texi, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/ld-version-script.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, lib/gl/Makefile.am, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/include_next.m4, lib/gl/m4/string_h.m4, lib/gl/m4/wchar_t.m4, lib/gl/stddef.in.h, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/errno.in.h, src/gl/getopt.in.h, src/gl/m4/errno_h.m4, src/gl/m4/error.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/include_next.m4, src/gl/m4/stdarg.m4, src/gl/m4/string_h.m4, src/gl/m4/wchar_t.m4, src/gl/stdarg.in.h, src/gl/stddef.in.h, src/gl/strerror.c, src/gl/string.in.h, src/gl/unistd.in.h: Update gnulib files. 2010-05-27 Simon Josefsson * doc/announce.txt: Doc fix. 2010-05-20 Simon Josefsson * doc/announce.txt: Update announcement.txt. 2010-05-20 Simon Josefsson * cfg.mk: Fix release target. 2010-05-20 Simon Josefsson * ChangeLog: Generated. 2010-05-20 Simon Josefsson * NEWS: Version 1.0.1. 2010-05-20 Simon Josefsson * doc/gendocs_template, gl/override/doc/gendocs_template.diff: Fix HTML page. 2010-05-20 Simon Josefsson * NEWS: Add. 2010-05-20 Simon Josefsson * .gitignore: Add. 2010-05-20 Simon Josefsson * NEWS, cfg.mk, doc/reference/Makefile.am, gtk-doc.make, m4/gtk-doc.m4: Update GTK-DOC files to build PDF file. 2010-05-20 Simon Josefsson * po/zh_CN.po.in: Sync with TP. 2010-05-20 Simon Josefsson * NEWS: Reorder. 2010-05-20 Simon Josefsson * THANKS: Add. 2010-05-20 Simon Josefsson * tests/Makefile.am: Link krb5context with -lshishi directly because it uses Shishi functions. Reported by ludo@gnu.org (Ludovic Courtès). 2010-05-20 Simon Josefsson * NEWS, doc/gss.texi, src/gss.c, src/gss.ggo: Add gss --list-mechanisms. Document gss tool. 2010-05-20 Simon Josefsson * src/gl/Makefile.am, src/gl/errno.in.h, src/gl/error.c, src/gl/error.h, src/gl/intprops.h, src/gl/m4/errno_h.m4, src/gl/m4/error.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/strerror.m4, src/gl/m4/string_h.m4, src/gl/strerror.c, src/gl/string.in.h, src/gss.c: Restructure gss tool. Use error module. 2010-05-20 Simon Josefsson * src/gss.c: Fix --help typo. 2010-05-20 Simon Josefsson * configure.ac: Improve final debug output. 2010-05-20 Simon Josefsson * configure.ac, doc/gendocs_template, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/valgrind-tests.m4, m4/valgrind.m4: Update gnulib files, use valgrind-tests module. 2010-05-17 Simon Josefsson * build-aux/c++defs.h, build-aux/gendocs.sh, build-aux/gnupload, gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-common.m4, maint.mk, src/gl/Makefile.am, src/gl/m4/gnulib-common.m4, src/gl/m4/unistd_h.m4, src/gl/unistd.in.h: Update gnulib files. 2010-04-27 Simon Josefsson * tests/basic.c: Test capsulation functions more. 2010-04-25 Simon Josefsson * build-aux/vc-list-files, maint.mk: Update gnulib files. 2010-04-22 Simon Josefsson * configure.ac: Fix Shishi detection. 2010-04-22 Simon Josefsson * lib/headers/gss/krb5-ext.h, lib/headers/gss/krb5.h, lib/krb5/cred.c, lib/krb5/k5internal.h, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c: Bump copyright years. 2010-04-22 Simon Josefsson * .clcopying, .cvsusers, AUTHORS, Makefile.am, NEWS, README, THANKS, cfg.mk, configure.ac, doc/Makefile.gdoci, gss.pc.in, lib/Makefile.am, lib/cred.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/version.c, src/Makefile.am, src/gss.ggo, tests/Makefile.am, tests/threadsafety: Bump copyright years. Fix PGP key. 2010-04-22 Simon Josefsson * cfg.mk, lib/asn1.c, lib/headers/gss.h.in, lib/headers/gss/api.h, lib/headers/gss/ext.h, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/meta.c, lib/meta.h, lib/name.c, lib/obsolete.c, lib/oid.c, lib/saslname.c, lib/version.c, src/gss.c, tests/basic.c, tests/krb5context.c, tests/saslname.c: Indent code. 2010-04-22 Simon Josefsson * gl/Makefile.am~, gl/m4/gnulib-cache.m4~, gl/m4/gnulib-comp.m4~: Remove backup files. 2010-04-22 Simon Josefsson * maint.mk, src/gl/getopt.c, src/gl/getopt_int.h, src/gl/m4/getopt.m4: Update gnulib files. 2010-04-14 Simon Josefsson * NEWS, configure.ac: Make sure we have a recent Shishi. 2010-04-13 Simon Josefsson * m4/valgrind.m4: Use valgrind -q. 2010-04-13 Simon Josefsson * .x-sc_prohibit_empty_lines_at_EOF, .x-sc_prohibit_test_minus_ao, GNUmakefile, NEWS, build-aux/c++defs.h, build-aux/warn-on-use.h, doc/reference/Makefile.am, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/lib-link.m4, lib/gl/Makefile.am, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/string_h.m4, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/getopt.in.h, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/unistd_h.m4, src/gl/stdarg.in.h, src/gl/unistd.in.h: Update gnulib files and fix new syntax-check warnings. 2010-04-13 Simon Josefsson * NEWS, po/fi.po.in, po/id.po.in, po/pl.po.in, po/vi.po.in: Sync with TP. 2010-03-30 Simon Josefsson * NEWS, configure.ac: Bump versions. 2010-03-30 Simon Josefsson * doc/announce.txt: Update for 1.0.0. 2010-03-30 Simon Josefsson * ChangeLog: Generated. 2010-03-30 Simon Josefsson * Makefile.am: Need to distclean po/Makevars because it is generated. 2010-03-30 Simon Josefsson * cfg.mk: Copy cyclomatic code coverage chart too. 2010-03-30 Simon Josefsson * cfg.mk: Upload to ftp.gnu.org. 2010-03-30 Simon Josefsson * NEWS: Version 1.0.0. 2010-03-30 Simon Josefsson * NEWS: Add. 2010-03-30 Simon Josefsson * lib/saslname.c, lib/version.c: Doc fix for GTK-DOC warning. 2010-03-29 Simon Josefsson * lib/meta.c, lib/meta.h, lib/saslname.c: gss_inquire_mech_for_saslname: Don't read out bounds. 2010-03-29 Simon Josefsson * tests/saslname.c: Check for read-out-bounds. 2010-03-29 Simon Josefsson * Makefile.am: Dist po/Makevars.in. 2010-03-29 Simon Josefsson * po/POTFILES.in: Revert. 2010-03-29 Simon Josefsson * po/POTFILES.in: Add. 2010-03-29 Simon Josefsson * configure.ac, lib/error.c, lib/internal.h, lib/saslname.c, m4/po-suffix.m4, po/Makevars, po/Makevars.in: Add --with-po-suffix support. 2010-03-28 Simon Josefsson * .x-sc_texinfo_acronym: Add. 2010-03-28 Simon Josefsson * src/Makefile.am: Fix syntax-check warning. 2010-03-28 Simon Josefsson * lib/ext.c, lib/headers/gss/ext.h: gss_oid_equal: Constify parameters. 2010-03-28 Simon Josefsson * lib/asn1.c: Doc fix. 2010-03-28 Simon Josefsson * gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, lib/gl/gettext.h, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/stddef_h.m4, lib/gl/m4/string_h.m4, lib/gl/string.in.h, maint.mk, src/gl/getopt.in.h, src/gl/gettext.h, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/stddef_h.m4, src/gl/m4/unistd_h.m4, src/gl/stdarg.in.h, src/gl/unistd.in.h: Update gnulib files. 2010-03-26 Simon Josefsson * lib/krb5/error.c: Cleanup code. 2010-03-26 Simon Josefsson * lib/error.c, lib/ext.c, lib/internal.h, lib/meta.c, lib/saslname.c: Cleanup. 2010-03-26 Simon Josefsson * lib/asn1.c, lib/internal.h, lib/krb5/context.c, lib/krb5/msg.c, lib/misc.c, tests/krb5context.c: Align capsulation APIs with new approach and update callers. 2010-03-25 Simon Josefsson * doc/reference/gss-docs.sgml, lib/headers/gss.h.in, lib/saslname.c: Drop Since gtk-doc stuff. 2010-03-25 Simon Josefsson * doc/gss.texi: Doc updates for v1.0.0. 2010-03-25 Simon Josefsson * lib/misc.c: Doc fix. 2010-03-25 Simon Josefsson * lib/ext.c: Drop gss_copy_oid. 2010-03-25 Simon Josefsson * doc/gss.texi, lib/ext.c, lib/misc.c: Update documentation for removed APIs. Fix internal use of gss_copy_oid. 2010-03-25 Simon Josefsson * NEWS: Bump version. 2010-03-25 Simon Josefsson * lib/headers/gss/ext.h: Drop bad extension functions and fix capsulate functions. Drop gss_copy_oid, gss_duplicate_oid, and gss_encapsulate_token_prefix. Align gss_encapsulate_token and gss_decapsulate_token with draft-josefsson-gss-capsulate-00.txt. 2010-03-25 Simon Josefsson * lib/libgss.map: Bump version and drop bad extension functions. The dropped functions are gss_copy_oid, gss_duplicate_oid, and gss_encapsulate_token_prefix. 2010-03-25 Simon Josefsson * configure.ac: Bump version, break API/ABI compatibility. 2010-03-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2010-03-22 Simon Josefsson * .gitignore: Add more. 2010-03-22 Simon Josefsson * doc/announce.txt: Update for 0.1.5. 2010-03-22 Simon Josefsson * ChangeLog: Generated. 2010-03-22 Simon Josefsson * NEWS: Version 0.1.5. 2010-03-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2010-03-22 Simon Josefsson * doc/announce.txt: Add. 2010-03-22 Simon Josefsson * ChangeLog: Generated. 2010-03-22 Simon Josefsson * NEWS: Version 0.1.4. 2010-03-22 Simon Josefsson * configure.ac: Don't generate src/gl/tests/Makefile. 2010-03-22 Simon Josefsson * src/gl/Makefile.am, src/gl/m4/alloca.m4, src/gl/m4/dos.m4, src/gl/m4/dup2.m4, src/gl/m4/eealloc.m4, src/gl/m4/environ.m4, src/gl/m4/errno_h.m4, src/gl/m4/fcntl-o.m4, src/gl/m4/fcntl_h.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/longlong.m4, src/gl/m4/lstat.m4, src/gl/m4/malloc.m4, src/gl/m4/malloca.m4, src/gl/m4/mode_t.m4, src/gl/m4/multiarch.m4, src/gl/m4/open.m4, src/gl/m4/pathmax.m4, src/gl/m4/putenv.m4, src/gl/m4/setenv.m4, src/gl/m4/stat.m4, src/gl/m4/stdbool.m4, src/gl/m4/stdint.m4, src/gl/m4/stdlib_h.m4, src/gl/m4/symlink.m4, src/gl/m4/sys_stat_h.m4, src/gl/m4/time_h.m4, src/gl/m4/wchar_h.m4, src/gl/m4/wint_t.m4, src/gl/tests/Makefile.am, src/gl/tests/alloca.in.h, src/gl/tests/binary-io.h, src/gl/tests/dup2.c, src/gl/tests/errno.in.h, src/gl/tests/fcntl.in.h, src/gl/tests/ignore-value.h, src/gl/tests/intprops.h, src/gl/tests/lstat.c, src/gl/tests/macros.h, src/gl/tests/malloc.c, src/gl/tests/malloca.c, src/gl/tests/malloca.h, src/gl/tests/malloca.valgrind, src/gl/tests/open.c, src/gl/tests/pathmax.h, src/gl/tests/putenv.c, src/gl/tests/same-inode.h, src/gl/tests/setenv.c, src/gl/tests/signature.h, src/gl/tests/stat.c, src/gl/tests/stdbool.in.h, src/gl/tests/stdint.in.h, src/gl/tests/stdlib.in.h, src/gl/tests/symlink.c, src/gl/tests/sys_stat.in.h, src/gl/tests/test-alloca-opt.c, src/gl/tests/test-binary-io.c, src/gl/tests/test-binary-io.sh, src/gl/tests/test-dup2.c, src/gl/tests/test-environ.c, src/gl/tests/test-errno.c, src/gl/tests/test-getopt.c, src/gl/tests/test-getopt.h, src/gl/tests/test-getopt_long.h, src/gl/tests/test-lstat.c, src/gl/tests/test-lstat.h, src/gl/tests/test-malloca.c, src/gl/tests/test-open.c, src/gl/tests/test-open.h, src/gl/tests/test-setenv.c, src/gl/tests/test-stat.c, src/gl/tests/test-stat.h, src/gl/tests/test-stdbool.c, src/gl/tests/test-stddef.c, src/gl/tests/test-stdint.c, src/gl/tests/test-symlink.c, src/gl/tests/test-symlink.h, src/gl/tests/test-unsetenv.c, src/gl/tests/test-version-etc.c, src/gl/tests/test-version-etc.sh, src/gl/tests/time.in.h, src/gl/tests/unsetenv.c, src/gl/tests/verify.h, src/gl/tests/version-etc-fsf.c, src/gl/tests/wchar.in.h: Remove gnulib self-tests for src/. 2010-03-22 Simon Josefsson * .gitignore: Ignore more. 2010-03-22 Simon Josefsson * doc/reference/Makefile.am: Ignore more. 2010-03-22 Simon Josefsson * tests/saslname.c: Cast to avoid warnings. 2010-03-22 Simon Josefsson * lib/context.c: Doc fix. 2010-03-22 Simon Josefsson * NEWS: Add. 2010-03-22 Simon Josefsson * build-aux/c++defs.h, build-aux/gendocs.sh, build-aux/gnupload, build-aux/link-warning.h, build-aux/vc-list-files, build-aux/warn-on-use.h, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, lib/gl/Makefile.am, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/string_h.m4, lib/gl/m4/warn-on-use.m4, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/getopt.c, src/gl/m4/fcntl_h.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/setenv.m4, src/gl/m4/stdlib_h.m4, src/gl/m4/sys_stat_h.m4, src/gl/m4/time_h.m4, src/gl/m4/unistd_h.m4, src/gl/m4/warn-on-use.m4, src/gl/m4/wchar.m4, src/gl/m4/wchar_h.m4, src/gl/tests/Makefile.am, src/gl/tests/fcntl.in.h, src/gl/tests/ignore-value.h, src/gl/tests/stdlib.in.h, src/gl/tests/sys_stat.in.h, src/gl/tests/test-fcntl-h.c, src/gl/tests/test-lstat.c, src/gl/tests/test-stdlib.c, src/gl/tests/test-symlink.c, src/gl/tests/test-sys_stat.c, src/gl/tests/test-time.c, src/gl/tests/test-unistd.c, src/gl/tests/test-wchar.c, src/gl/tests/time.in.h, src/gl/tests/wchar.in.h, src/gl/unistd.in.h: Update gnulib files. 2010-03-22 Simon Josefsson * doc/gss.texi: Document SASL GS2 functions. 2010-03-22 Simon Josefsson * NEWS, doc/reference/gss-docs.sgml, lib/Makefile.am, lib/headers/gss/api.h, lib/libgss.map, lib/meta.c, lib/meta.h, lib/saslname.c, po/POTFILES.in, tests/Makefile.am, tests/saslname.c: Add new interfaces defined in RFC 5801. The APIs are gss_inquire_mech_for_saslname and gss_inquire_saslname_for_mech. 2010-03-21 Simon Josefsson * lib/krb5/checksum.c: Fix warning. 2010-03-19 Simon Josefsson * lib/krb5/checksum.c: Correctly hash all of channel bindings. 2010-03-18 Simon Josefsson * tests/krb5context.c: Test channel bindings too, to avoid regressions. 2010-03-18 Simon Josefsson * NEWS, lib/krb5/checksum.c: KRB5: Fix bug in channel binding computation. 2010-03-18 Simon Josefsson * README-alpha: Mention gengetopt. 2010-03-16 Simon Josefsson * tests/Makefile.am: Dist shishi.conf. 2010-03-15 Simon Josefsson * NEWS, configure.ac: Bump versions. 2010-03-15 Simon Josefsson * doc/announce.txt: Add. 2010-03-15 Simon Josefsson * ChangeLog: Generated. 2010-03-15 Simon Josefsson * NEWS: Version 0.1.3. 2010-03-15 Simon Josefsson * lib/krb5/checksum.c, tests/Makefile.am, tests/shishi.conf: Handle no channel bindings. 2010-03-15 Simon Josefsson * NEWS: Add. 2010-03-15 Simon Josefsson * po/LINGUAS, po/it.po.in: Sync with TP. 2010-03-15 Simon Josefsson * cfg.mk: Add review-diff. 2010-03-10 Simon Josefsson * .gitignore: Add. 2010-03-10 Simon Josefsson * NEWS, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c: KRB5: Add support for channel bindings. 2010-03-10 Simon Josefsson * src/gss.c: Fix gcc warning. 2010-03-10 Simon Josefsson * lib/asn1.c: Input parameter sanization. 2010-03-10 Simon Josefsson * NEWS, configure.ac: Bump version. 2010-01-19 Simon Josefsson * ChangeLog: Generated. 2010-01-19 Simon Josefsson * doc/cyclo/Makefile.am: Fix. 2010-01-19 Simon Josefsson * NEWS: Version 0.1.2. 2010-01-19 Simon Josefsson * doc/cyclo/Makefile.am: Add cyclo stuff. 2010-01-19 Simon Josefsson * build-aux/pmccabe.css, build-aux/pmccabe2html, configure.ac, doc/Makefile.am, gl/Makefile.am, gl/Makefile.am~, gl/m4/gnulib-cache.m4, gl/m4/gnulib-cache.m4~, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~: Add cyclo stuff. 2010-01-19 Simon Josefsson * cfg.mk, lib/gl/Makefile.am, maint.mk, src/gl/Makefile.am: Update gnulib files. 2010-01-19 Simon Josefsson * doc/Makefile.am: Bump copyright year. 2010-01-12 Simon Josefsson * gl/m4/gnulib-common.m4, gl/m4/warnings.m4, lib/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-common.m4: Update gnulib files. 2010-01-12 Simon Josefsson * m4/valgrind.m4: Fix valgrind.m4. 2010-01-12 Simon Josefsson * .x-sc_trailing_blank: Add. 2010-01-12 Simon Josefsson * README-alpha, cfg.mk, configure.ac, doc/gss.texi, doc/reference/gss-docs.sgml, doc/texinfo.css, gss.pc.in, gtk-doc.make, lib/ext.c, lib/internal.h, lib/krb5/Makefile.am, lib/misc.c, lib/version.c, m4/valgrind.m4, maint.mk, src/gss.c, tests/Makefile.am, tests/basic.c, tests/krb5context.c: Fix syntax-checks. 2010-01-12 Simon Josefsson * tests/utils.c: Add. 2010-01-12 Simon Josefsson * .x-sc_prohibit_cvs_keyword: Add. 2010-01-12 Simon Josefsson * .x-sc_program_name: Add. 2010-01-12 Simon Josefsson * .x-sc_cast_of_argument_to_free: Add. 2010-01-12 Simon Josefsson * .x-sc_GPL_version: Add. 2010-01-12 Simon Josefsson * NEWS: Add. 2010-01-12 Simon Josefsson * po/LINGUAS, po/fi.po.in, po/zh_CN.po.in: Sync with TP. 2010-01-12 Simon Josefsson * GNUmakefile, build-aux/arg-nonnull.h, build-aux/config.rpath, build-aux/gendocs.sh, build-aux/link-warning.h, build-aux/useless-if-before-free, build-aux/vc-list-files, build-aux/warn-on-use.h, gl/Makefile.am, gl/Makefile.am~, gl/dummy.c, gl/m4/00gnulib.m4, gl/m4/autobuild.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-cache.m4~, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/gnulib-tool.m4, gl/m4/ld-version-script.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/m4/manywarnings.m4, gl/m4/warnings.m4, lib/gl/Makefile.am, lib/gl/dummy.c, lib/gl/gettext.h, lib/gl/m4/00gnulib.m4, lib/gl/m4/extensions.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/gnulib-tool.m4, lib/gl/m4/include_next.m4, lib/gl/m4/ld-output-def.m4, lib/gl/m4/stddef_h.m4, lib/gl/m4/string_h.m4, lib/gl/m4/strverscmp.m4, lib/gl/m4/wchar_t.m4, lib/gl/stddef.in.h, lib/gl/string.in.h, lib/gl/strverscmp.c, maint.mk, src/gl/Makefile.am, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/getopt1.c, src/gl/getopt_int.h, src/gl/gettext.h, src/gl/m4/00gnulib.m4, src/gl/m4/alloca.m4, src/gl/m4/dos.m4, src/gl/m4/dup2.m4, src/gl/m4/eealloc.m4, src/gl/m4/environ.m4, src/gl/m4/errno_h.m4, src/gl/m4/extensions.m4, src/gl/m4/fcntl-o.m4, src/gl/m4/fcntl_h.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/gnulib-tool.m4, src/gl/m4/include_next.m4, src/gl/m4/longlong.m4, src/gl/m4/lstat.m4, src/gl/m4/malloc.m4, src/gl/m4/malloca.m4, src/gl/m4/mode_t.m4, src/gl/m4/multiarch.m4, src/gl/m4/open.m4, src/gl/m4/pathmax.m4, src/gl/m4/putenv.m4, src/gl/m4/setenv.m4, src/gl/m4/stat.m4, src/gl/m4/stdarg.m4, src/gl/m4/stdbool.m4, src/gl/m4/stddef_h.m4, src/gl/m4/stdint.m4, src/gl/m4/stdlib_h.m4, src/gl/m4/symlink.m4, src/gl/m4/sys_stat_h.m4, src/gl/m4/time_h.m4, src/gl/m4/unistd_h.m4, src/gl/m4/version-etc.m4, src/gl/m4/warn-on-use.m4, src/gl/m4/wchar.m4, src/gl/m4/wchar_t.m4, src/gl/m4/wint_t.m4, src/gl/progname.c, src/gl/progname.h, src/gl/stdarg.in.h, src/gl/stddef.in.h, src/gl/tests/Makefile.am, src/gl/tests/alloca.in.h, src/gl/tests/binary-io.h, src/gl/tests/dup2.c, src/gl/tests/errno.in.h, src/gl/tests/fcntl.in.h, src/gl/tests/intprops.h, src/gl/tests/lstat.c, src/gl/tests/macros.h, src/gl/tests/malloc.c, src/gl/tests/malloca.c, src/gl/tests/malloca.h, src/gl/tests/open.c, src/gl/tests/pathmax.h, src/gl/tests/putenv.c, src/gl/tests/same-inode.h, src/gl/tests/setenv.c, src/gl/tests/signature.h, src/gl/tests/stat.c, src/gl/tests/stdbool.in.h, src/gl/tests/stdint.in.h, src/gl/tests/stdlib.in.h, src/gl/tests/symlink.c, src/gl/tests/sys_stat.in.h, src/gl/tests/test-alloca-opt.c, src/gl/tests/test-binary-io.c, src/gl/tests/test-dup2.c, src/gl/tests/test-environ.c, src/gl/tests/test-errno.c, src/gl/tests/test-fcntl-h.c, src/gl/tests/test-getopt.c, src/gl/tests/test-getopt.h, src/gl/tests/test-getopt_long.h, src/gl/tests/test-lstat.c, src/gl/tests/test-lstat.h, src/gl/tests/test-malloca.c, src/gl/tests/test-open.c, src/gl/tests/test-open.h, src/gl/tests/test-setenv.c, src/gl/tests/test-stat.c, src/gl/tests/test-stat.h, src/gl/tests/test-stdbool.c, src/gl/tests/test-stddef.c, src/gl/tests/test-stdint.c, src/gl/tests/test-stdlib.c, src/gl/tests/test-symlink.c, src/gl/tests/test-symlink.h, src/gl/tests/test-sys_stat.c, src/gl/tests/test-time.c, src/gl/tests/test-unistd.c, src/gl/tests/test-unsetenv.c, src/gl/tests/test-version-etc.c, src/gl/tests/test-version-etc.sh, src/gl/tests/test-wchar.c, src/gl/tests/time.in.h, src/gl/tests/unsetenv.c, src/gl/tests/verify.h, src/gl/tests/version-etc-fsf.c, src/gl/tests/wchar.in.h, src/gl/unistd.in.h, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2009-12-29 Simon Josefsson * NEWS: Add. 2009-12-29 Simon Josefsson * build-aux/arg-nonnull.h, lib/gl/m4/stddef_h.m4, lib/gl/m4/wchar_t.m4, lib/gl/stddef.in.h, src/gl/Makefile.am, src/gl/m4/alloca.m4, src/gl/m4/dos.m4, src/gl/m4/dup2.m4, src/gl/m4/eealloc.m4, src/gl/m4/environ.m4, src/gl/m4/errno_h.m4, src/gl/m4/extensions.m4, src/gl/m4/fcntl-o.m4, src/gl/m4/fcntl_h.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/longlong.m4, src/gl/m4/lstat.m4, src/gl/m4/malloc.m4, src/gl/m4/malloca.m4, src/gl/m4/mode_t.m4, src/gl/m4/multiarch.m4, src/gl/m4/open.m4, src/gl/m4/pathmax.m4, src/gl/m4/putenv.m4, src/gl/m4/setenv.m4, src/gl/m4/stat.m4, src/gl/m4/stdbool.m4, src/gl/m4/stddef_h.m4, src/gl/m4/stdint.m4, src/gl/m4/stdlib_h.m4, src/gl/m4/symlink.m4, src/gl/m4/sys_stat_h.m4, src/gl/m4/time_h.m4, src/gl/m4/wchar.m4, src/gl/m4/wchar_t.m4, src/gl/m4/wint_t.m4, src/gl/stddef.in.h, src/gl/tests/alloca.in.h, src/gl/tests/binary-io.h, src/gl/tests/dup2.c, src/gl/tests/errno.in.h, src/gl/tests/fcntl.in.h, src/gl/tests/intprops.h, src/gl/tests/lstat.c, src/gl/tests/macros.h, src/gl/tests/malloc.c, src/gl/tests/malloca.c, src/gl/tests/malloca.h, src/gl/tests/malloca.valgrind, src/gl/tests/open.c, src/gl/tests/pathmax.h, src/gl/tests/putenv.c, src/gl/tests/same-inode.h, src/gl/tests/setenv.c, src/gl/tests/signature.h, src/gl/tests/stat.c, src/gl/tests/stdbool.in.h, src/gl/tests/stdint.in.h, src/gl/tests/stdlib.in.h, src/gl/tests/symlink.c, src/gl/tests/sys_stat.in.h, src/gl/tests/test-alloca-opt.c, src/gl/tests/test-binary-io.c, src/gl/tests/test-binary-io.sh, src/gl/tests/test-dup2.c, src/gl/tests/test-environ.c, src/gl/tests/test-errno.c, src/gl/tests/test-fcntl-h.c, src/gl/tests/test-getopt.c, src/gl/tests/test-getopt.h, src/gl/tests/test-getopt_long.h, src/gl/tests/test-lstat.c, src/gl/tests/test-lstat.h, src/gl/tests/test-malloca.c, src/gl/tests/test-open.c, src/gl/tests/test-open.h, src/gl/tests/test-setenv.c, src/gl/tests/test-stat.c, src/gl/tests/test-stat.h, src/gl/tests/test-stdbool.c, src/gl/tests/test-stddef.c, src/gl/tests/test-stdint.c, src/gl/tests/test-stdlib.c, src/gl/tests/test-symlink.c, src/gl/tests/test-symlink.h, src/gl/tests/test-sys_stat.c, src/gl/tests/test-time.c, src/gl/tests/test-unsetenv.c, src/gl/tests/test-wchar.c, src/gl/tests/time.in.h, src/gl/tests/unsetenv.c, src/gl/tests/wchar.in.h: Update gnulib files. 2009-12-29 Simon Josefsson * build-aux/gendocs.sh, build-aux/gnupload, build-aux/link-warning.h, build-aux/useless-if-before-free, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/ld-version-script.m4, gl/m4/lib-ld.m4, gl/m4/warnings.m4, lib/gl/Makefile.am, lib/gl/gettext.h, lib/gl/m4/extensions.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/include_next.m4, lib/gl/m4/string_h.m4, lib/gl/override/lib/gettext.h.diff, lib/gl/string.in.h, lib/gl/strverscmp.c, maint.mk, src/gl/Makefile.am, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/getopt1.c, src/gl/getopt_int.h, src/gl/gettext.h, src/gl/m4/getopt.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/include_next.m4, src/gl/m4/unistd_h.m4, src/gl/m4/version-etc.m4, src/gl/override/lib/gettext.h.diff, src/gl/progname.c, src/gl/progname.h, src/gl/tests/Makefile.am, src/gl/tests/test-unistd.c, src/gl/tests/test-version-etc.c, src/gl/tests/test-version-etc.sh, src/gl/tests/verify.h, src/gl/unistd.in.h, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2009-07-29 Simon Josefsson * README-alpha: Typo. 2009-07-23 Simon Josefsson * build-aux/vc-list-files, gl/m4/lib-link.m4, gl/m4/manywarnings.m4, lib/gl/Makefile.am, lib/gl/m4/include_next.m4, lib/gl/m4/string_h.m4, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/m4/gnulib-comp.m4, src/gl/m4/include_next.m4, src/gl/m4/unistd_h.m4, src/gl/m4/version-etc.m4, src/gl/tests/Makefile.am, src/gl/tests/test-unistd.c, src/gl/tests/test-version-etc.c, src/gl/tests/test-version-etc.sh, src/gl/tests/verify.h, src/gl/tests/version-etc-fsf.c, src/gl/unistd.in.h, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2009-06-17 Simon Josefsson * doc/gss.texi: Typo. 2009-06-17 Simon Josefsson * doc/gss.texi: Typo. 2009-05-20 Simon Josefsson * cfg.mk, configure.ac, lib/Makefile.am, lib/krb5/Makefile.am, src/Makefile.am, tests/Makefile.am: Build fixes. 2009-05-08 Simon Josefsson * cfg.mk: Fix -Werror handling. 2009-05-06 Simon Josefsson * lib/krb5/context.c: Fix warning on Ubuntu 8.04. 2009-05-06 Simon Josefsson * build-aux/gnupload, build-aux/useless-if-before-free, build-aux/vc-list-files, doc/gendocs_template, gl/Makefile.am, gl/Makefile.am~, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, lib/gl/gettext.h, maint.mk, src/gl/getopt1.c, src/gl/gettext.h: Update gnulib files. 2009-05-06 Simon Josefsson * README-alpha: Fix. 2009-05-06 Simon Josefsson * configure.ac: Fix warnings on Ubuntu 8.04. 2009-04-15 Simon Josefsson * build-aux/gendocs.sh, doc/gendocs_template, gl/m4/ld-version-script.m4, maint.mk: Update gnulib files. 2009-04-03 Simon Josefsson * NEWS, configure.ac: Bump versions. 2009-04-03 Simon Josefsson * ChangeLog: Generated. 2009-04-03 Simon Josefsson * NEWS: Version 0.1.1. 2009-04-03 Simon Josefsson * NEWS: Fix. 2009-04-03 Simon Josefsson * NEWS, lib/misc.c, tests/basic.c: Fix memory leaks. 2009-04-03 Simon Josefsson * configure.ac: Drop obsolete output def call. 2009-04-03 Simon Josefsson * configure.ac, lib/Makefile.am: Fix variable name. 2009-04-03 Simon Josefsson * lib/gl/Makefile.am, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/ld-output-def.m4, m4/output-def.m4: Use ld-output-def from gnulib. 2009-04-03 Simon Josefsson * configure.ac, m4/valgrind.m4, tests/Makefile.am: Use valgrind for self tests. 2009-04-03 Simon Josefsson * NEWS: Add. 2009-04-02 Simon Josefsson * NEWS, lib/krb5/name.c: Don't use insecure gethostname for name canonicalization. 2009-04-02 Simon Josefsson * gl/Makefile.am, gl/Makefile.am~, gl/m4/gnulib-cache.m4, gl/m4/gnulib-cache.m4~, lib/gl/Makefile.am, lib/gl/errno.in.h, lib/gl/gethostname.c, lib/gl/m4/errno_h.m4, lib/gl/m4/gethostname.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/sockpfaf.m4, lib/gl/m4/sys_socket_h.m4, lib/gl/m4/unistd_h.m4, lib/gl/sys_socket.in.h, lib/gl/unistd.in.h, lib/gl/w32sock.h: Update gnulib files. 2009-04-02 Simon Josefsson * tests/basic.c: Don't print garbage. 2009-04-01 Simon Josefsson * lib/error.c: Need to use bindtextdomain in libgss too. 2009-04-01 Simon Josefsson * lib/krb5/name.c: Fix logic. 2009-04-01 Simon Josefsson * lib/krb5/name.c: Work around HOST_NAME_MAX problem on mingw. 2009-03-31 Simon Josefsson * NEWS: Add. 2009-03-31 Simon Josefsson * lib/Makefile.am, lib/krb5/Makefile.am, src/Makefile.am, tests/Makefile.am: Fix order of -I's. 2009-03-31 Simon Josefsson * lib/gl/Makefile.am, lib/gl/errno.in.h, lib/gl/gethostname.c, lib/gl/m4/errno_h.m4, lib/gl/m4/gethostname.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/sockpfaf.m4, lib/gl/sys_socket.in.h, lib/gl/w32sock.h: Update gnulib files. 2009-03-31 Simon Josefsson * lib/Makefile.am: Typo. 2009-03-31 Simon Josefsson * NEWS, configure.ac, lib/Makefile.am, m4/output-def.m4: Generate *.def file. 2009-03-31 Simon Josefsson * m4/pkg.m4: Needed by gtk-doc.m4. 2009-03-31 Simon Josefsson * m4/gtk-doc.m4: Update gtk-doc.m4. 2009-03-30 Simon Josefsson * NEWS: Fix. 2009-03-30 Simon Josefsson * NEWS, configure.ac: Bump versions. 2009-03-30 Simon Josefsson * ChangeLog: Generated. 2009-03-30 Simon Josefsson * doc/texinfo.css: Update texinfo css. 2009-03-30 Simon Josefsson * NEWS: Version 0.1.0. 2009-03-30 Simon Josefsson * NEWS: Fix. 2009-03-30 Simon Josefsson * NEWS, configure.ac, doc/reference/gss-docs.sgml, lib/headers/gss.h.in: Add GSS_VERSION_MAJOR, GSS_VERSION_MINOR, GSS_VERSION_PATCH, and GSS_VERSION_NUMBER. 2009-03-27 Simon Josefsson * src/Makefile.am: Link libcmd-gss to gnulib. 2009-03-27 Simon Josefsson * NEWS: Add. 2009-03-27 Simon Josefsson * NEWS: Fix. 2009-03-27 Simon Josefsson * NEWS: Add. 2009-03-27 Simon Josefsson * lib/libgss.map: Use better shared library version name. 2009-03-27 Simon Josefsson * NEWS: Add. 2009-03-27 Simon Josefsson * doc/reference/gss-docs.sgml: Fix gtk-doc manual. 2009-03-27 Simon Josefsson * NEWS: Fix. 2009-03-27 Simon Josefsson * NEWS: Add. 2009-03-27 Simon Josefsson * NEWS, configure.ac, lib/headers/gss/krb5.h: Bump version. 2009-03-27 Simon Josefsson * lib/ext.c, lib/libgss.map: Remove obsolete functions. 2009-03-27 Simon Josefsson * lib/libgss.map: Don't export krb5 functions. 2009-03-27 Simon Josefsson * lib/libgss.map: Separate official/inofficial krb5. 2009-03-27 Simon Josefsson * lib/headers/gss/krb5-ext.h, lib/internal.h, lib/krb5/k5internal.h, lib/krb5/oid.c: Fix compilation. 2009-03-27 Simon Josefsson * NEWS, configure.ac, lib/Makefile.am, lib/headers/gss.h.in, lib/headers/gss/krb5-ext.h, lib/headers/gss/krb5.h, lib/krb5/oid.c: Add GSS_KRB5_NT_MACHINE_UID_NAME*. Add gss/krb5-ext.h. 2009-03-27 Simon Josefsson * NEWS, configure.ac, lib/headers/gss/krb5.h, lib/libgss.map: Revert "Drop GSS_KRB5*_static symbols." This reverts commit 6f67203f18eb78151d959b7985a1afd53b49909d. 2009-03-27 Simon Josefsson * lib/krb5/oid.c: Revert "Fix krb5 OID implementation." This reverts commit eca0ae5c9ec8226918ee46d3f734ab06d7292ae7. 2009-03-27 Simon Josefsson * lib/krb5/oid.c: Fix krb5 OID implementation. 2009-03-27 Simon Josefsson * NEWS, configure.ac, lib/headers/gss/krb5.h, lib/libgss.map: Drop GSS_KRB5*_static symbols. 2009-03-27 Simon Josefsson * lib/krb5/error.c: Use static on internal symbols. 2009-03-27 Simon Josefsson * NEWS, THANKS, src/gl/Makefile.am, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/getopt1.c, src/gl/getopt_int.h, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/unistd_h.m4, src/gl/tests/Makefile.am, src/gl/tests/test-unistd.c, src/gl/unistd.in.h: Add getopt gnulib module to src/gl/. Reported by Dagobert Michelsen in . 2009-03-27 Simon Josefsson * NEWS, configure.ac: Bump versions. 2009-03-27 Simon Josefsson * configure.ac: Only test warning parmeters when using GCC. 2009-03-27 Simon Josefsson * ChangeLog: Generated. 2009-03-27 Simon Josefsson * NEWS: Version 0.0.26. 2009-03-27 Simon Josefsson * lib/Makefile.am: Dist libgss.map. 2009-03-27 Simon Josefsson * configure.ac: More debug output. 2009-03-27 Simon Josefsson * Makefile.am, configure.ac: Fix distcheck. 2009-03-27 Simon Josefsson * THANKS: Add. 2009-03-27 Simon Josefsson * AUTHORS: Update PGP key. 2009-03-27 Simon Josefsson * NEWS, gl/Makefile.am, gl/Makefile.am~, gl/m4/gnulib-cache.m4, gl/m4/gnulib-cache.m4~, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/ld-version-script.m4, lib/Makefile.am, lib/libgss.map: Use library version script. 2009-03-27 Simon Josefsson * README-alpha: Fix. 2009-03-27 Simon Josefsson * tests/Makefile.am, tests/basic.c, tests/krb5context.c: Make self-tests compile. 2009-03-27 Simon Josefsson * doc/reference/Makefile.am: Update. 2009-03-27 Simon Josefsson * doc/reference/Makefile.am: Ignore more. 2009-03-27 Simon Josefsson * lib/gl/Makefile.am, lib/gl/gettext.h, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-comp.m4: Update gnulib files. 2009-03-27 Simon Josefsson * lib/Makefile.am, lib/gl/Makefile.am, lib/gl/getopt.c, lib/gl/getopt.in.h, lib/gl/getopt1.c, lib/gl/getopt_int.h, lib/gl/gettext.h, lib/gl/m4/getopt.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-comp.m4: Update gnulib files. 2009-03-27 Simon Josefsson * Makefile.am, configure.ac, gl/Makefile.am, gl/Makefile.am~, gl/gethostname.c, gl/getopt.c, gl/getopt.in.h, gl/getopt1.c, gl/getopt_int.h, gl/gettext.h, gl/m4/extensions.m4, gl/m4/gethostname.m4, gl/m4/getopt.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-cache.m4~, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/include_next.m4, gl/m4/string_h.m4, gl/m4/strverscmp.m4, gl/m4/sys_socket_h.m4, gl/m4/unistd_h.m4, gl/override/lib/gettext.h.diff, gl/string.in.h, gl/strverscmp.c, gl/unistd.in.h, lib/Makefile.am, lib/gl/Makefile.am, lib/gl/dummy.c, lib/gl/gethostname.c, lib/gl/getopt.c, lib/gl/getopt.in.h, lib/gl/getopt1.c, lib/gl/getopt_int.h, lib/gl/gettext.h, lib/gl/m4/00gnulib.m4, lib/gl/m4/extensions.m4, lib/gl/m4/gethostname.m4, lib/gl/m4/getopt.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/gnulib-tool.m4, lib/gl/m4/include_next.m4, lib/gl/m4/string_h.m4, lib/gl/m4/strverscmp.m4, lib/gl/m4/sys_socket_h.m4, lib/gl/m4/unistd_h.m4, lib/gl/override/lib/gettext.h.diff, lib/gl/string.in.h, lib/gl/strverscmp.c, lib/gl/unistd.in.h, lib/krb5/Makefile.am: Separate library gnulib files from top-level gnulib files. 2009-03-27 Simon Josefsson * lib/libgss.map: Add comment about obsolete symbols. 2009-03-27 Simon Josefsson * NEWS, doc/gss.texi, lib/headers/gss/ext.h: Drop gss_alloc_fail_function. 2009-03-27 Simon Josefsson * gl/unistd.in.h: Update gnulib files. 2009-03-19 Simon Josefsson * configure.ac, src/gss.c, tests/basic.c, tests/krb5context.c: Assume standard header files. 2009-03-19 Simon Josefsson * configure.ac: Drop unused. 2009-03-19 Simon Josefsson * GNUmakefile, build-aux/gnupload, maint.mk: Update gnulib files. 2009-03-05 Simon Josefsson * build-aux/gnupload: Update gnulib files. 2009-03-05 Simon Josefsson * lib/krb5/name.c: Avoid xgethostname. 2009-03-05 Simon Josefsson * gl/Makefile.am, gl/dummy.c, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/inline.m4, gl/m4/xalloc.m4, gl/xalloc.h, gl/xgethostname.c, gl/xgethostname.h, gl/xmalloc.c: Drop xalloc. 2009-03-05 Simon Josefsson * lib/asn1.c, lib/error.c, lib/ext.c, lib/internal.h, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/msg.c, lib/krb5/name.c: Reduce xalloc usage further. 2009-03-05 Simon Josefsson * lib/context.c, lib/cred.c, lib/ext.c, lib/internal.h, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/misc.c, lib/name.c: Reduce xalloc usage. 2009-03-04 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-common.m4, src/gl/Makefile.am, src/gl/m4/gnulib-common.m4, src/gl/m4/stdarg.m4: Update gnulib files. 2009-03-02 Simon Josefsson * lib/gss.map, lib/libgss.map: Rename. 2009-03-02 Simon Josefsson * lib/gss.map: Add. 2009-03-02 Simon Josefsson * lib/error.c: Use static on error constant arrays. 2009-02-26 Simon Josefsson * doc/gss.texi: Bump copyright year. 2009-02-26 Simon Josefsson * NEWS, doc/Makefile.am, doc/gdoc: Update gdoc. 2009-02-26 Simon Josefsson * configure.ac: Bump versions. 2009-02-26 Simon Josefsson * cfg.mk: Fix release rules. 2009-02-26 Simon Josefsson * ChangeLog: Generated. 2009-02-26 Simon Josefsson * NEWS: Version 0.0.25. 2009-02-26 Simon Josefsson * tests/Makefile.am, tests/basic.c, tests/krb5context.c: Fix header usage in self tests. 2009-02-26 Simon Josefsson * lib/krb5/Makefile.am: Fix. 2009-02-26 Simon Josefsson * lib/Makefile.am, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/k5internal.h, lib/meta.c, lib/meta.h, src/Makefile.am, src/gss.c: Fix header file usage. 2009-02-26 Simon Josefsson * configure.ac, lib/Makefile.am, lib/api.h, lib/ext.h, lib/gss.h.in, lib/headers/gss.h.in, lib/headers/gss/api.h, lib/headers/gss/ext.h, lib/headers/gss/krb5.h, lib/krb5/krb5.h: Move header files around. 2009-02-26 Simon Josefsson * configure.ac: Print whether krb5 plugin is built. 2009-02-26 Simon Josefsson * configure.ac, gl/override/lib/progname.h.diff, src/Makefile.am, src/gl/gettext.h, src/gl/override/lib/gettext.h.diff, src/gl/override/lib/progname.h.diff, src/gl/progname.h: Fix gnulib files. 2009-02-26 Simon Josefsson * Makefile.am, configure.ac, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/stdarg.m4, gl/progname.c, gl/progname.h, gl/stdarg.in.h, gl/version-etc.c, gl/version-etc.h, src/Makefile.am, src/gl/Makefile.am, src/gl/gettext.h, src/gl/m4/00gnulib.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/gnulib-tool.m4, src/gl/m4/include_next.m4, src/gl/m4/stdarg.m4, src/gl/progname.c, src/gl/progname.h, src/gl/stdarg.in.h, src/gl/tests/Makefile.am, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2009-02-26 Simon Josefsson * configure.ac: Fix tarname. 2009-02-26 Simon Josefsson * NEWS: Add. 2009-02-26 Simon Josefsson * configure.ac, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/stdarg.m4, gl/override/lib/progname.h.diff, gl/progname.c, gl/progname.h, gl/stdarg.in.h, gl/version-etc.c, gl/version-etc.h, src/Makefile.am, src/gss.c: Update gss --help and --version outputs. 2009-02-26 Simon Josefsson * po/id.po.in, po/vi.po.in: Sync with TP. 2009-02-26 Simon Josefsson * build-aux/gendocs.sh, build-aux/gnupload, doc/gendocs_template, gl/Makefile.am, gl/m4/00gnulib.m4, gl/m4/extensions.m4, gl/m4/gethostname.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/inline.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/strverscmp.m4, gl/m4/unistd_h.m4, gl/unistd.in.h: Update gnulib files. 2008-12-11 Simon Josefsson * NEWS: Add. 2008-12-11 Simon Josefsson * configure.ac, src/Makefile.am, tests/Makefile.am, tests/basic.c, tests/krb5context.c: Fix warnings. 2008-12-11 Simon Josefsson * build-aux/gnupload, configure.ac, gl/Makefile.am, gl/gettext.h, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/manywarnings.m4, gl/m4/warnings.m4, gl/override/lib/gettext.h.diff, lib/Makefile.am, lib/krb5/Makefile.am, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/msg.c, lib/krb5/name.c, lib/misc.c, lib/obsolete.c, maint.mk: Enable more warnings. Fix many warnings. 2008-11-25 Simon Josefsson * doc/reference/Makefile.am, gtk-doc.make, m4/gtk-doc.m4: Update gtk-doc files. 2008-11-12 Simon Josefsson * README: Mention license versions. 2008-11-12 Simon Josefsson * cfg.mk: Add coverage and mingw rules. 2008-11-12 Simon Josefsson * configure.ac: Enable automake warnings. Fix libtool warning. 2008-11-12 Simon Josefsson * GNUmakefile, Makefile.am, NEWS, cfg.mk, configure.ac, doc/Makefile.am, doc/fdl-1.3.texi, doc/fdl.texi, doc/gss.texi, gl/Makefile.am, gl/gethostname.c, gl/m4/gethostname.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/string_h.m4, gl/m4/sys_socket_h.m4, gl/m4/unistd_h.m4, gl/m4/warnings.m4, gl/string.in.h, gl/unistd.in.h, maint.mk: Update gnulib files. Use GFDLv1.3+. 2008-11-12 Simon Josefsson * gss.pc.in: Add URL fields. 2008-09-10 Simon Josefsson * NEWS, configure.ac: Bump versions. 2008-09-10 Simon Josefsson * ChangeLog: Generated. 2008-09-10 Simon Josefsson * NEWS: Version 0.0.24. 2008-09-10 Simon Josefsson * NEWS: Add. 2008-09-10 Simon Josefsson * AUTHORS: Update PGP key. 2008-09-10 Simon Josefsson * .cvsignore, build-aux/.cvsignore, doc/.cvsignore, doc/reference/.cvsignore, doc/reference/tmpl/.cvsignore, doc/reference/tmpl/gss-unused.sgml, gl/.cvsignore, gl/m4/.cvsignore, lib/.cvsignore, lib/krb5/.cvsignore, m4/.cvsignore, po/.cvsignore, src/.cvsignore, tests/.cvsignore: Remove unused. 2008-09-10 Simon Josefsson * doc/reference/Makefile.am: Update to modern gtk-doc makefile. 2008-09-10 Simon Josefsson * doc/reference/gss-docs.sgml: Sync with gss.texi. 2008-09-10 Simon Josefsson * doc/gss.texi: Fix license version. 2008-09-10 Simon Josefsson * gss.fms: Remove unused gss.fms. 2008-09-10 Simon Josefsson * lib/meta.c: Fix warning. 2008-09-10 Simon Josefsson * Makefile.am: Run distcheck with -Werror to catch regressions. 2008-09-10 Simon Josefsson * configure.ac: Fix project name. 2008-09-10 Simon Josefsson * lib/asn1.c, lib/name.c: Fix warnings. 2008-09-10 Simon Josefsson * Makefile.am, cfg.mk: Move release target to cfg.mk and update it. 2008-09-10 Simon Josefsson * .clcopying: Use liberal license. 2008-09-10 Simon Josefsson * doc/specification/draft-hartman-gss-naming-00.txt, doc/specification/draft-hartman-gss-naming-01.txt, doc/specification/draft-ietf-cat-gss-conv-00.txt, doc/specification/draft-ietf-cat-gsseasy-01.txt, doc/specification/draft-ietf-cat-gssv2-cbind-04.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-00.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-01.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-02.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-03.txt, doc/specification/draft-ietf-kitten-2478bis-00.txt, doc/specification/draft-ietf-kitten-2478bis-01.txt, doc/specification/draft-ietf-kitten-2478bis-02.txt, doc/specification/draft-ietf-kitten-2478bis-03.txt, doc/specification/draft-ietf-kitten-2478bis-04.txt, doc/specification/draft-ietf-kitten-2478bis-05.txt, doc/specification/draft-ietf-kitten-extended-mech-inquiry-00.txt, doc/specification/draft-ietf-kitten-extended-mech-inquiry-01.txt, doc/specification/draft-ietf-kitten-extended-mech-inquiry-02.txt, doc/specification/draft-ietf-kitten-extended-mech-inquiry-03.txt, doc/specification/draft-ietf-kitten-gss-naming-00.txt, doc/specification/draft-ietf-kitten-gss-naming-01.txt, doc/specification/draft-ietf-kitten-gss-naming-02.txt, doc/specification/draft-ietf-kitten-gss-naming-03.txt, doc/specification/draft-ietf-kitten-gss-naming-04.txt, doc/specification/draft-ietf-kitten-gss-naming-05.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-00.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-01.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-02.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-03.txt, doc/specification/draft-ietf-kitten-gssapi-csharp-bindings-00.txt, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-00.tx t, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-01.tx t, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-02.tx t, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-03.tx t, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-05.tx t, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-00.txt, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-01.txt, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-02.txt, doc/specification/draft-ietf-kitten-gssapi-naming-exts-00.txt, doc/specification/draft-ietf-kitten-gssapi-naming-exts-01.txt, doc/specification/draft-ietf-kitten-gssapi-naming-exts-02.txt, doc/specification/draft-ietf-kitten-gssapi-prf-00.txt, doc/specification/draft-ietf-kitten-gssapi-prf-01.txt, doc/specification/draft-ietf-kitten-gssapi-prf-02.txt, doc/specification/draft-ietf-kitten-gssapi-prf-03.txt, doc/specification/draft-ietf-kitten-gssapi-prf-04.txt, doc/specification/draft-ietf-kitten-gssapi-prf-06.txt, doc/specification/draft-ietf-kitten-gssapi-prf-07.txt, doc/specification/draft-ietf-kitten-gssapi-rfc2853-update-for-cshar p-00.txt, doc/specification/draft-ietf-kitten-gssapi-store-cred-00.txt, doc/specification/draft-ietf-kitten-gssapi-store-cred-01.txt, doc/specification/draft-ietf-kitten-gssapi-store-cred-02.txt, doc/specification/draft-ietf-kitten-gssapi-v3-guide-to-00.txt, doc/specification/draft-ietf-kitten-gssapi-v3-guide-to-01.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 00.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 02.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 03.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-00.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-01.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-02.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-03.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-04.txt, doc/specification/draft-ietf-kitten-rfc2853bis-00.txt, doc/specification/draft-ietf-kitten-rfc2853bis-01.txt, doc/specification/draft-ietf-kitten-rfc2853bis-03.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-00.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-01.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-02.txt, doc/specification/draft-ietf-krb-wg-gss-cb-hash-agility-00.txt, doc/specification/draft-ietf-krb-wg-gss-crypto-00.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-00.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-01.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-02.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-03.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-04.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-05.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-06.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-07.txt, doc/specification/draft-ietf-nfsv4-ccm-03.txt, doc/specification/draft-ietf-nfsv4-channel-bindings-02.txt, doc/specification/draft-ietf-nfsv4-channel-bindings-04.txt, doc/specification/draft-ietf-secsh-gsskeyex-09.txt, doc/specification/draft-johansson-http-gss-00.txt, doc/specification/draft-johansson-http-gss-01.txt, doc/specification/draft-morris-java-gssapi-update-for-csharp-00.txt , doc/specification/draft-raeburn-cat-gssapi-krb5-3des-00.txt, doc/specification/draft-raeburn-krb-gssapi-krb5-3des-01.txt, doc/specification/draft-williams-gssapi-channel-bindings-00.txt, doc/specification/draft-williams-gssapi-cred-store-00.txt, doc/specification/draft-williams-gssapi-domain-based-names-00.txt, doc/specification/draft-williams-gssapi-prf-00.txt, doc/specification/draft-williams-gssapi-stackable-pseudo-mechs-00.t xt, doc/specification/draft-williams-gssapi-store-deleg-creds-00.txt, doc/specification/draft-williams-gssapi-store-deleg-creds-01.txt, doc/specification/draft-williams-gssapi-v3-guide-to-00.txt, doc/specification/draft-williams-krb5-gssapi-domain-based-names-00. txt, doc/specification/draft-williams-krb5-gssapi-prf-00.txt, doc/specification/draft-zhu-spnego-2478bis-00.txt, doc/specification/draft-zhu-spnego-2478bis-01.txt, doc/specification/gssapi-service-names, doc/specification/rfc1508.txt, doc/specification/rfc1509.txt, doc/specification/rfc1961.txt, doc/specification/rfc1964.txt, doc/specification/rfc2025.txt, doc/specification/rfc2078.txt, doc/specification/rfc2203.txt, doc/specification/rfc2478.txt, doc/specification/rfc2479.txt, doc/specification/rfc2743.txt, doc/specification/rfc2744.txt, doc/specification/rfc2853.txt, doc/specification/rfc4121.txt, doc/specification/rfc4178.txt, doc/specification/rfc4401.txt, doc/specification/rfc4402.txt, doc/specification/rfc4768.txt: Remove. 2008-09-10 Simon Josefsson * GNUmakefile, build-aux/config.rpath, gl/Makefile.am, gl/m4/include_next.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/string.in.h, gl/unistd.in.h, maint.mk: Update gnulib files. 2008-08-21 Simon Josefsson * gl/Makefile.am, gl/m4/autobuild.m4, gl/m4/gnulib-comp.m4, gl/m4/string_h.m4, gl/m4/strverscmp.m4, gl/string.in.h, gl/strverscmp.h, lib/version.c: Update gnulib files. 2008-08-20 Simon Josefsson * Makefile.am: Don't copy archive to www directory. 2008-08-20 Simon Josefsson * configure.ac: Uses autobuild from gnulib. 2008-08-20 Simon Josefsson * GNUmakefile, build-aux/gnupload, doc/gendocs_template, gl/Makefile.am, gl/m4/autobuild.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4, gl/xalloc.h, m4/autobuild.m4, maint.mk: Update gnulib files. 2008-08-20 Simon Josefsson * po/LINGUAS, po/id.po.in, po/zh_CN.po.in: Sync with TP. 2008-08-20 Simon Josefsson * README: Fix URLs. 2008-08-20 Simon Josefsson * doc/gss.texi: Fix URLs. 2008-05-20 Simon Josefsson * NEWS: Add. 2008-05-20 Simon Josefsson * doc/Makefile.am: Fix copyright year. 2008-05-20 Simon Josefsson * po/LINGUAS, po/ga.po.in, po/sk.po.in, po/sv.po.in, po/vi.po.in: Sync with TP. 2008-05-20 Simon Josefsson * Makefile.am, NEWS, cfg.mk, po/Makevars, po/fr.po, po/fr.po.in, po/pl.po, po/pl.po.in, po/ro.po, po/ro.po.in, po/rw.po, po/rw.po.in, po/sv.po, po/sv.po.in, po/vi.po, po/vi.po.in: Don't use gettext --no-location. 2008-05-20 Simon Josefsson * NEWS: Add. 2008-05-20 Simon Josefsson * .clcopying, .cvscopying, Makefile.am: Rename .cvscopying to .clcopying. 2008-05-20 Simon Josefsson * GNUmakefile, build-aux/gendocs.sh, build-aux/gnupload, gl/m4/extensions.m4, gl/m4/getopt.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/xalloc.h, gl/xmalloc.c: Update gnulib files. 2008-04-01 Simon Josefsson * gl/Makefile.am: Update gnulib files. 2008-03-25 Simon Josefsson * GNUmakefile, build-aux/GNUmakefile, build-aux/gendocs.sh, build-aux/maint.mk, cfg.mk, gl/Makefile.am, gl/getopt.c, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/lib-link.m4, gl/m4/unistd_h.m4, gl/unistd.in.h, maint-cfg.mk, maint.mk: Update gnulib files. 2008-02-25 Simon Josefsson * doc/specification/draft-ietf-kitten-extended-mech-inquiry-03.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-03.txt, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-02.txt: Add. 2008-02-06 Simon Josefsson * configure.ac: Bump versions. 2008-02-06 Simon Josefsson * NEWS: Add. 2008-02-06 Simon Josefsson * GNUmakefile, maint-cfg.mk: Need config.rpath workaround. 2008-02-06 Simon Josefsson * build-aux/config.rpath, build-aux/gendocs.sh, build-aux/gnupload, gl/Makefile.am, gl/gethostname.c, gl/m4/unistd_h.m4, gl/unistd.in.h, gl/xalloc.h: Update gnulib files. 2008-02-06 Simon Josefsson * Makefile.am: Brace expansion is not POSIX portable. 2007-12-26 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-domain-based-names-05.tx t: Add. 2007-12-19 Simon Josefsson * ChangeLog: Generated. 2007-12-19 Simon Josefsson * doc/reference/Makefile.am: Sync with libidn. 2007-12-19 Simon Josefsson * NEWS: Version 0.0.23. 2007-12-19 Simon Josefsson * Makefile.am: Fix release target. 2007-12-19 Simon Josefsson * NEWS: Add. 2007-12-19 Simon Josefsson * doc/gendocs_template: Fix gendocs_template file. 2007-12-19 Simon Josefsson * gl/override/doc/gendocs_template: Fix gendocs_template file. 2007-12-19 Simon Josefsson * gl/override/doc/gendocs_template.diff, gl/override/doc/gpl.texi.diff: Fix gendocs_template file. 2007-12-19 Simon Josefsson * doc/Makefile.am: Use gpl-3.0.texi instead of gpl.texi. 2007-12-19 Simon Josefsson * doc/gss.texi: Fix gpl/fdl includes. 2007-12-19 Simon Josefsson * build-aux/GNUmakefile, build-aux/gendocs.sh, build-aux/gnupload, build-aux/maint.mk, doc/fdl.texi, gl/Makefile.am, gl/gethostname.c, gl/getopt.c, gl/getopt1.c, gl/getopt_int.h, gl/gettext.h, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/lib-link.m4, gl/m4/strverscmp.m4, gl/m4/unistd_h.m4, gl/strverscmp.c, gl/strverscmp.h, gl/xalloc.h, gl/xgethostname.c, gl/xmalloc.c: Update gnulib files. 2007-12-19 Simon Josefsson * gl/getopt.in.h, gl/m4/extensions.m4, gl/unistd.in.h: Update gnulib files. 2007-12-19 Simon Josefsson * doc/gpl-3.0.texi, doc/gpl.texi, gl/getopt_.h, gl/unistd_.h: Update gnulib files. 2007-12-19 Simon Josefsson * GNUmakefile, maint-cfg.mk: Revert config.rpath hack. 2007-12-19 Simon Josefsson * NEWS, configure.ac: Use gettext 0.17. 2007-12-19 Simon Josefsson * NEWS, configure.ac: Bump versions. 2007-08-31 Simon Josefsson * configure.ac: Drop gnits mode. 2007-08-07 Simon Josefsson * doc/specification/draft-ietf-kitten-rfc2853bis-03.txt: Add. 2007-06-29 Simon Josefsson * ChangeLog: Generated. 2007-06-29 Simon Josefsson * NEWS: Version 0.0.22. 2007-06-29 Simon Josefsson * doc/gpl.texi: Add GPLv3. 2007-06-29 Simon Josefsson * build-aux/config.rpath, build-aux/maint.mk, gl/Makefile.am, gl/m4/absolute-header.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/unistd_h.m4, gl/unistd_.h: Update gnulib files. 2007-06-29 Simon Josefsson * COPYING: Add GPLv3, since automake installs GPLv2. 2007-06-27 Simon Josefsson * NEWS: Add. 2007-06-27 Simon Josefsson * NEWS: Add. 2007-06-27 Simon Josefsson * lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/krb5.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c: Use GPLv3 instead of GPLv2. 2007-06-27 Simon Josefsson * .cvscopying, Makefile.am, configure.ac, doc/Makefile.am, doc/Makefile.gdoci, lib/Makefile.am, lib/api.h, lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.c, lib/ext.h, lib/gss.h.in, lib/internal.h, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/version.c, maint-cfg.mk, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/krb5context.c, tests/threadsafety: Use GPLv3 instead of GPLv2. 2007-06-14 Simon Josefsson * Makefile.am: Move from cvs to git. 2007-05-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2007-05-22 Simon Josefsson * Makefile.am: Fix release target. 2007-05-22 Simon Josefsson * ChangeLog: [no log message] 2007-05-22 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2007-05-22 Simon Josefsson * NEWS: Version 0.0.21. 2007-05-22 Simon Josefsson * NEWS: Fix. 2007-05-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2007-05-22 Simon Josefsson * src/Makefile.am: Don't remove gss_cmd.c and gss_cmd.h on 'make distclean'. Reported by Bernd Zeimetz , solution suggested by Russ Allbery . 2007-05-22 Simon Josefsson * gl/Makefile.am, gl/m4/unistd_h.m4, gl/unistd_.h: Update,. 2007-04-16 Simon Josefsson * ChangeLog: [no log message] 2007-04-16 Simon Josefsson * NEWS, configure.ac: Version 0.0.20. 2007-04-16 Simon Josefsson * gl/m4/gnulib-common.m4: Update. 2007-04-16 Simon Josefsson * build-aux/.cvsignore, gl/.cvsignore, gl/m4/.cvsignore: [no log message] 2007-04-16 Simon Josefsson * maint-cfg.mk: Fix. 2007-04-16 Simon Josefsson * NEWS: Add. 2007-04-16 Simon Josefsson * gendocs.sh, gnupload, maint.mk: UPdate. 2007-04-16 Simon Josefsson * GNUmakefile: Rewrite. 2007-04-16 Simon Josefsson * build-aux/GNUmakefile, build-aux/config.rpath, build-aux/gendocs.sh, build-aux/gnupload, build-aux/link-warning.h, build-aux/maint.mk, gl/.cvsignore, gl/Makefile.am, gl/getopt_.h, gl/m4/.cvsignore, gl/m4/absolute-header.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/lib-link.m4, gl/m4/unistd_h.m4, gl/unistd_.h, gl/xalloc.h: Update. 2007-04-16 Simon Josefsson * configure.ac: Use build-aux/. 2007-03-08 Simon Josefsson * doc/specification/draft-johansson-http-gss-01.txt: Add. 2007-02-28 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gss-cb-hash-agility-00.txt: Add. 2007-01-08 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Generated. 2007-01-08 Simon Josefsson * NEWS: Version 0.0.19. 2007-01-08 Simon Josefsson * ChangeLog, m4/.cvsignore: [no log message] 2007-01-08 Simon Josefsson * NEWS: Fix. 2007-01-08 Simon Josefsson * NEWS: Add. 2007-01-08 Simon Josefsson * configure.ac: Bump autoconf/automake/gettext version. 2007-01-08 Simon Josefsson * .cvscopying, Makefile.am, NEWS, README, README-alpha, THANKS, configure.ac, doc/Makefile.am, doc/Makefile.gdoci, doc/gdoc, doc/gss.texi, gss.pc.in, lib/Makefile.am, lib/api.h, lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.c, lib/ext.h, lib/gss.h.in, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/krb5.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/version.c, maint-cfg.mk, po/POTFILES.in, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/krb5context.c, tests/threadsafety: Bump copyright years. 2007-01-08 Simon Josefsson * AUTHORS: Update PGP key. 2007-01-08 Simon Josefsson * NEWS: Add. 2007-01-08 Simon Josefsson * gl/Makefile.am, gl/gettext.h, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/lib-link.m4: Update. 2007-01-08 Simon Josefsson * lib/asn1.c: (_gss_decapsulate_token): Use size_t for temporary variable, not int. For some reason, this broke 'make check' on amd64, see for details. Reported by Kurt Roeckx . 2006-12-26 Simon Josefsson * doc/specification/rfc4768.txt: Add. 2006-11-16 Simon Josefsson * lib/error.c: Remove (in internal.h). 2006-11-16 Simon Josefsson * lib/error.c: Need internal.h, for PACKAGE. 2006-11-16 Simon Josefsson * configure.ac: Bump versions. 2006-11-16 Simon Josefsson * NEWS: Add. 2006-11-16 Simon Josefsson * NEWS: Bump version. 2006-11-16 Simon Josefsson * gl/Makefile.am, gl/gettext.h, gl/m4/gnulib-comp.m4, gl/m4/inline.m4, gl/m4/lib-link.m4, gl/m4/xalloc.m4, gl/xalloc.h, gl/xmalloc.c, gnupload: Update. 2006-11-07 Simon Josefsson * doc/reference/gss-docs.tmpl: Remove. 2006-11-07 Simon Josefsson * doc/reference/gss-docs.sgml: Add. 2006-11-06 Simon Josefsson * ChangeLog: [no log message] 2006-11-06 Simon Josefsson * NEWS: Version 0.0.18. 2006-11-06 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2006-11-06 Simon Josefsson * doc/gpl.texi, doc/gss.texi, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/override/doc/gpl.texi.diff, po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Fix license in manual. 2006-11-06 Simon Josefsson * gl/m4/xalloc.m4, gl/xalloc.h, gl/xmalloc.c: Update. 2006-11-06 Simon Josefsson * tests/krb5context.tkt: Cosmetics. 2006-11-06 Simon Josefsson * lib/asn1.c: Fix 'invalid MIC' due to signed badness. 2006-11-06 Simon Josefsson * m4/.cvsignore: [no log message] 2006-11-06 Simon Josefsson * lib/asn1.c: (_gss_asn1_get_length_der): Sync with latest libtasn1. Update callers. 2006-11-06 Simon Josefsson * lib/version.c: Fix typo. 2006-11-06 Simon Josefsson * Makefile.am, doc/gendocs.sh, doc/gendocs_template, gendocs.sh, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/override/doc/gendocs_template, gnupload: Use gendocs and gnupload. 2006-11-06 Simon Josefsson * configure.ac: Require gettext 0.15. 2006-11-06 Simon Josefsson * NEWS: Add. 2006-11-06 Simon Josefsson * lib/krb5/cred.c: Don't require that credential is in default realm when searching for hostkeys (broke self-tests with Shishi 0.0.30). 2006-11-06 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/strverscmp.m4, gl/strverscmp.c, gl/strverscmp.h: Add strverscmp. 2006-11-06 Simon Josefsson * lib/version.c: Use strverscmp. 2006-11-06 Simon Josefsson * gl/Makefile.am, gl/getopt_.h, gl/gettext.h, gl/m4/gnulib-comp.m4, gl/m4/lib-link.m4, gl/xalloc.h: Update. 2006-11-06 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-store-cred-02.txt, doc/specification/draft-johansson-http-gss-00.txt: Add. 2006-09-22 Simon Josefsson * doc/fdl.texi, gl/Makefile.am, gl/gethostname.c, gl/getopt.c, gl/getopt1.c, gl/gettext.h, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/lib-link.m4, gl/m4/xalloc.m4, gl/xgethostname.c, gl/xmalloc.c: Update. 2006-09-22 Simon Josefsson * configure.ac: Bump versions. 2006-09-13 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-05.txt, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-03.tx t, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 03.txt: Add. 2006-07-28 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-domain-based-names-02.tx t: Add. 2006-07-11 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4: Update. 2006-07-10 Simon Josefsson * gl/Makefile.am, gl/getopt.c, gl/m4/getopt.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/onceonly_2_57.m4: Update. 2006-06-30 Simon Josefsson * doc/specification/draft-ietf-kitten-extended-mech-inquiry-02.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-02.txt, doc/specification/draft-ietf-kitten-gssapi-naming-exts-02.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 02.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-02.txt, doc/specification/draft-ietf-nfsv4-channel-bindings-04.txt: Add. 2006-06-22 Simon Josefsson * configure.ac: Make portable to mingw. 2006-05-04 Simon Josefsson * NEWS, configure.ac: Bump versions. 2006-04-30 Simon Josefsson * ChangeLog: [no log message] 2006-04-30 Simon Josefsson * NEWS: Version 0.0.17. 2006-04-30 Simon Josefsson * doc/gss.texi: Fix direntry. 2006-04-30 Simon Josefsson * debian/changelog, debian/compat, debian/control, debian/copyright, debian/docs, debian/libgss0-dev.install, debian/libgss0.install, debian/rules, debian/watch: Remove. 2006-04-26 Simon Josefsson * gl/Makefile.am: Update. 2006-04-19 Simon Josefsson * po/Makevars: Use --no-location. 2006-04-19 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Update. 2006-04-19 Simon Josefsson * Makefile.am: Fix. 2006-04-19 Simon Josefsson * Makefile.am: Fix update-po. 2006-04-19 Simon Josefsson * NEWS: Add. 2006-04-19 Simon Josefsson * doc/gss.texi: Fix @direntry. 2006-04-19 Simon Josefsson * tests/Makefile.am: Fix libgnu path. 2006-04-19 Simon Josefsson * doc/gss.texi: Fix license. 2006-04-19 Simon Josefsson * NEWS: Add. 2006-04-19 Simon Josefsson * Makefile.am, lib/Makefile.am, lib/krb5/Makefile.am, src/Makefile.am, tests/Makefile.am: Remove indent. 2006-04-19 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po, po/vi.po: Sync with TP. 2006-04-19 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-comp.m4, gl/m4/unistd_h.m4, maint.mk: Update. 2006-03-22 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2006-03-22 Simon Josefsson * doc/Makefile.am: Fix copyright years. 2006-03-08 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-04.txt: Add. 2006-03-07 Simon Josefsson * lib/Makefile.am: Add -no-undefined, required to produce DLLs on mingw32. 2006-02-16 Simon Josefsson * maint.mk: Update. 2006-02-14 Simon Josefsson * GNUmakefile, Makefile.cfg, Makefile.maint, gl/m4/gnulib-comp.m4, maint-cfg.mk, maint.mk: Rename. 2006-02-14 Simon Josefsson * GNUmakefile, Makefile.maint, gl/Makefile.am, gl/getopt.c, gl/m4/getopt.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4: Update. 2006-02-14 Simon Josefsson * autogen.sh: Remove. 2006-02-14 Simon Josefsson * Makefile.cfg: Add. 2006-02-14 Simon Josefsson * doc/specification/rfc4401.txt, doc/specification/rfc4402.txt: Add. 2006-02-01 Simon Josefsson * doc/specification/draft-ietf-kitten-rfc2853bis-01.txt: Add. 2006-01-18 Simon Josefsson * debian/control: Fix. 2006-01-18 Simon Josefsson * debian/dirs: Remove. 2006-01-18 Simon Josefsson * debian/rules: Comment out doc. 2006-01-18 Simon Josefsson * debian/libgss0-dev.install: Add gss tool. 2006-01-18 Simon Josefsson * debian/gss-doc.doc-base, debian/gss-doc.info, debian/gss-doc.manpages, debian/libgss0-dev.install: Remove gss-doc. 2006-01-18 Simon Josefsson * debian/control: Remove gss-doc package. 2006-01-18 Simon Josefsson * debian/changelog, debian/copyright: Fix. 2006-01-18 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4: Update. 2005-12-22 Simon Josefsson * debian/changelog, debian/compat, debian/control, debian/copyright, debian/dirs, debian/docs, debian/gss-doc.doc-base, debian/gss-doc.info, debian/gss-doc.manpages, debian/libgss0-dev.install, debian/libgss0.install, debian/rules, debian/watch: Add. 2005-12-15 Simon Josefsson * NEWS: Add. 2005-12-15 Simon Josefsson * lib/krb5/Makefile.am: Link to Shishi. 2005-12-15 Simon Josefsson * configure.ac: Fix. 2005-11-29 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-csharp-bindings-00.txt: Add. 2005-10-27 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-03.txt: Add. 2005-10-23 Simon Josefsson * configure.ac, m4/check_headerlib.m4: Improve check for Shishi. 2005-10-23 Simon Josefsson * gl/Makefile.am, gl/getopt_.h, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/xgethostname.c: Update. 2005-10-23 Simon Josefsson * AUTHORS: Update PGP key. 2005-10-20 Simon Josefsson * doc/specification/draft-ietf-kitten-extended-mech-inquiry-01.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-01.txt, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-01.tx t, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-01.txt, doc/specification/draft-ietf-kitten-gssapi-store-cred-01.txt, doc/specification/draft-ietf-kitten-gssapi-v3-guide-to-01.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-01.txt: Add 2005-10-17 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-naming-exts-01.txt: Add. 2005-10-05 Simon Josefsson * doc/specification/rfc4178.txt: Add. 2005-09-20 Simon Josefsson * Makefile.am: Fix call to wget. 2005-09-20 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2005-09-20 Simon Josefsson * src/Makefile.am: Fix gnulib library name. 2005-09-20 Simon Josefsson * doc/reference/tmpl/.cvsignore: [no log message] 2005-09-20 Simon Josefsson * doc/reference/tmpl/gss-unused.sgml: Add. 2005-09-20 Simon Josefsson * gl/Makefile.am: Update. 2005-09-20 Simon Josefsson * gl/m4/gnulib-cache.m4: Fix. 2005-09-20 Simon Josefsson * configure.ac: Update gnulib code. 2005-09-20 Simon Josefsson * lib/Makefile.am: Change gnulib library name. 2005-09-20 Simon Josefsson * gl/Makefile.am, gl/getopt1.c, gl/m4/getopt.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4, gl/m4/gnulib.m4, gl/xmalloc.c: Update. 2005-09-20 Simon Josefsson * gl/m4/gnulib-cache.m4: Update. 2005-08-30 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-prf-07.txt: Add. 2005-08-27 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-prf-06.txt: Add. 2005-08-22 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2005-08-11 Simon Josefsson * gss.fms: Update. 2005-08-11 Simon Josefsson * NEWS, configure.ac: Bump versions. 2005-08-11 Simon Josefsson * ChangeLog: [no log message] 2005-08-11 Simon Josefsson * NEWS: Version 0.0.16. 2005-08-11 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po, po/vi.po: Sync with TP. 2005-08-11 Simon Josefsson * configure.ac: Bump versions. 2005-08-11 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2005-08-11 Simon Josefsson * gl/m4/gnulib.m4: Update. 2005-08-11 Simon Josefsson * lib/ext.c: Fix namespace. 2005-08-11 Simon Josefsson * configure.ac: Avoid xalloc-die. 2005-08-10 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po: Sync with TP. 2005-08-10 Simon Josefsson * NEWS: Add. 2005-08-10 Simon Josefsson * AUTHORS: Update PGP key. 2005-08-10 Simon Josefsson * gl/pack.c, gl/pack.h, tests/gettext.h: Remove. 2005-08-10 Simon Josefsson * gl/Makefile.am, gl/gethostname.c, gl/getopt.c, gl/getopt1.c, gl/getopt_.h, gl/getopt_int.h, gl/gettext.h, gl/m4/codeset.m4, gl/m4/gethostname.m4, gl/m4/getopt.m4, gl/m4/gettext.m4, gl/m4/glibc21.m4, gl/m4/gnulib.m4, gl/m4/iconv.m4, gl/m4/intdiv0.m4, gl/m4/intmax.m4, gl/m4/inttypes-pri.m4, gl/m4/inttypes.m4, gl/m4/inttypes_h.m4, gl/m4/isc-posix.m4, gl/m4/lcmessage.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/m4/longdouble.m4, gl/m4/longlong.m4, gl/m4/nls.m4, gl/m4/onceonly_2_57.m4, gl/m4/po.m4, gl/m4/printf-posix.m4, gl/m4/progtest.m4, gl/m4/signed.m4, gl/m4/size_max.m4, gl/m4/stdint_h.m4, gl/m4/uintmax_t.m4, gl/m4/ulonglong.m4, gl/m4/wchar_t.m4, gl/m4/wint_t.m4, gl/m4/xalloc.m4, gl/m4/xsize.m4, gl/xalloc.h, gl/xgethostname.c, gl/xmalloc.c: Update. 2005-08-10 Simon Josefsson * Makefile.am, doc/Makefile.am, doc/Makefile.gdoci, doc/fdl.texi, doc/gendocs.sh, doc/gendocs_template, doc/gpl.texi, lib/Makefile.am, lib/api.h, lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.c, lib/ext.h, lib/gss.h.in, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/krb5.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/version.c, m4/check_headerlib.m4, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/gettext.h, tests/krb5context.c, tests/threadsafety: Update license. 2005-08-10 Simon Josefsson * configure.ac: Update license. 2005-08-10 Simon Josefsson * COPYING.DOC, README: Remove. 2005-07-16 Simon Josefsson * configure.ac: Simplify. 2005-07-15 Simon Josefsson * doc/specification/rfc4121.txt: Add. 2005-06-14 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-prf-04.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-04.txt: Add. 2005-06-08 Simon Josefsson * doc/specification/draft-ietf-secsh-gsskeyex-09.txt: Add. 2005-06-03 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-02.txt: Add. 2005-05-16 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-naming-exts-00.txt, doc/specification/draft-ietf-kitten-gssapi-prf-03.txt: Add. 2005-05-13 Simon Josefsson * doc/specification/draft-ietf-kitten-krb5-gssapi-prf-03.txt: Add. 2005-04-05 Simon Josefsson * NEWS: Add. 2005-04-05 Simon Josefsson * po/LINGUAS, po/rw.po: Add. 2005-03-14 Simon Josefsson * doc/gss.texi: Typos, reported by Mike Castle . 2005-03-14 Simon Josefsson * doc/gss.texi: Typo. 2005-03-14 Simon Josefsson * doc/gss.texi: Typo. 2005-03-14 Simon Josefsson * THANKS: Add. 2005-03-14 Simon Josefsson * doc/gss.texi: Typo, tiny patch from Mike Castle . 2005-02-23 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-01.txt: Add. 2005-02-16 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-channel-bindings-00.txt, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-00.txt, doc/specification/draft-ietf-kitten-gssapi-store-cred-00.txt: Add. 2005-02-16 Simon Josefsson * doc/specification/draft-ietf-kitten-krb5-gssapi-prf-02.txt: Add. 2005-02-15 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-prf-02.txt, doc/specification/draft-ietf-kitten-gssapi-v3-guide-to-00.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-00.txt: Add. 2005-02-15 Simon Josefsson * doc/specification/draft-ietf-kitten-extended-mech-inquiry-00.txt: Add. 2005-02-02 Simon Josefsson * doc/specification/draft-ietf-kitten-rfc2853bis-00.txt: Add. 2005-01-29 Simon Josefsson * THANKS: Fix. 2005-01-29 Simon Josefsson * THANKS, po/LINGUAS, po/vi.po: Add. 2005-01-24 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-05.txt: Add. 2004-12-27 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-prf-01.txt, doc/specification/draft-ietf-kitten-gssapi-rfc2853-update-for-cshar p-00.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-01.txt: Add. 2004-12-17 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-04.txt: Add. 2004-12-16 Simon Josefsson * doc/gss.texi: Add. 2004-12-16 Simon Josefsson * NEWS: Fix. 2004-12-16 Simon Josefsson * NEWS: Add. 2004-12-16 Simon Josefsson * lib/ext.c, lib/ext.h: (gss_release_oid): Remove. 2004-12-16 Simon Josefsson * gl/getopt_.h, gl/m4/getopt.m4: Update. 2004-12-15 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-03.txt: Add. 2004-12-06 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-domain-based-names-00.tx t, doc/specification/draft-ietf-kitten-gssapi-prf-00.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 00.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-00.txt: Add. 2004-12-03 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-02.txt: Add. 2004-12-02 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-00.txt: Add. 2004-11-30 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-01.txt: Add. 2004-11-23 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-00.txt: Add. 2004-11-22 Simon Josefsson * doc/specification/draft-zhu-spnego-2478bis-01.txt: Add. 2004-11-22 Simon Josefsson * gss.fms: Add. 2004-11-22 Simon Josefsson * ChangeLog: [no log message] 2004-11-22 Simon Josefsson * Makefile.am: Fix make distcheck. 2004-11-22 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po: Generated. 2004-11-22 Simon Josefsson * NEWS: Version 0.0.15. 2004-11-22 Simon Josefsson * po/LINGUAS: Sync with TP. 2004-11-21 Simon Josefsson * tests/krb5context.c: Don't use asprintf. 2004-11-21 Simon Josefsson * po/LINGUAS: Sync with TP. 2004-11-21 Simon Josefsson * src/Makefile.am, tests/Makefile.am: Need libgl.la. 2004-11-21 Simon Josefsson * doc/gdoc: Sync some fixes from libidn. 2004-11-21 Simon Josefsson * gl/getopt_.h: Update. 2004-11-19 Simon Josefsson * gl/getopt.c, gl/getopt1.c, gl/getopt_.h, gl/getopt_int.h, gl/m4/getopt.m4: Update. 2004-11-19 Simon Josefsson * doc/gss.texi: Fix. 2004-11-08 Simon Josefsson * : Add. 2004-11-07 Simon Josefsson * doc/gendocs.sh, doc/gendocs_template: Update. 2004-11-07 Simon Josefsson * po/LINGUAS, po/fr.po, po/pl.po, po/ro.po, po/sv.po: Sync with TP. 2004-11-07 Simon Josefsson * lib/Makefile.am: Typo. 2004-11-07 Simon Josefsson * Makefile.am: Update update-po target. 2004-11-07 Simon Josefsson * Makefile.am: Fix release target. 2004-11-07 Simon Josefsson * NEWS: Add. 2004-11-07 Simon Josefsson * doc/reference/.cvsignore: Rewrite. 2004-11-07 Simon Josefsson * NEWS: Add. 2004-11-07 Simon Josefsson * lib/Makefile.am: Use Libtool -export-symbols-regex. 2004-11-07 Simon Josefsson * doc/reference/Makefile.am: Disable SGML mode, for now. 2004-11-07 Simon Josefsson * doc/reference/Makefile.am: Rewrite, use official GTK-DOC Makefile.am template. 2004-11-07 Simon Josefsson * autogen.sh: Use gtkdocize. 2004-11-07 Simon Josefsson * AUTHORS: Add PGP key URL. 2004-10-25 Simon Josefsson * doc/specification/draft-hartman-gss-naming-01.txt: Add. 2004-10-24 Simon Josefsson * doc/specification/draft-williams-gssapi-domain-based-names-00.txt, doc/specification/draft-williams-gssapi-prf-00.txt, doc/specification/draft-williams-gssapi-v3-guide-to-00.txt, doc/specification/draft-williams-krb5-gssapi-domain-based-names-00. txt, doc/specification/draft-williams-krb5-gssapi-prf-00.txt, doc/specification/draft-zhu-spnego-2478bis-00.txt: Add. 2004-10-15 Simon Josefsson * NEWS, configure.ac: Bump versions. 2004-10-15 Simon Josefsson * gl/Makefile.am, gl/m4/getopt.m4: Update. 2004-10-15 Simon Josefsson * gss.fms: Add. 2004-10-15 Simon Josefsson * ChangeLog: [no log message] 2004-10-15 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po: Generated. 2004-10-15 Simon Josefsson * NEWS: Version 0.0.14. 2004-10-15 Simon Josefsson * NEWS, tests/threadsafety: Fix. 2004-10-15 Simon Josefsson * tests/Makefile.am: Dist threadsafety. 2004-10-15 Simon Josefsson * AUTHORS: Update PGP key. 2004-10-14 Simon Josefsson * lib/asn1.c, lib/context.c, lib/ext.h, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/msg.c, lib/krb5/name.c, lib/meta.h, lib/name.c: Indent. 2004-10-14 Simon Josefsson * NEWS: Add. 2004-10-14 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): For src_name, don't duplicate type OID, just set pointer. 2004-10-14 Simon Josefsson * lib/krb5/context.c: Fix mem leak. 2004-10-14 Simon Josefsson * lib/krb5/cred.c: Fix mem leak. 2004-10-14 Simon Josefsson * NEWS, doc/gss.texi: Add. 2004-10-14 Simon Josefsson * lib/name.c: (gss_import_name, gss_duplicate_name): Don't clone OID. 2004-10-14 Simon Josefsson * NEWS: Add. 2004-10-14 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Extract sequence numbers, for gss_wrap and gss_unwrap. 2004-10-14 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Handle NULL ret_flags. 2004-10-14 Simon Josefsson * tests/krb5context.c: Enable debug by default. Remove --verbose. Indent. 2004-10-05 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib.m4, gl/m4/xalloc.m4, gl/xalloc.h, gl/xmalloc.c, gl/xstrdup.c, lib/name.c: Update Gnulib. Fix callers. 2004-09-17 Simon Josefsson * lib/krb5/context.c: Use new API. 2004-09-16 Simon Josefsson * tests/Makefile.am: Add threadsafety. 2004-09-16 Simon Josefsson * tests/threadsafety: Add. 2004-09-16 Simon Josefsson * lib/ext.c: Fix gettext. 2004-09-16 Simon Josefsson * lib/ext.c: (xalloc_die): Don't use strerror, for thread safety. 2004-09-13 Simon Josefsson * Makefile.am: (POURL): New URL. 2004-09-13 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po: Sync with TP. 2004-09-13 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po: Sync with TP. 2004-09-13 Simon Josefsson * doc/reference/Makefile.am: (clean-local): Add style.css. 2004-09-13 Simon Josefsson * doc/reference/.cvsignore: [no log message] 2004-09-13 Simon Josefsson * doc/specification/draft-morris-java-gssapi-update-for-csharp-00.txt: Add. 2004-08-23 Simon Josefsson * m4/autobuild.m4: Update. 2004-08-20 Simon Josefsson * m4/gtk-doc.m4: Add. 2004-08-18 Simon Josefsson * NEWS, configure.ac: Bump version. 2004-08-18 Simon Josefsson * gl/m4/gnulib.m4: Update. 2004-08-18 Simon Josefsson * doc/gss.texi: Fix. 2004-08-16 Simon Josefsson * configure.ac, gl/Makefile.am, gl/m4/gnulib.m4: Update. 2004-08-12 Simon Josefsson * doc/specification/draft-williams-gssapi-channel-bindings-00.txt: Add. 2004-08-09 Simon Josefsson * doc/gss.texi: Typo. 2004-08-09 Simon Josefsson * doc/gss.texi: Typo. 2004-08-09 Simon Josefsson * doc/gss.texi: Typo. 2004-08-09 Simon Josefsson * doc/gss.texi: Typo. 2004-08-09 Simon Josefsson * doc/gss.texi: Alloc fix. 2004-08-09 Simon Josefsson * lib/ext.c: Fix. 2004-08-09 Simon Josefsson * lib/ext.c: Fix. 2004-08-09 Simon Josefsson * configure.ac, gl/Makefile.am, gl/m4/gnulib.m4, gl/m4/xalloc.m4, gl/xalloc.h, gl/xmalloc.c, gl/xstrdup.c, lib/ext.c, lib/ext.h: Use new xmalloc interface. Gnulib update. 2004-08-08 Simon Josefsson * gss.fms: Fix. 2004-08-08 Simon Josefsson * gss.fms: Add. 2004-08-07 Simon Josefsson * ChangeLog: [no log message] 2004-08-07 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po: Generated. 2004-08-07 Simon Josefsson * NEWS: Version 0.0.13. 2004-08-07 Simon Josefsson * gl/xgethostname.c: Fix. 2004-08-07 Simon Josefsson * NEWS: Add. 2004-08-07 Simon Josefsson * gl/Makefile.am: Fix. 2004-08-07 Simon Josefsson * configure.ac, gl/Makefile.am, gl/m4/codeset.m4, gl/m4/gettext.m4, gl/m4/glibc21.m4, gl/m4/gnulib.m4, gl/m4/iconv.m4, gl/m4/intdiv0.m4, gl/m4/intmax.m4, gl/m4/inttypes-pri.m4, gl/m4/inttypes.m4, gl/m4/inttypes_h.m4, gl/m4/isc-posix.m4, gl/m4/lcmessage.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/m4/longdouble.m4, gl/m4/longlong.m4, gl/m4/nls.m4, gl/m4/onceonly_2_57.m4, gl/m4/po.m4, gl/m4/printf-posix.m4, gl/m4/progtest.m4, gl/m4/signed.m4, gl/m4/size_max.m4, gl/m4/stdint_h.m4, gl/m4/uintmax_t.m4, gl/m4/ulonglong.m4, gl/m4/wchar_t.m4, gl/m4/wint_t.m4, gl/m4/xsize.m4: Use new gnulib-tool stuff. 2004-08-07 Simon Josefsson * gl/xgethostname.c: Update. 2004-08-06 Simon Josefsson * Makefile.am: Fix. 2004-08-06 Simon Josefsson * po/LINGUAS: Sync with TP. 2004-08-06 Simon Josefsson * Makefile.am: Fix. 2004-08-06 Simon Josefsson * Makefile.am: Fix. 2004-08-06 Simon Josefsson * po/fr.po, po/ro.po: Sync with TP. 2004-08-06 Simon Josefsson * Makefile.am: Fix. 2004-08-06 Simon Josefsson * Makefile.am: (update-po): Add. 2004-08-06 Simon Josefsson * po/fr.po, po/ro.po, po/sv.po: Sync with TP. 2004-08-05 Simon Josefsson * po/.cvsignore: [no log message] 2004-08-05 Simon Josefsson * NEWS: Fix. 2004-08-05 Simon Josefsson * configure.ac: Bump versions. 2004-08-05 Simon Josefsson * po/LINGUAS, po/pl.po: Update. 2004-08-05 Simon Josefsson * NEWS, po/fr.po, po/ro.po: Add. 2004-08-03 Simon Josefsson * : Add. 2004-08-02 Simon Josefsson * : Add. 2004-08-02 Simon Josefsson * doc/gss.texi: Add. 2004-08-01 Simon Josefsson * ChangeLog: [no log message] 2004-08-01 Simon Josefsson * tests/Makefile.am: Fix objdir != srcdir. 2004-08-01 Simon Josefsson * po/pl.po, po/sv.po: Generated. 2004-08-01 Simon Josefsson * NEWS: Version 0.0.12. 2004-08-01 Simon Josefsson * tests/krb5context.c: Fix i18n. 2004-08-01 Simon Josefsson * tests/Makefile.am: Add -lintl. 2004-08-01 Simon Josefsson * m4/autobuild.m4: Add. 2004-08-01 Simon Josefsson * configure.ac: Use autobuild. 2004-08-01 Simon Josefsson * doc/reference/Makefile.am: Fix. 2004-08-01 Simon Josefsson * tests/Makefile.am: Dist krb5context.key. 2004-08-01 Simon Josefsson * tests/Makefile.am: Dist krb5context.tkt. 2004-08-01 Simon Josefsson * NEWS: Add. 2004-08-01 Simon Josefsson * tests/krb5context.tkt: Add. 2004-08-01 Simon Josefsson * README: Fix. 2004-08-01 Simon Josefsson * gl/getopt.c, gl/getopt1.c, gl/m4/getopt.m4: Sync. 2004-07-27 Simon Josefsson * doc/specification/draft-ietf-nfsv4-channel-bindings-02.txt: Add. 2004-07-13 Simon Josefsson * doc/specification/draft-hartman-gss-naming-00.txt: Add. 2004-07-13 Simon Josefsson * doc/specification/draft-ietf-nfsv4-ccm-03.txt: Add. 2004-07-11 Simon Josefsson * lib/krb5/cred.c: Fix mem leak. 2004-07-11 Simon Josefsson * tests/krb5context.c: Fix mem leak. 2004-07-11 Simon Josefsson * tests/krb5context.c: Fix. 2004-07-11 Simon Josefsson * tests/krb5context.c: Remove. 2004-07-11 Simon Josefsson * tests/krb5context.c: I18n. 2004-07-11 Simon Josefsson * tests/Makefile.am, tests/krb5context.c: Fix. 2004-07-11 Simon Josefsson * NEWS: Add. 2004-07-11 Simon Josefsson * NEWS, tests/Makefile.am, tests/krb5context.key: Add. 2004-07-11 Simon Josefsson * tests/Makefile.am, tests/krb5context.c: Fix. 2004-07-11 Simon Josefsson * tests/Makefile.am, tests/krb5context.c: Fix. 2004-07-11 Simon Josefsson * tests/krb5context.c: Cleanup. 2004-07-11 Simon Josefsson * tests/krb5context.c: Add. 2004-07-11 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Support ret_flags of GSS_C_PROT_READY_FLAG. 2004-07-11 Simon Josefsson * lib/krb5/context.c: (gss_krb5_delete_sec_context): Don't shishi_done for acceptor contexts. 2004-07-11 Simon Josefsson * tests/krb5context.c: Add. 2004-07-11 Simon Josefsson * tests/Makefile.am: Fix env's. 2004-07-11 Simon Josefsson * lib/asn1.c: Fix signedness bug. 2004-07-11 Simon Josefsson * tests/Makefile.am: Don't install, for libtool. 2004-07-11 Simon Josefsson * tests/.cvsignore: [no log message] 2004-07-11 Simon Josefsson * tests/.cvsignore: [no log message] 2004-07-11 Simon Josefsson * tests/Makefile.am: Add krb5context. 2004-07-11 Simon Josefsson * tests/krb5context.c: Add. 2004-07-02 Simon Josefsson * gl/.cvsignore: [no log message] 2004-07-02 Simon Josefsson * NEWS, doc/gss.texi: Add. 2004-07-02 Simon Josefsson * gl/Makefile.am: Fix. 2004-07-02 Simon Josefsson * configure.ac, gl/Makefile.am, gl/getopt.c, gl/getopt.h, gl/getopt1.c, gl/getopt_.h, gl/m4/getopt.m4: Update getopt, mainly to get uClibc targets working, which lack getopt_long. 2004-06-02 Simon Josefsson * doc/specification/draft-williams-gssapi-cred-store-00.txt: Add. 2004-05-21 Simon Josefsson * doc/specification/draft-williams-gssapi-stackable-pseudo-mechs-00.t xt, doc/specification/draft-williams-gssapi-store-deleg-creds-01.txt: Add. 2004-04-22 Simon Josefsson * doc/gss.texi: Fix. 2004-04-21 Simon Josefsson * lib/krb5/context.c: Fix ret_flags. 2004-04-21 Simon Josefsson * lib/krb5/context.c: Permit absent sequence number in EncAPRepPart, according to gssapi-cfx. 2004-04-21 Simon Josefsson * lib/krb5/context.c: Fix mem leak. 2004-04-21 Simon Josefsson * lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c: Cosmetic. 2004-04-21 Simon Josefsson * doc/gss.texi: Add. 2004-04-21 Simon Josefsson * lib/asn1.c, lib/ext.h, lib/krb5/context.c, lib/krb5/msg.c: (gss_decapsulate_token): Don't allocate output. Update callers. 2004-04-21 Simon Josefsson * lib/asn1.c, lib/ext.h, lib/krb5/context.c, lib/krb5/msg.c: (gss_decapsulate_token_check): Remove. (gss_decapsulate_token): Modify. Update callers. 2004-04-21 Simon Josefsson * lib/krb5/context.c: (gss_krb5_init_sec_context): Fix ret_flags. 2004-04-21 Simon Josefsson * lib/context.c: Add. 2004-04-21 Simon Josefsson * lib/krb5/checksum.c: Fix. 2004-04-21 Simon Josefsson * doc/gss.texi: Add. 2004-04-21 Simon Josefsson * AUTHORS: Update PGP key. 2004-04-21 Simon Josefsson * tests/basic.c: Typo. 2004-04-21 Simon Josefsson * lib/krb5/context.c: Fix mem leak. 2004-04-19 Simon Josefsson * lib/krb5/context.c: Fix warnings. Fix mem leak. 2004-04-19 Simon Josefsson * lib/ext.h: Use const. 2004-04-19 Simon Josefsson * lib/asn1.c: Fix warnings. 2004-04-19 Simon Josefsson * lib/krb5/utils.c: Fix cast. 2004-04-19 Simon Josefsson * lib/krb5/cred.c: Fix. 2004-04-19 Simon Josefsson * lib/krb5/cred.c: Typo. 2004-04-19 Simon Josefsson * lib/krb5/cred.c: (acquire_cred1): Avoid cast. Release memory. 2004-04-19 Simon Josefsson * lib/misc.c: Robustness. 2004-04-19 Simon Josefsson * lib/name.c: Add comment. 2004-04-19 Simon Josefsson * lib/name.c: Cosmetics. 2004-04-19 Simon Josefsson * lib/msg.c: Robustness. 2004-04-19 Simon Josefsson * lib/error.c: No need for internal.h. 2004-04-19 Simon Josefsson * lib/cred.c: Indent. 2004-04-19 Simon Josefsson * lib/cred.c: (gss_inquire_cred_by_mech): Simplify. 2004-04-19 Simon Josefsson * lib/cred.c: (gss_inquire_cred): Simplify. 2004-04-19 Simon Josefsson * lib/context.c: Robustness. 2004-04-19 Simon Josefsson * lib/meta.h: Typo. 2004-04-19 Simon Josefsson * lib/internal.h, lib/meta.h: Move trampoline structs to meta.h. 2004-04-19 Simon Josefsson * lib/error.c, lib/internal.h, lib/krb5/error.c: Move i18n to where they belong. 2004-04-19 Simon Josefsson * lib/meta.c: Include meta.h. 2004-04-19 Simon Josefsson * lib/context.c, lib/cred.c, lib/error.c, lib/internal.h, lib/krb5/name.c, lib/misc.c, lib/msg.c, lib/name.c: Remove gss_warn. Include meta.h when necessary. 2004-04-19 Simon Josefsson * lib/Makefile.am, lib/internal.h, lib/meta.h: Move meta.c prototypes from internal.h to meta.h. 2004-04-18 Simon Josefsson * gss.pc.in: Drop -R libs flag. 2004-04-18 Simon Josefsson * m4/.cvsignore: [no log message] 2004-04-18 Simon Josefsson * configure.ac: Require modern autoconf/automake/gettext. 2004-04-18 Simon Josefsson * NEWS, configure.ac: Bump versions. 2004-04-18 Simon Josefsson * ChangeLog: [no log message] 2004-04-18 Simon Josefsson * po/pl.po, po/sv.po: Generated. 2004-04-18 Simon Josefsson * NEWS: Version 0.0.11. 2004-04-18 Simon Josefsson * NEWS: Add. 2004-04-18 Simon Josefsson * lib/asn1.c, lib/error.c, lib/internal.h, lib/misc.c: Fix warnings. 2004-04-18 Simon Josefsson * lib/ext.h: Add. 2004-04-18 Simon Josefsson * gl/Makefile.am, gl/getopt.c, gl/getopt.h, gl/getopt1.c, gl/getopt_int.h, gl/xalloc.h: Sync with gnulib (and update my changes). 2004-04-18 Simon Josefsson * gl/xmalloc.c: Use strerror instead of perror, to avoid using errno as right hand expression. 2004-04-18 Simon Josefsson * lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c: Fix warnings. 2004-04-17 Simon Josefsson * NEWS: Fix. 2004-04-17 Simon Josefsson * NEWS: Fix. 2004-04-17 Simon Josefsson * lib/krb5/msg.c: (gss_krb5_unwrap): Ditto for 3DES. 2004-04-17 Simon Josefsson * NEWS: Fix. 2004-04-17 Simon Josefsson * NEWS: Add. 2004-04-17 Simon Josefsson * lib/krb5/context.c: (gss_krb5_init_sec_context): Don't reset sequence numbers, msg.c now handle them correctly. 2004-04-17 Simon Josefsson * lib/krb5/msg.c: (gss_krb5_unwrap): Fix typo that broke sequence number logic for DES-MD5. 2004-03-30 Simon Josefsson * THANKS: Add. 2004-03-30 Simon Josefsson * lib/ext.c: (gss_release_oid): Doc fix, reported by Joe Orton . 2004-03-18 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-07.txt: Add. 2004-03-05 Simon Josefsson * gl/Makefile.am, gl/pack.c, gl/pack.h: Add (untested). 2004-03-05 Simon Josefsson * doc/asciidoc: Sync with 5.0.5. 2004-02-29 Simon Josefsson * NEWS: Add. 2004-02-29 Simon Josefsson * po/.cvsignore: [no log message] 2004-02-29 Simon Josefsson * THANKS, po/LINGUAS, po/pl.po: Add Polish translation, from Jakub Bogusz . 2004-02-16 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-06.txt: Add. 2004-02-13 Simon Josefsson * lib/api.h: Never use X/Open headers. (Removes bogus CPP sizeof tests.) 2004-02-13 Simon Josefsson * doc/gss.texi: Add. 2004-01-25 Simon Josefsson * lib/krb5/context.c: Doc fix. 2004-01-25 Simon Josefsson * lib/krb5/context.c: Workaround seq.nr. bug. 2004-01-25 Simon Josefsson * lib/krb5/context.c, lib/krb5/msg.c: Seq.nr. fixes. 2004-01-25 Simon Josefsson * lib/krb5/context.c: Fix time_re?. 2004-01-25 Simon Josefsson * lib/krb5/context.c: Fix return codes. 2004-01-25 Simon Josefsson * lib/krb5/context.c: Cleanup. 2004-01-25 Simon Josefsson * doc/Makefile.am: Typo. 2004-01-25 Simon Josefsson * doc/Makefile.am: Dist more. 2004-01-25 Simon Josefsson * doc/gdoc: Use asciidoc in ./. 2004-01-25 Simon Josefsson * doc/asciidoc, doc/asciidoc.conf: Add. 2004-01-25 Simon Josefsson * doc/texinfo.conf: Use newline. 2004-01-25 Simon Josefsson * doc/gss.texi: Fix. 2004-01-25 Simon Josefsson * doc/gss.texi: Add FDL. 2004-01-23 Simon Josefsson * doc/fdl.texi, doc/gss.texi: Use FDL 1.2. 2004-01-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2004-01-22 Simon Josefsson * doc/gendocs_template: Fix. 2004-01-22 Simon Josefsson * doc/gendocs.sh: Upstream sync. 2004-01-22 Simon Josefsson * Makefile.am: Fix release target. 2004-01-22 Simon Josefsson * ChangeLog: [no log message] 2004-01-22 Simon Josefsson * NEWS: Version 0.0.10. 2004-01-22 Simon Josefsson * po/sv.po: Generated. 2004-01-22 Simon Josefsson * NEWS: Add. 2004-01-22 Simon Josefsson * src/gss.c: Fix #include. 2004-01-22 Simon Josefsson * doc/reference/Makefile.am: Add HIGNORE. 2004-01-22 Simon Josefsson * po/sv.po: Update. 2004-01-22 Simon Josefsson * po/sv.po: Update. 2004-01-22 Simon Josefsson * lib/krb5/context.c: Fix API. 2004-01-22 Simon Josefsson * lib/krb5/context.c: Use new Shishi API. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Docfix. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix flags. 2004-01-21 Simon Josefsson * lib/krb5/checksum.c: Fix. 2004-01-21 Simon Josefsson * lib/krb5/checksum.c: Clear unsupported req_flag's. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix errors. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Use new API. 2004-01-21 Simon Josefsson * lib/asn1.c, lib/ext.h: Add. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Always offer sequencing checks. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Always offer integrity/privacy. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Cleanup. 2004-01-21 Simon Josefsson * lib/context.c: Clear. 2004-01-21 Simon Josefsson * lib/krb5/Makefile.am, lib/krb5/k5internal.h: Add. 2004-01-21 Simon Josefsson * lib/context.c, lib/internal.h: Remove. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix API. 2004-01-21 Simon Josefsson * lib/krb5/name.c: (gss_krb5_canonicalize_name): Zero terminate output_name string (internal convention). 2004-01-21 Simon Josefsson * lib/name.c: (gss_duplicate_name): Zero terminate dest_name string (internal convention). 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix. Doc fix. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Use new API. 2004-01-21 Simon Josefsson * lib/krb5/checksum.c, lib/krb5/checksum.h: Add. 2004-01-21 Simon Josefsson * lib/krb5/Makefile.am: Add checksum.c. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix. 2004-01-21 Simon Josefsson * doc/specification/gssapi-service-names: Add. 2004-01-21 Simon Josefsson * lib/internal.h: Revert. 2004-01-21 Simon Josefsson * lib/internal.h: (gss_cred_id_struct) Add usage. 2004-01-19 Simon Josefsson * : Add. 2004-01-19 Simon Josefsson * : Add. 2004-01-19 Simon Josefsson * doc/specification/draft-ietf-cat-gssv2-08.txt: Remove. 2004-01-18 Simon Josefsson * lib/krb5/context.c: Add. 2004-01-18 Simon Josefsson * lib/context.c: (gss_init_sec_context): Clear output_token. 2004-01-18 Simon Josefsson * lib/krb5/context.c: (gss_krb5_init_sec_context): Split up into three functions. 2004-01-18 Simon Josefsson * lib/krb5/k5internal.h: Fix. 2004-01-18 Simon Josefsson * lib/krb5/context.c: Allow application to retry request if earlier call failed. 2004-01-16 Simon Josefsson * po/sv.po: Generated. 2004-01-16 Simon Josefsson * po/sv.po: Fix. 2004-01-16 Simon Josefsson * NEWS: Add. 2004-01-16 Simon Josefsson * po/sv.po, src/gss.c: Typo. 2004-01-16 Simon Josefsson * po/sv.po: Update. 2004-01-16 Simon Josefsson * po/.cvsignore: [no log message] 2004-01-16 Simon Josefsson * src/gss.c: I18n. 2004-01-16 Simon Josefsson * po/gss.pot: Remove. 2004-01-16 Simon Josefsson * lib/error.c, lib/krb5/error.c: Revert. 2004-01-16 Simon Josefsson * po/LINGUAS: Remove (for now). 2004-01-16 Simon Josefsson * lib/obsolete.c, po/POTFILES.in: Fix. 2004-01-16 Simon Josefsson * lib/obsolete.c: Remove warnings, we should use compile time warnings instead. 2004-01-16 Simon Josefsson * lib/error.c, lib/krb5/error.c: I18n. 2004-01-16 Simon Josefsson * po/LINGUAS: Add en@quot en@boldquot. 2004-01-16 Simon Josefsson * src/Makefile.am, src/gss.c: I18n. 2004-01-16 Simon Josefsson * src/Makefile.am: I18n. 2004-01-16 Simon Josefsson * src/Makefile.am: I18n. 2004-01-16 Simon Josefsson * po/POTFILES.in: Add. 2004-01-16 Simon Josefsson * lib/krb5/name.c, src/gss.c: Indent. 2004-01-16 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2004-01-16 Simon Josefsson * src/gss.c: Fix. 2004-01-16 Simon Josefsson * configure.ac, doc/Makefile.am: Add man page for gss. 2004-01-16 Simon Josefsson * src/gss.c: Nicer output. 2004-01-16 Simon Josefsson * src/gss.ggo: Fix. 2004-01-16 Simon Josefsson * src/gss.c: Use long type for error code. 2004-01-16 Simon Josefsson * src/gss.ggo: Fix. 2004-01-16 Simon Josefsson * src/gss.ggo: Fix. 2004-01-16 Simon Josefsson * lib/krb5/name.c, lib/name.c: Fix warnings. 2004-01-15 Simon Josefsson * NEWS: Add. 2004-01-15 Simon Josefsson * lib/cred.c, lib/error.c, lib/ext.c, lib/ext.h, lib/internal.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/msg.c, lib/krb5/protos.h, lib/meta.c, lib/misc.c, lib/name.c, src/gss.c, tests/basic.c: Indent. 2004-01-15 Simon Josefsson * Makefile.am: Fix indent. 2004-01-15 Simon Josefsson * src/gss.ggo: Typo. 2004-01-15 Simon Josefsson * src/.cvsignore: [no log message] 2004-01-15 Simon Josefsson * Makefile.am, configure.ac, gl/Makefile.am, gl/getopt.c, gl/getopt.h, gl/getopt1.c, src/Makefile.am, src/gss.c, src/gss.ggo: Add command line tool in src/. Add getopt in gl/, for gengetopt parser in src/. 2004-01-15 Simon Josefsson * NEWS: Add. 2004-01-15 Simon Josefsson * lib/error.c: (gss_display_status): Fail on unknown errors. Print info for supplementary bits. Use message context to continue errors. 2004-01-15 Simon Josefsson * lib/krb5/Makefile.am: Fix warnings. 2004-01-15 Simon Josefsson * lib/krb5/context.c: Fix warning. 2004-01-15 Simon Josefsson * Makefile.am: (release): Use CSS. 2004-01-15 Simon Josefsson * NEWS, configure.ac: Bump versions. 2004-01-15 Simon Josefsson * ChangeLog: [no log message] 2004-01-15 Simon Josefsson * NEWS: Version 0.0.9. 2004-01-15 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2004-01-15 Simon Josefsson * lib/meta.c: Typo. 2004-01-15 Simon Josefsson * lib/meta.c: Empty variables still have size, fix _gss_mech_apis definition and usage. 2004-01-15 Simon Josefsson * lib/misc.c: Cleanup. 2004-01-15 Simon Josefsson * lib/obsolete.c: Fix warnings. 2004-01-15 Simon Josefsson * tests/Makefile.am: Add -I for gnulib. 2004-01-15 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2004-01-15 Simon Josefsson * lib/ext.c: Doc fix. 2004-01-15 Simon Josefsson * NEWS: Add. 2004-01-15 Simon Josefsson * lib/ext.c: Typo. 2004-01-15 Simon Josefsson * lib/ext.c: Typo. 2004-01-15 Simon Josefsson * lib/ext.h: (gss_userok): Add. 2004-01-15 Simon Josefsson * doc/gss.texi, lib/ext.c: Add gss_userok. 2004-01-15 Simon Josefsson * lib/.cvsignore: [no log message] 2004-01-15 Simon Josefsson * lib/.cvsignore: [no log message] 2004-01-15 Simon Josefsson * lib/internal.h: Typo. 2004-01-15 Simon Josefsson * lib/Makefile.am: Add ext.c. 2004-01-15 Simon Josefsson * lib/ext.c, lib/misc.c: (gss_oid_equal, gss_copy_oid, gss_duplicate_oid, gss_release_oid): Move from misc.c to ext.c. 2004-01-15 Simon Josefsson * lib/internal.h: (gss_warn): Add. 2004-01-15 Simon Josefsson * lib/ext.h: (gss_warn): Remove. 2004-01-15 Simon Josefsson * lib/version.c: Doc fix. 2004-01-15 Simon Josefsson * NEWS: Add. 2004-01-15 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Support subkeys in AP-REQ. 2004-01-14 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Fix error code. 2004-01-14 Simon Josefsson * lib/krb5/context.c: (gss_krb5_delete_sec_context): Don't delete key or tkt, they are (should be) deallocate as part of the ticket set. 2004-01-13 Simon Josefsson * lib/internal.h: (gss_ctx_id_struct): Remove peer. 2004-01-12 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-05.txt: Add. 2004-01-12 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Cleanup. 2004-01-12 Simon Josefsson * lib/context.c: Fix. 2004-01-12 Simon Josefsson * lib/krb5/context.c: Doc fix. 2004-01-12 Simon Josefsson * lib/krb5/context.c: Fix. 2004-01-12 Simon Josefsson * lib/krb5/context.c: Cleanup. 2004-01-12 Simon Josefsson * lib/context.c: (gss_delete_sec_context): Propagate error code. 2004-01-12 Simon Josefsson * lib/krb5/context.c: (gss_krb5_init_sec_context): Cleanup. 2004-01-12 Simon Josefsson * lib/krb5/context.c: (gss_krb5_init_sec_context): Don't allocate context. 2004-01-12 Simon Josefsson * lib/context.c: (gss_init_sec_context): Allocate context. 2004-01-12 Simon Josefsson * lib/context.c: Error handling. Fix. 2004-01-12 Simon Josefsson * lib/context.c: Error handling. 2004-01-12 Simon Josefsson * lib/context.c: Error handling. 2004-01-12 Simon Josefsson * lib/krb5/context.c: Deallocate. 2004-01-12 Simon Josefsson * lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/k5internal.h: Remove ticket from credential structure. 2004-01-12 Simon Josefsson * lib/krb5/cred.c: Fix. 2004-01-12 Simon Josefsson * NEWS, lib/krb5/oid.c: Add. 2004-01-12 Simon Josefsson * lib/krb5/cred.c: (gss_krb5_inquire_cred_by_mech): Add. 2004-01-12 Simon Josefsson * lib/krb5/protos.h: (gss_krb5_inquire_cred_by_mech): Add. 2004-01-12 Simon Josefsson * lib/internal.h: (_gss_mech_api_struct): Add inquire_cred_by_mech. (_gss_find_mech): Use const for OID. 2004-01-12 Simon Josefsson * lib/meta.c: (_gss_mech_apis): Add gss_krb5_inquire_cred_by_mech. (_gss_find_mech): Use const for OID. 2004-01-12 Simon Josefsson * lib/cred.c: (gss_inquire_cred_by_mech): Implement. 2004-01-12 Simon Josefsson * lib/cred.c: Fix. 2004-01-12 Simon Josefsson * lib/krb5/cred.c: Fix. 2004-01-12 Simon Josefsson * NEWS, lib/cred.c, lib/krb5/cred.c: Fix. 2004-01-12 Simon Josefsson * lib/krb5/cred.c: Fix. 2004-01-12 Simon Josefsson * lib/krb5/name.c: Support GSS_C_NT_EXPORT_NAME. 2004-01-12 Simon Josefsson * lib/meta.c: Fix name-types. 2004-01-12 Simon Josefsson * NEWS: Add. 2004-01-12 Simon Josefsson * lib/name.c: (gss_export_name): Implement it. 2004-01-12 Simon Josefsson * lib/krb5/name.c: (gss_krb5_export_name): Use self-describing format. 2004-01-12 Simon Josefsson * lib/misc.c: Fix. 2004-01-11 Simon Josefsson * lib/meta.c: (_gss_mech_apis): Add gss_krb5_export_name. 2004-01-11 Simon Josefsson * lib/internal.h: (gss_name_struct): Use size_t. (_gss_mech_api_struct): Add export_name. 2004-01-11 Simon Josefsson * lib/krb5/name.c, lib/krb5/protos.h: (gss_krb5_export_name): Add. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * lib/krb5/name.c: (gss_krb5_canonicalize_name): Support GSS_KRB5_NT_PRINCIPAL_NAME. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * lib/krb5/cred.c: (gss_krb5_release_cred): Add. (gss_krb5_inquire_cred): Support cred_handle == GSS_C_NO_CREDENTIAL. (gss_krb5_acquire_cred): Don't allocate output_cred_handle (new API). 2004-01-11 Simon Josefsson * lib/cred.c: (gss_acquire_cred): Allocate output_cred_handle. (gss_release_cred): Deallocate cred_handle. Call backend. 2004-01-11 Simon Josefsson * lib/meta.c: (_gss_mech_apis): Add release_cred. 2004-01-11 Simon Josefsson * lib/internal.h: (_gss_mech_api_struct): Add release_cred. 2004-01-11 Simon Josefsson * lib/krb5/protos.h: (gss_krb5_release_cred): Add. 2004-01-11 Simon Josefsson * lib/name.c: Fix. 2004-01-11 Simon Josefsson * lib/misc.c: Fix. 2004-01-11 Simon Josefsson * lib/misc.c: Fix. 2004-01-11 Simon Josefsson * lib/meta.c: Remove dummy stuff. Add _gss_indicate_mechs1. 2004-01-11 Simon Josefsson * lib/krb5/msg.c, lib/krb5/protos.h: (gss_krb5_get_mic, gss_krb5_verify_mic): Add. 2004-01-11 Simon Josefsson * lib/misc.c: (gss_indicate_mechs): Use new API. Improve. 2004-01-11 Simon Josefsson * lib/name.c: (gss_inquire_mechs_for_name): Use new API. Improve. 2004-01-11 Simon Josefsson * lib/internal.h: Hide _gss_mech_apis. 2004-01-11 Simon Josefsson * lib/cred.c: (gss_acquire_cred, gss_inquire_cred): Cleanup. 2004-01-11 Simon Josefsson * tests/Makefile.am, tests/basic.c, tests/utils.c: Move utils.c into basic.c. 2004-01-11 Simon Josefsson * configure.ac: Check for locale.h, for self tests. 2004-01-11 Simon Josefsson * lib/ext.h: Typo. 2004-01-11 Simon Josefsson * lib/error.c: (gss_warn): Fix. 2004-01-11 Simon Josefsson * lib/error.c, lib/ext.h: Add gss_warn. 2004-01-11 Simon Josefsson * lib/gss.h.in: Remove #include's. 2004-01-11 Simon Josefsson * lib/ext.h: Include stddef.h. 2004-01-11 Simon Josefsson * lib/meta.c: Fix. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * gl/xmalloc.c: Typo. 2004-01-11 Simon Josefsson * doc/reference/.cvsignore: [no log message] 2004-01-11 Simon Josefsson * configure.ac, doc/Makefile.am, doc/reference/Makefile.am, doc/reference/gss-docs.tmpl: Add GTK-DOC API output. 2004-01-11 Simon Josefsson * lib/context.c, lib/cred.c, lib/error.c, lib/misc.c, lib/msg.c, lib/name.c: Doc fix. 2004-01-11 Simon Josefsson * lib/api.h: Full prototypes (mostly for GTK-DOC). Indent. 2004-01-11 Simon Josefsson * gl/Makefile.am, gl/gettext.h, lib/Makefile.am, lib/gettext.h: Move gettext from lib/ to gl/. 2004-01-11 Simon Josefsson * doc/gss.texi: Add. 2004-01-11 Simon Josefsson * lib/msg.c: Doc fix. 2004-01-11 Simon Josefsson * lib/msg.c: Fix. 2004-01-11 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2004-01-11 Simon Josefsson * tests/Makefile.am: Don't build tests unconditionally. 2004-01-11 Simon Josefsson * tests/basic.c, tests/utils.c: Fix. 2004-01-11 Simon Josefsson * autogen.sh: Fix 2004-01-11 Simon Josefsson * NEWS, configure.ac: Bump versions. 2004-01-11 Simon Josefsson * ChangeLog: [no log message] 2004-01-11 Simon Josefsson * NEWS: Version 0.0.8. 2004-01-11 Simon Josefsson * lib/asn1.c, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/misc.c, lib/name.c, tests/basic.c, tests/utils.c: Fix warnings. 2004-01-11 Simon Josefsson * .cvsignore: [no log message] 2004-01-11 Simon Josefsson * COPYING: Remove. 2004-01-11 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * doc/gss.texi: Add. 2004-01-11 Simon Josefsson * doc/gss.texi: Use gdoc. 2004-01-11 Simon Josefsson * lib/misc.c: Add gss_release_oid. Error fixes. Doc fix. 2004-01-11 Simon Josefsson * lib/name.c: Doc fix. 2004-01-11 Simon Josefsson * lib/name.c: Fix. 2004-01-11 Simon Josefsson * doc/gss.texi: Use gdoc. 2004-01-11 Simon Josefsson * lib/cred.c: Doc fix. 2004-01-11 Simon Josefsson * doc/gss.texi: Use gdoc. 2004-01-11 Simon Josefsson * lib/misc.c: Typo. 2004-01-11 Simon Josefsson * lib/misc.c: Doc fix. 2004-01-11 Simon Josefsson * lib/error.c: Doc fix. 2004-01-11 Simon Josefsson * doc/gss.texi: Fix. 2004-01-11 Simon Josefsson * doc/gss.texi: Add. 2004-01-11 Simon Josefsson * doc/gss.texi: Use gdoc. 2004-01-11 Simon Josefsson * lib/name.c: Doc fix. 2004-01-11 Simon Josefsson * doc/gdoc: Fix. 2004-01-11 Simon Josefsson * doc/gss.texi: Fix per-msg API. 2004-01-11 Simon Josefsson * doc/gdoc: Fix. 2004-01-11 Simon Josefsson * lib/context.c: Fix error codes. 2004-01-11 Simon Josefsson * lib/name.c: Typo. 2004-01-11 Simon Josefsson * lib/name.c: Doc fix. 2004-01-11 Simon Josefsson * lib/name.c: Fix. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/k5internal.h: Fix gss_duplicate_name usage. 2004-01-11 Simon Josefsson * lib/name.c: (gss_duplicate_name): Allocate DEST_NAME. Fix return value. Doc fix. 2004-01-11 Simon Josefsson * lib/misc.c: Fix. 2004-01-11 Simon Josefsson * NEWS: Fix. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/protos.h, lib/meta.c, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/version.c, po/gss.pot, po/sv.po, tests/basic.c: Indent. 2004-01-11 Simon Josefsson * lib/Makefile.am: Fix indent. 2004-01-11 Simon Josefsson * lib/Makefile.am, lib/krb5/Makefile.am: Distcheck fixes. 2004-01-11 Simon Josefsson * po/POTFILES.in: Fix. 2004-01-11 Simon Josefsson * tests/Makefile.am: Add -I for lib/krb5/. 2004-01-11 Simon Josefsson * lib/Makefile.am, lib/krb5.h, lib/krb5/Makefile.am, lib/krb5/krb5.h, lib/krb5/protos.h, lib/meta.c: Split krb5.h into krb5/krb5.h (public) and krb5/protos.h (private). 2004-01-11 Simon Josefsson * configure.ac, lib/Makefile.am, lib/krb5.c, lib/krb5/.cvsignore, lib/krb5/Makefile.am, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/utils.c: Split up lib/krb5.c into lib/krb/*.c. 2004-01-11 Simon Josefsson * lib/msg.c: Typo. 2004-01-10 Simon Josefsson * lib/context.c: Typo. 2004-01-10 Simon Josefsson * lib/msg.c: Doc fix. 2004-01-10 Simon Josefsson * lib/krb5.c: Typo. 2004-01-10 Simon Josefsson * lib/krb5.c: Cleanup ticket lifetime calculations. 2004-01-10 Simon Josefsson * lib/context.c, lib/internal.h, lib/krb5.c, lib/krb5.h, lib/meta.c: Make context_time work. 2004-01-10 Simon Josefsson * lib/context.c: Typo. 2004-01-10 Simon Josefsson * lib/context.c: (gss_delete_sec_context): Do mech specifics too. 2004-01-10 Simon Josefsson * lib/name.c: Doc fix. 2004-01-10 Simon Josefsson * lib/krb5.c, lib/krb5.h, lib/meta.c: Add delete_sec_context. 2004-01-10 Simon Josefsson * lib/internal.h: Add delete_sec_context. Remove xstrdup.h. Indent. 2004-01-10 Simon Josefsson * gl/Makefile.am, gl/xmalloc.c, gl/xstrdup.c, gl/xstrdup.h: Move xstrdup into xmalloc. 2004-01-10 Simon Josefsson * doc/Makefile.am: Dist texinfo.css. 2004-01-10 Simon Josefsson * doc/gendocs.sh, doc/gendocs_template: Sync with Texinfo. 2004-01-10 Simon Josefsson * doc/gss.texi: Fix title. 2004-01-10 Simon Josefsson * doc/Makefile.am, doc/gss.css, doc/texinfo.css: Rename gss.css to texinfo.css. 2004-01-10 Simon Josefsson * doc/gss.css: Fix. 2004-01-10 Simon Josefsson * doc/gss.css: Fix. 2004-01-10 Simon Josefsson * doc/Makefile.am: Use CSS for HTML. 2004-01-10 Simon Josefsson * doc/gss.css: Fix. 2004-01-10 Simon Josefsson * doc/gss.css: Add. 2004-01-09 Simon Josefsson * lib/context.c: Fix. 2004-01-09 Simon Josefsson * doc/Makefile.am: Gdoc fix. 2004-01-09 Simon Josefsson * doc/texinfo.conf: Add simple asciidoc texinfo configuration. 2004-01-09 Simon Josefsson * doc/gdoc: fix 2004-01-09 Simon Josefsson * doc/gdoc: use asciidoc on parameter too 2004-01-09 Simon Josefsson * doc/gss.texi: Use @finalout. 2004-01-09 Simon Josefsson * doc/gss.texi: Header template fix. 2004-01-09 Simon Josefsson * doc/gss.texi: Use gdoc more. 2004-01-09 Simon Josefsson * lib/context.c: Doc fix. 2004-01-09 Simon Josefsson * configure.ac: Check for perl, for gdoc. 2004-01-09 Simon Josefsson * doc/Makefile.am: Fix. 2004-01-09 Simon Josefsson * doc/.cvsignore: [no log message] 2004-01-09 Simon Josefsson * doc/Makefile.gdoci: Add. 2004-01-09 Simon Josefsson * doc/Makefile.am, doc/gss.texi: Use gdoc. 2004-01-09 Simon Josefsson * doc/.cvsignore: [no log message] 2004-01-09 Simon Josefsson * autogen.sh: Use gdoc. 2004-01-09 Simon Josefsson * lib/Makefile.am, tests/Makefile.am: Replace INCLUDES with AM_CPPFLAGS. 2004-01-09 Simon Josefsson * lib/context.c: Doc fix. 2004-01-09 Simon Josefsson * doc/gdoc: disable (most) section processing pipe data through asciidoc don't skip leading whitespace 2004-01-09 Simon Josefsson * doc/gdoc: Sync with libidn. 2004-01-01 Simon Josefsson * configure.ac: Work on autoconf 2.58 and libtool 1.5. 2003-11-30 Simon Josefsson * README: Fix. 2003-11-27 Simon Josefsson * doc/gss.texi: Fix. 2003-11-26 Simon Josefsson * NEWS, configure.ac: Bump versions. 2003-11-26 Simon Josefsson * ChangeLog: [no log message] 2003-11-26 Simon Josefsson * NEWS: Version 0.0.7. 2003-11-26 Simon Josefsson * Makefile.am: Fix release target. 2003-11-26 Simon Josefsson * Makefile.am: Fix. 2003-11-25 Simon Josefsson * configure.ac: Disable fortran etc libtool tests. 2003-11-24 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-04.txt: Add. 2003-11-24 Simon Josefsson * lib/meta.c: Fix warnings. 2003-11-24 Simon Josefsson * gl/xmalloc.c: Fix. 2003-11-24 Simon Josefsson * gl/xmalloc.c: Use perror(). 2003-11-24 Simon Josefsson * gl/xmalloc.c: Don't use inline keyword. 2003-11-24 Simon Josefsson * m4/.cvsignore: [no log message] 2003-11-24 Simon Josefsson * NEWS: Fix. 2003-11-24 Simon Josefsson * lib/krb5.c: (gss_krb5_unwrap): Fix typo to make 3DES work. 2003-11-23 Simon Josefsson * doc/gendocs.sh: Sync with texinfo. 2003-11-23 Simon Josefsson * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/intdiv0.m4, m4/inttypes-pri.m4, m4/inttypes.m4, m4/inttypes_h.m4, m4/isc-posix.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/nls.m4, m4/po.m4, m4/progtest.m4, m4/stdint_h.m4, m4/uintmax_t.m4, m4/ulonglong.m4: Remove. 2003-11-23 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2003-11-23 Simon Josefsson * ANNOUNCE, Makefile.am, TODO: Remove ANNOUNCE and TODO. 2003-11-23 Simon Josefsson * doc/gss.texi: Add "Planned Features". 2003-11-23 Simon Josefsson * doc/gendocs.sh: Fix. 2003-11-23 Simon Josefsson * doc/gendocs.sh: Fix URLs. 2003-11-23 Simon Josefsson * Makefile.am: Use gendocs in release target. 2003-11-23 Simon Josefsson * doc/gendocs.sh, doc/gendocs_template: Add (from texinfo). 2003-11-23 Simon Josefsson * gl/xalloc.h: Remove unused stuff. 2003-11-23 Simon Josefsson * lib/error.c, lib/krb5.c, lib/meta.c: Use xstrdup. 2003-11-23 Simon Josefsson * configure.ac, gl/Makefile.am, gl/error.c, gl/error.h, gl/gethostname.c, gl/gettext.h, gl/m4/error.m4, gl/m4/malloc.m4, gl/m4/nls.m4, gl/m4/onceonly_2_57.m4, gl/m4/po.m4, gl/m4/realloc.m4, gl/m4/strerror_r.m4, gl/m4/unlocked-io.m4, gl/m4/xalloc.m4, gl/malloc.c, gl/realloc.c, gl/unlocked-io.h, gl/xalloc.h, gl/xgethostname.c, gl/xgethostname.h, gl/xmalloc.c, gl/xstrdup.c, gl/xstrdup.h, lib/Makefile.am, lib/internal.h, lib/krb5.c: Cleanup gnulib situation. 2003-11-23 Simon Josefsson * lib/internal.h: Simplify #include mess. 2003-11-23 Simon Josefsson * gl/.cvsignore: [no log message] 2003-11-22 Simon Josefsson * TODO: Fix. 2003-11-22 Simon Josefsson * doc/gss.texi: Fix. 2003-11-22 Simon Josefsson * NEWS: Add. 2003-11-22 Simon Josefsson * ANNOUNCE, configure.ac, lib/gss.h.in: Typo. 2003-11-22 Simon Josefsson * THANKS: Add. 2003-11-22 Simon Josefsson * Makefile.am, configure.ac, gl/Makefile.am, gl/m4/Makefile.am, m4/Makefile.am, m4/check_headerlib.m4, m4/pkg.m4: Simplify m4 situation (with help from automake 1.8 beta). 2003-11-22 Simon Josefsson * lib/gss.h.in: Don't include gss/krb5.h unconditionally because it may not be installed. Reported by Wojciech Polak . 2003-11-22 Simon Josefsson * configure.ac: Fix bug e-mail. Move libtool check. Use sj_CHECK_HEADERLIB for Shishi test. Add '#include ' substitution, for gss.h. 2003-11-22 Simon Josefsson * lib/Makefile.am: Fix LIBADD. 2003-11-21 Simon Josefsson * Makefile.am: Cleanup EXTRA_DIST. 2003-11-21 Simon Josefsson * Makefile.am: Remove. 2003-11-21 Simon Josefsson * doc/Makefile.am: Cleanup. 2003-11-21 Simon Josefsson * m4/.cvsignore: [no log message] 2003-11-21 Simon Josefsson * configure.ac: Remove AC_GNU_SOURCE hack. 2003-11-17 Simon Josefsson * configure.ac: Fix automake syntax. 2003-11-17 Simon Josefsson * configure.ac: Autoupdate fixes. 2003-11-02 Simon Josefsson * configure.ac: Fix for buggy libtool. 2003-11-01 Simon Josefsson * AUTHORS: Update PGP key. 2003-10-31 Simon Josefsson * doc/gdoc: Use @strong instead of @header, better rendered almost everywhere. 2003-10-28 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-03.txt: Add. 2003-10-26 Simon Josefsson * doc/gdoc: Revert texinfo highlighting (texinfo @ interpolated by perl). Rewrite interpolate handling to make it more debuggable. 2003-10-26 Simon Josefsson * doc/gdoc: Fix. 2003-10-26 Simon Josefsson * doc/gdoc: Workaround interpolate problem. 2003-10-26 Simon Josefsson * doc/gdoc: Fix function regexp (old version completely broken??). 2003-10-26 Simon Josefsson * doc/gdoc: Fix 'section' regexp to require initial upper case, unless it start with [@&$%]. Before the following line was regarded as a section heading. following restrictions apply to the output parameters: 2003-10-26 Simon Josefsson * doc/gdoc: Print section headers for texinfo. 2003-10-26 Simon Josefsson * doc/gdoc: Fix texinfo cleanup (accidently added @ last checkin). 2003-10-26 Simon Josefsson * doc/gdoc: Move texinfo cleanup into texinfo function. 2003-10-26 Simon Josefsson * doc/gdoc: Add -listfunc output mode. Add -sourceversion, -includefuncprefix, -bugsto, -seeinfo, -copyright, -verbatimcopying for man pages. Translate { into @{ and } into @} in texinfo mode. White space fix for texinfo. Man page output mode mostly rewritten. 2003-10-26 Simon Josefsson * doc/gdoc: Add, straight from GNUTLS. 2003-10-11 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-02.txt: Add. 2003-10-10 Simon Josefsson * configure.ac: Fix so version comment (matches libtool manual). 2003-10-07 Simon Josefsson * : Add. 2003-09-27 Simon Josefsson * doc/gss.texi: Add. 2003-09-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2003-09-22 Simon Josefsson * ChangeLog: [no log message] 2003-09-22 Simon Josefsson * NEWS: Version 0.0.6. 2003-09-22 Simon Josefsson * NEWS: Add. 2003-09-20 Simon Josefsson * lib/krb5.c: Fix API. 2003-09-08 Simon Josefsson * doc/specification/draft-williams-gssapi-store-deleg-creds-00.txt: Add. 2003-08-31 Simon Josefsson * README-alpha: Fix. 2003-08-31 Simon Josefsson * NEWS, configure.ac: Bump versions. 2003-08-31 Simon Josefsson * ChangeLog: [no log message] 2003-08-31 Simon Josefsson * NEWS: Version 0.0.5. 2003-08-31 Simon Josefsson * po/gss.pot, po/sv.po: Update. 2003-08-31 Simon Josefsson * tests/utils.c: Remove. 2003-08-31 Simon Josefsson * tests/basic.c: Add program_name, for gnulib. 2003-08-31 Simon Josefsson * Makefile.am, NEWS, configure.ac: Fix. 2003-08-30 Simon Josefsson * doc/specification/draft-ietf-cat-gssv2-08.txt, doc/specification/draft-ietf-cat-gssv2-cbind-04.txt, doc/specification/draft-ietf-krb-wg-gss-crypto-00.txt: Add. (Moved from Shishi.) 2003-08-30 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-00.txt: Official version. 2003-08-30 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-00.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-01.txt: Add. 2003-08-29 Simon Josefsson * NEWS: Typo. 2003-08-29 Simon Josefsson * NEWS: Fix. 2003-08-29 Simon Josefsson * NEWS: Add. 2003-08-29 Simon Josefsson * lib/krb5.c: Support AP subkeys. 2003-08-12 Simon Josefsson * configure.ac: Simplify shishi test. 2003-08-12 Simon Josefsson * NEWS: Add. 2003-08-12 Simon Josefsson * configure.ac: Bump versions. 2003-08-12 Simon Josefsson * configure.ac: Remove help2man, texipdf checks (not used). Make shishi test work without pkg-config. 2003-08-09 Simon Josefsson * ChangeLog: [no log message] 2003-08-09 Simon Josefsson * NEWS: Version 0.0.4. 2003-08-09 Simon Josefsson * Makefile.am: Remove scp from release target. 2003-08-09 Simon Josefsson * Makefile.am: Fix release target. 2003-08-09 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2003-08-09 Simon Josefsson * NEWS: Fix. 2003-08-09 Simon Josefsson * lib/krb5.c: Don't hard code ad-hoc GSS Shishi checksum type. 2003-08-09 Simon Josefsson * lib/Makefile.am: Link gnulib properly. 2003-08-09 Simon Josefsson * lib/internal.h: Fix title. 2003-08-09 Simon Josefsson * lib/krb5.c: Set oid in cred struct. Add unfinished inquire_cred. 2003-08-09 Simon Josefsson * lib/krb5.h, lib/meta.c: Add inquire_cred. 2003-08-09 Simon Josefsson * lib/internal.h: Add mech OID to cred struct. Add inquire_cred to meta structure. 2003-08-09 Simon Josefsson * lib/cred.c: Add inquire_cred jump. 2003-08-09 Simon Josefsson * gl/Makefile.am: Use libtool. 2003-08-09 Simon Josefsson * gl/.cvsignore: [no log message] 2003-07-31 Simon Josefsson * ANNOUNCE, README: Use gnu.org web site. 2003-07-31 Simon Josefsson * Makefile.am: Distribute files via gnuftp. 2003-07-10 Simon Josefsson * po/Makevars: Use proper bug email address. 2003-07-10 Simon Josefsson * NEWS: Add. 2003-07-10 Simon Josefsson * configure.ac: Bump version. 2003-07-08 Simon Josefsson * lib/krb5.c: (gss_krb5_unwrap): Decrypt properly. 2003-07-08 Simon Josefsson * lib/krb5.c: Use new Shishi crypto API. 2003-07-06 Simon Josefsson * lib/krb5.c: Fixes. 2003-07-06 Simon Josefsson * TODO: Add. 2003-07-05 Simon Josefsson * lib/krb5.c: (gss_krb5_init_sec_context): Reuse shishi handle from credential, if available. 2003-07-02 Simon Josefsson * ChangeLog: [no log message] 2003-07-02 Simon Josefsson * NEWS: Version 0.0.3. 2003-07-02 Simon Josefsson * Makefile.am: Fix typo. 2003-07-02 Simon Josefsson * NEWS: Add. 2003-07-02 Simon Josefsson * Makefile.am: Add legal information to ChangeLog. 2003-07-02 Simon Josefsson * .cvscopying: Add. 2003-07-01 Simon Josefsson * doc/gss.texi: Add. 2003-06-30 Simon Josefsson * lib/krb5.c: Fixes. 2003-06-29 Simon Josefsson * lib/krb5.c: Cleanup. 2003-06-29 Simon Josefsson * lib/cred.c: (gss_release_cred): Fix minor_status. 2003-06-29 Simon Josefsson * lib/cred.c: Typo. 2003-06-29 Simon Josefsson * lib/misc.c: (gss_release_oid_set): Handle NULL set. 2003-06-29 Simon Josefsson * lib/misc.c: (gss_test_oid_set_member): Handle NULL member. 2003-06-29 Simon Josefsson * lib/cred.c: (gss_acquire_cred): Support desired_mechs. 2003-06-29 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2003-06-29 Simon Josefsson * m4/Makefile.am: Add. 2003-06-29 Simon Josefsson * gl/Makefile.am: Add m4. 2003-06-29 Simon Josefsson * po/.cvsignore: [no log message] 2003-06-29 Simon Josefsson * NEWS, m4/Makefile.am, m4/pkg.m4: Add. 2003-06-29 Simon Josefsson * po/.cvsignore: [no log message] 2003-06-29 Simon Josefsson * m4/gettext.m4, m4/inttypes_h.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/nls.m4, m4/po.m4, m4/progtest.m4, m4/stdint_h.m4, m4/uintmax_t.m4: Generated. 2003-06-29 Simon Josefsson * po/Makevars: Update to gettext 12.1. 2003-06-29 Simon Josefsson * configure.ac: Bump versions. 2003-06-29 Simon Josefsson * gl/m4/.cvsignore, m4/.cvsignore: [no log message] 2003-06-29 Simon Josefsson * Makefile.am, configure.ac, gl/m4/Makefile.am, gl/m4/error.m4, gl/m4/gethostname.m4, gl/m4/malloc.m4, gl/m4/nls.m4, gl/m4/onceonly_2_57.m4, gl/m4/po.m4, gl/m4/realloc.m4, gl/m4/strerror_r.m4, gl/m4/unlocked-io.m4, gl/m4/xalloc.m4, m4/Makefile.am, m4/error.m4, m4/gethostname.m4, m4/malloc.m4, m4/nls.m4, m4/onceonly_2_57.m4, m4/po.m4, m4/realloc.m4, m4/strerror_r.m4, m4/unlocked-io.m4, m4/xalloc.m4: Move gnulib m4's from m4/ to gl/m4/. 2003-06-29 Simon Josefsson * COPYING.DOC: Add. 2003-06-29 Simon Josefsson * README-alpha: Note for binary package builders. 2003-06-29 Simon Josefsson * lib/internal.h, lib/meta.c, lib/misc.c, lib/name.c: Move meta.c functions to where they belong. 2003-06-29 Simon Josefsson * lib/context.c, lib/cred.c: Add comment. 2003-06-29 Simon Josefsson * doc/gss.texi: Fix. 2003-06-29 Simon Josefsson * doc/gss.texi: Add. 2003-06-29 Simon Josefsson * doc/gss.texi: Add. 2003-06-29 Simon Josefsson * lib/cred.c, lib/krb5.c: Cleanup. 2003-06-29 Simon Josefsson * configure.ac, gl/Makefile.am, gl/gethostname.c, m4/Makefile.am, m4/gethostname.m4: Add gethostname() from gnulib. 2003-06-28 Simon Josefsson * Makefile.am: Fix release scp. 2003-06-28 Simon Josefsson * ChangeLog: [no log message] 2003-06-28 Simon Josefsson * NEWS: Version 0.0.2. 2003-06-28 Simon Josefsson * configure.ac: Don't abort if pkg-config isn't available. 2003-06-28 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2003-06-28 Simon Josefsson * lib/Makefile.am: Fix -I. 2003-06-28 Simon Josefsson * NEWS: Add. 2003-06-28 Simon Josefsson * configure.ac: Bump so version. 2003-06-28 Simon Josefsson * lib/asn1.c, lib/cred.c, lib/krb5.c, lib/misc.c, lib/name.c: Use xalloc. 2003-06-28 Simon Josefsson * doc/gss.texi: Mention xalloc. 2003-06-28 Simon Josefsson * gl/.cvsignore: [no log message] 2003-06-28 Simon Josefsson * Makefile.am, configure.ac, gl/Makefile.am, gl/error.c, gl/error.h, gl/gettext.h, gl/malloc.c, gl/realloc.c, gl/unlocked-io.h, gl/xalloc.h, gl/xmalloc.c, gl/xstrdup.c, lib/Makefile.am, lib/internal.h, m4/Makefile.am, m4/codeset.m4, m4/error.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/intdiv0.m4, m4/inttypes-pri.m4, m4/inttypes.m4, m4/inttypes_h.m4, m4/isc-posix.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/malloc.m4, m4/nls.m4, m4/onceonly_2_57.m4, m4/po.m4, m4/progtest.m4, m4/realloc.m4, m4/stdint_h.m4, m4/strerror_r.m4, m4/uintmax_t.m4, m4/ulonglong.m4, m4/unlocked-io.m4, m4/xalloc.m4: Add xalloc (with deps) from gnulib. 2003-06-28 Simon Josefsson * NEWS: Add. 2003-06-28 Simon Josefsson * configure.ac: Bump version. 2003-06-28 Simon Josefsson * lib/context.c: Clear output token for delete_sec_context. 2003-06-28 Simon Josefsson * lib/krb5.c: Add accept_sec_context, acquire_cred. Fixes. (GSASL via GSS can connect to Mailutils IMAP server via native GSS.) 2003-06-28 Simon Josefsson * lib/name.c: Fix. 2003-06-28 Simon Josefsson * lib/cred.c: Add acquire_cred. 2003-06-28 Simon Josefsson * lib/internal.h, lib/krb5.h, lib/meta.c: Add accept_sec_context, acquire_cred. 2003-06-28 Simon Josefsson * lib/context.c: Add accept_sec_context. 2003-06-28 Simon Josefsson * lib/asn1.c, lib/ext.h: Add prefix encapsulation. 2003-06-27 Simon Josefsson * lib/asn1.c: Fix. 2003-06-27 Simon Josefsson * doc/gss.texi: Add. 2003-06-27 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * ChangeLog: [no log message] 2003-06-12 Simon Josefsson * lib/krb5.c: Translate errors. 2003-06-12 Simon Josefsson * lib/error.c, lib/krb5.c, po/gss.pot, po/sv.po: Translation fixes. 2003-06-12 Simon Josefsson * po/gss.pot: Fix. 2003-06-12 Simon Josefsson * ChangeLog: [no log message] 2003-06-12 Simon Josefsson * Makefile.am: Fix release target. 2003-06-12 Simon Josefsson * lib/error.c, lib/krb5.c, lib/meta.c, lib/obsolete.c, po/POTFILES.in, po/gss.pot, po/sv.po: Translation fixes. 2003-06-12 Simon Josefsson * po/sv.po: Add. 2003-06-12 Simon Josefsson * README-alpha: TeX required. 2003-06-12 Simon Josefsson * NEWS: Version 0.0.1. 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * NEWS: Fix. 2003-06-12 Simon Josefsson * doc/.cvsignore: [no log message] 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-10 Simon Josefsson * tests/utils.c: Fix. 2003-06-10 Simon Josefsson * NEWS, tests/gettext.h: Add. 2003-06-10 Simon Josefsson * tests/basic.c, tests/utils.c: Translation stuff. 2003-06-10 Simon Josefsson * configure.ac: Fix. 2003-06-10 Simon Josefsson * lib/error.c: String checks. 2003-06-10 Simon Josefsson * configure.ac: Check for locale.h. 2003-06-10 Simon Josefsson * tests/basic.c: Setup translation (should be done in ../lib/?). 2003-06-10 Simon Josefsson * tests/Makefile.am: Define LOCALEDIR. 2003-06-10 Simon Josefsson * po/sv.po: Add. 2003-06-10 Simon Josefsson * po/gss.pot: Fix. 2003-06-10 Simon Josefsson * po/LINGUAS: Add sv. 2003-06-10 Simon Josefsson * po/ggssapi.pot: Removed. (See gss.pot.) 2003-06-10 Simon Josefsson * po/POTFILES.in: Fix. 2003-06-10 Simon Josefsson * po/gss.pot: Add. 2003-06-09 Simon Josefsson * configure.ac: Bump versions. 2003-06-09 Simon Josefsson * Makefile.am: Fix. 2003-06-09 Simon Josefsson * Makefile.am: Only generate ChangeLog for releases. (Allows make dist to work when savannah is down.) 2003-06-09 Simon Josefsson * lib/krb5.c: Add oids. Add display_status. Fixes. 2003-06-09 Simon Josefsson * lib/error.c, lib/krb5.h: Add. 2003-06-09 Simon Josefsson * lib/misc.c: Move display_status to error.c. 2003-06-09 Simon Josefsson * lib/internal.h, lib/meta.c: Add display_status. 2003-06-09 Simon Josefsson * lib/cred.c, lib/name.c: Fix. 2003-06-09 Simon Josefsson * lib/oid.c: Move krb5 oids to krb5.c. 2003-06-09 Simon Josefsson * lib/Makefile.am: Make krb5 conditional. Remove old -I../intl. 2003-06-09 Simon Josefsson * configure.ac: Add krb5 conditional. 2003-06-05 Simon Josefsson * lib/meta.c, lib/misc.c: Clear minor_status. 2003-06-02 Simon Josefsson * Makefile.am: Fix release target. 2003-06-02 Simon Josefsson * ChangeLog: [no log message] 2003-06-02 Simon Josefsson * NEWS: Version 0.0.0. 2003-06-02 Simon Josefsson * ChangeLog: Add. (Autogenerated by cvs2cl.) 2003-06-02 Simon Josefsson * NEWS: Fix. 2003-06-02 Simon Josefsson * Makefile.am, argp/.cvsignore, argp/Makefile.am, argp/Versions, argp/acinclude.m4, argp/argp-ba.c, argp/argp-eexst.c, argp/argp-fmtstream.c, argp/argp-fmtstream.h, argp/argp-fs-xinl.c, argp/argp-help.c, argp/argp-namefrob.h, argp/argp-parse.c, argp/argp-pv.c, argp/argp-pvh.c, argp/argp-test.c, argp/argp-xinl.c, argp/argp.h, argp/config.h.in, argp/configure.ac, argp/libargp.m4, argp/mempcpy.c, argp/strchrnul.c, argp/strndup.c, configure.ac: Remove argp. 2003-06-02 Simon Josefsson * tests/utils.c: Remove gss/ prefix from includes. 2003-06-02 Simon Josefsson * tests/utils.c: Use gss/*.h instead of gss.h. 2003-06-02 Simon Josefsson * lib/Makefile.am: Dist gettext.h. 2003-06-02 Simon Josefsson * lib/version.c: Fix copying conditions. 2003-06-02 Simon Josefsson * ANNOUNCE, README-alpha, gss.pc.in: Fix. 2003-06-02 Simon Josefsson * NEWS: Add. 2003-06-02 Simon Josefsson * lib/krb5.c: DES works. 2003-05-30 Simon Josefsson * doc/specification/draft-ietf-cat-gss-conv-00.txt, doc/specification/draft-ietf-cat-gsseasy-01.txt: Add. 2003-05-30 Simon Josefsson * doc/specification/draft-ietf-cat-krb5gss-mech2-00.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-01.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-02.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-03.txt, doc/specification/draft-raeburn-cat-gssapi-krb5-3des-00.txt, doc/specification/draft-raeburn-krb-gssapi-krb5-3des-01.txt: Add. 2003-05-30 Simon Josefsson * doc/gss.texi: Add. 2003-05-30 Simon Josefsson * lib/meta.c: Fix. (RFC permitted our usage model.) 2003-05-30 Simon Josefsson * doc/gss.texi: Add. Fix. 2003-05-30 Simon Josefsson * lib/ext.h: Add. 2003-05-30 Simon Josefsson * lib/misc.c: Fix. 2003-05-30 Simon Josefsson * lib/name.c: Fix. 2003-05-30 Simon Josefsson * tests/.cvsignore: [no log message] 2003-05-30 Simon Josefsson * tests/Makefile.am, tests/krb5.c: Remove krb5.c for now. 2003-05-30 Simon Josefsson * lib/meta.c, tests/basic.c: Add. 2003-05-30 Simon Josefsson * tests/basic.c: Add. 2003-05-30 Simon Josefsson * lib/internal.h: Fix. 2003-05-30 Simon Josefsson * lib/misc.c: Add. Fix. 2003-05-29 Simon Josefsson * tests/.cvsignore: [no log message] 2003-05-29 Simon Josefsson * tests/Makefile.am, tests/basic.c, tests/name.c: Rename name.c to basic.c. 2003-05-29 Simon Josefsson * lib/misc.c: Fix. 2003-05-29 Simon Josefsson * lib/krb5.c: Cleanup. 2003-05-29 Simon Josefsson * lib/krb5.c: Cleanup. 2003-05-29 Simon Josefsson * lib/internal.h: Remove. 2003-05-29 Simon Josefsson * lib/ext.h, lib/krb5.h: Add. 2003-05-29 Simon Josefsson * lib/asn1.c: Fix. 2003-05-29 Simon Josefsson * lib/internal.h: Add. 2003-05-29 Simon Josefsson * lib/meta.c, lib/misc.c: Fix. 2003-05-29 Simon Josefsson * lib/internal.h, lib/meta.c, lib/misc.c: Add. 2003-05-29 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-29 Simon Josefsson * lib/Makefile.am: Add meta.c. 2003-05-29 Simon Josefsson * lib/krb5.c: Fix. 2003-05-29 Simon Josefsson * lib/context.c, lib/msg.c, lib/name.c: Mech independent. 2003-05-29 Simon Josefsson * lib/internal.h, lib/meta.c: Add. 2003-05-29 Simon Josefsson * lib/meta.c: Add. 2003-05-29 Simon Josefsson * lib/krb5.h: Add. 2003-05-29 Simon Josefsson * lib/krb5.c: Fix. 2003-05-29 Simon Josefsson * lib/internal.h: Remove. 2003-05-29 Simon Josefsson * doc/gss.texi, lib/ext.h: Add. 2003-05-29 Simon Josefsson * lib/krb5.c, lib/misc.c: Fix. 2003-05-29 Simon Josefsson * lib/name.c: Fix. 2003-05-29 Simon Josefsson * lib/misc.c, lib/name.c: Fix. 2003-05-29 Simon Josefsson * lib/internal.h, lib/krb5.c, tests/utils.c: Fix includes. 2003-05-29 Simon Josefsson * lib/gss.h.in: Move things to ext.h. 2003-05-29 Simon Josefsson * lib/Makefile.am: Add ext.h. 2003-05-29 Simon Josefsson * lib/ext.h: Add. 2003-05-29 Simon Josefsson * doc/gss.texi: Fix. 2003-05-29 Simon Josefsson * ANNOUNCE: Fix. 2003-05-29 Simon Josefsson * lib/Makefile.am: Install api.h (former gssapi.h) and krb5.h in $(includedir)/gss/. Fix indents. 2003-05-29 Simon Josefsson * lib/api.h: Support xom.h (conditionally). 2003-05-29 Simon Josefsson * lib/api.h, lib/gssapi.h: Renamed gssapi.h to api.h. 2003-05-29 Simon Josefsson * lib/krb5.h: Add. 2003-05-29 Simon Josefsson * lib/gss.h.in: Add. Fix. 2003-05-29 Simon Josefsson * lib/asn1.c, lib/internal.h, lib/krb5.c: Fix. 2003-05-29 Simon Josefsson * lib/oid.c: Add krb5 OIDs (conditionally). 2003-05-29 Simon Josefsson * doc/Makefile.am: Drop src/ for now. 2003-05-29 Simon Josefsson * ANNOUNCE, README, THANKS: Fix. 2003-05-29 Simon Josefsson * Makefile.am, configure.ac, doc/gss.texi, src/.cvsignore, src/Makefile.am, src/gettext.h, src/gss.c, src/internal.h: Drop src/ for now. 2003-05-27 Simon Josefsson * doc/gss.texi: Fix pxref. 2003-05-27 Simon Josefsson * doc/gss.texi: Drop licenses. Add criticism todos. 2003-05-27 Simon Josefsson * doc/gss.texi: Fix license. 2003-05-27 Simon Josefsson * doc/gss.texi: Fix email. 2003-05-27 Simon Josefsson * doc/gss.texi: Fix title. 2003-05-26 Simon Josefsson * lib/krb5.c: Support mutual authentication (and other flags). Fix sequence number handling. Works as client via GSASL against Cyrus IMAP/SASL server. 2003-05-26 Simon Josefsson * tests/Makefile.am: Don't build krb5. 2003-05-26 Simon Josefsson * doc/gss.texi: Fix title. 2003-05-25 Simon Josefsson * lib/krb5.c: Add. (GSASL using GSS is now able to log on to GNU Mailutils imap4d linked to MIT GSSAPI.) 2003-05-25 Simon Josefsson * lib/internal.h, lib/krb5.c: Only krb5.c includes shishi. 2003-05-25 Simon Josefsson * lib/krb5.c: Add. 2003-05-18 Simon Josefsson * Makefile.am: Dist TODO. 2003-05-18 Simon Josefsson * NEWS: Fix. 2003-05-18 Simon Josefsson * lib/msg.c: Remove debug info. Call krb5. 2003-05-18 Simon Josefsson * lib/asn1.c, lib/internal.h, lib/krb5.c: Add. 2003-05-18 Simon Josefsson * lib/obsolete.c: Typo fix. 2003-05-18 Simon Josefsson * lib/context.c, lib/cred.c, lib/misc.c, lib/msg.c, lib/name.c: Remove documentation. 2003-05-18 Simon Josefsson * doc/Makefile.am: Fix man page name. 2003-05-18 Simon Josefsson * doc/gdoc, doc/gdoc-error: Removed (not needed anymore). 2003-05-18 Simon Josefsson * doc/gss.texi: Inline autogenerated API documentation. 2003-05-18 Simon Josefsson * configure.ac: Perl not needed. 2003-05-18 Simon Josefsson * doc/Makefile.am: Don't autogenerate API documentation. 2003-05-18 Simon Josefsson * doc/.cvsignore: [no log message] 2003-05-18 Simon Josefsson * lib/gssapi.h: Fix implementation type names. 2003-05-18 Simon Josefsson * lib/name.c: Fix. 2003-05-18 Simon Josefsson * lib/misc.c: Add. 2003-05-18 Simon Josefsson * lib/internal.h: Add. Fix. 2003-05-18 Simon Josefsson * lib/krb5.c: Cleanup. 2003-05-18 Simon Josefsson * lib/krb5.c: Cleanup. 2003-05-18 Simon Josefsson * lib/misc.c: Add. 2003-05-18 Simon Josefsson * lib/asn1.c: Cleanup. 2003-05-18 Simon Josefsson * AUTHORS: Fix. 2003-05-18 Simon Josefsson * README, README-alpha: Fix. 2003-05-18 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-18 Simon Josefsson * lib/krb5.c: AP-REQ works. 2003-05-18 Simon Josefsson * lib/msg.c: Add doc. Print debug info. 2003-05-17 Simon Josefsson * lib/asn1.c: Rewrite without libtasn1. 2003-05-17 Simon Josefsson * lib/internal.h: Fix. 2003-05-17 Simon Josefsson * lib/Makefile.am: Remove asn.1 stuff. 2003-05-17 Simon Josefsson * TODO, lib/gss.asn1: Remove. 2003-05-17 Simon Josefsson * configure.ac: Libtasn1 no longer required. 2003-05-10 Simon Josefsson * lib/Makefile.am: Fix last commit. 2003-05-10 Simon Josefsson * lib/Makefile.am: Dist gss_asn1_tab.c. 2003-05-10 Simon Josefsson * lib/Makefile.am: Use @ASN1PARSER@. 2003-05-08 Simon Josefsson * tests/.cvsignore: [no log message] 2003-05-08 Simon Josefsson * tests/Makefile.am: Build krb5. 2003-05-08 Simon Josefsson * tests/krb5.c: Krb5 test. 2003-05-08 Simon Josefsson * lib/krb5.c: Add. 2003-05-08 Simon Josefsson * lib/internal.h: Add krb5 stuff. 2003-05-08 Simon Josefsson * lib/context.c: Call krb5 for now. 2003-05-08 Simon Josefsson * lib/asn1.c: Wrap tokens in ASN.1. 2003-05-08 Simon Josefsson * lib/Makefile.am: Build asn1.c. Link with shishi. 2003-05-08 Simon Josefsson * ANNOUNCE, doc/gss.texi: Fix. 2003-05-08 Simon Josefsson * lib/gss.h.in: Fix. 2003-05-08 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-08 Simon Josefsson * TODO: Fix. 2003-05-08 Simon Josefsson * TODO: Add. 2003-05-08 Simon Josefsson * configure.ac: Look for asn1Parser. Fix errors. 2003-05-08 Simon Josefsson * configure.ac: Always require libtasn1. 2003-05-08 Simon Josefsson * README: Add prereq's. 2003-05-08 Simon Josefsson * tests/name.c: Fix. 2003-05-08 Simon Josefsson * lib/Makefile.am: Add krb5.c. Build gss_asn1_tab.c. 2003-05-08 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-08 Simon Josefsson * lib/gss.asn1, lib/krb5.c: Add. 2003-05-08 Simon Josefsson * configure.ac: For kerberos 5 support, find libtasn1 too. 2003-05-01 Simon Josefsson * doc/gss.texi: Add. 2003-05-01 Simon Josefsson * tests/.cvsignore: [no log message] 2003-05-01 Simon Josefsson * tests/Makefile.am: Build name. 2003-05-01 Simon Josefsson * tests/name.c: Typo. 2003-05-01 Simon Josefsson * tests/name.c, tests/utils.c: Add. 2003-05-01 Simon Josefsson * configure.ac: Test for Shishi. 2003-05-01 Simon Josefsson * doc/gss.texi: Document non-standard functions. 2003-05-01 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-01 Simon Josefsson * configure.ac, lib/Makefile.am, lib/ggssapi.h.in, lib/gss.h.in, lib/internal.h, lib/version.c: Rename ggssapi to gss. 2003-05-01 Simon Josefsson * lib/ggssapi.h.in: Add. 2003-05-01 Simon Josefsson * doc/gss.texi: Fix. 2003-05-01 Simon Josefsson * lib/error.c: Indent. 2003-05-01 Simon Josefsson * configure.ac, doc/Makefile.am, src/internal.h: Cleanup. 2003-05-01 Simon Josefsson * src/Makefile.am: Fix. 2003-05-01 Simon Josefsson * src/Makefile.am: Dist internal.h. 2003-05-01 Simon Josefsson * src/gss.c: Argp support. 2003-05-01 Simon Josefsson * src/internal.h: Include argp.h. 2003-05-01 Simon Josefsson * src/gettext.h, src/internal.h: Add. 2003-05-01 Simon Josefsson * .cvsignore: [no log message] 2003-05-01 Simon Josefsson * gss.pc.in: Rename ggssapi to gss. 2003-05-01 Simon Josefsson * ANNOUNCE, Makefile.am, README, configure.ac, doc/Makefile.am, doc/gss.texi, ggssapi.pc.in, gss.pc.in, src/Makefile.am, src/ggssapi.c, src/gss.c: Rename ggssapi to gss. 2003-05-01 Simon Josefsson * doc/.cvsignore, src/.cvsignore: [no log message] 2003-05-01 Simon Josefsson * doc/gss.texi: Add. 2003-05-01 Simon Josefsson * doc/ggssapi.texi, doc/gss.texi: Rename to gss.texi. 2003-05-01 Simon Josefsson * tests/Makefile.am: Fix library name. 2003-05-01 Simon Josefsson * src/Makefile.am: Rename ggssapi to gss. 2003-05-01 Simon Josefsson * lib/Makefile.am: Rename library to libgss.*. 2003-05-01 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-01 Simon Josefsson * doc/Makefile.am: Typo. 2003-05-01 Simon Josefsson * doc/gdoc: Escape { and }. 2003-05-01 Simon Josefsson * doc/.cvsignore, lib/.cvsignore: [no log message] 2003-05-01 Simon Josefsson * lib/Makefile.am: Add deps. Fix indent. 2003-05-01 Simon Josefsson * lib/internal.h: Include inttypes/stdint. Add hidden GSS structures. 2003-05-01 Simon Josefsson * lib/cred.c: Credential functions. 2003-05-01 Simon Josefsson * lib/context.c: Context functions. 2003-05-01 Simon Josefsson * lib/misc.c: Miscellaneous functions. 2003-05-01 Simon Josefsson * lib/msg.c: Per-message functions. 2003-05-01 Simon Josefsson * lib/name.c: Name manipulating functions. 2003-05-01 Simon Josefsson * lib/oid.c: Static OID definitions. 2003-05-01 Simon Josefsson * lib/obsolete.c: GSSAPI v1 bindings. 2003-05-01 Simon Josefsson * lib/gssapi.h: Fix prototypes (RFC is buggy). Indent. 2003-04-30 Simon Josefsson * lib/.cvsignore: [no log message] 2003-04-30 Simon Josefsson * lib/Makefile.am, lib/error.c: Add. 2003-04-30 Simon Josefsson * .cvsignore: Add. 2003-04-30 Simon Josefsson * po/LINGUAS: Empty, until we have something to translate. 2003-04-30 Simon Josefsson * lib/internal.h: Include gssapi.h too. 2003-04-30 Simon Josefsson * lib/gssapi.h: Replace cvs log with referral to ChangeLog. 2003-04-30 Simon Josefsson * lib/gssapi.h: Add CVS log to comment. 2003-04-30 Simon Josefsson * lib/gssapi.h: Add copying conditions. Include limits.h. 2003-04-30 Simon Josefsson * lib/gssapi.h: Never use xom.h. Define gss_ctx_id_t, gss_cred_id_t, gss_name_t, and gss_uint32. Fix routine errors. 2003-04-30 Simon Josefsson * lib/gssapi.h: Verbatim from RFC. 2003-04-30 Simon Josefsson * lib/Makefile.am: Add ggssapi.h. 2003-04-30 Simon Josefsson * doc/ggssapi.texi: Add. Fix links. 2003-04-30 Simon Josefsson * doc/Makefile.am: Add dep. 2003-04-30 Simon Josefsson * configure.ac: Build lib/ggssapi.h. 2003-04-30 Simon Josefsson * lib/.cvsignore, lib/gettext.h, lib/ggssapi.h.in, lib/internal.h, m4/.cvsignore, po/.cvsignore, po/LINGUAS, po/Makevars, po/POTFILES.in, po/ggssapi.pot, po/sv.po, src/.cvsignore: Add. 2003-04-30 Simon Josefsson * configure.ac: Don't build doc/reference/Makefile. 2003-04-30 Simon Josefsson * COPYING, m4/Makefile.am: Add. 2003-04-30 Simon Josefsson * configure.ac: Remove AC_REPLACE_FUNCS() until we know they are required. 2003-04-30 Simon Josefsson * Initial import, empty dummy project. ----- Copyright (C) 2003-2011 Simon Josefsson Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved. gss-1.0.2/po/0000755000000000000000000000000011663555055007706 500000000000000gss-1.0.2/po/quot.sed0000644000000000000000000000023111663554673011314 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g gss-1.0.2/po/fr.gmo0000644000000000000000000002007611663554722010746 00000000000000@Yh4(,0D*u.# &? *f   = $ #) M i ( (   I ;b ; @  3 T Qt  + 9 "M p m 3 &**Q9|'/-'<&d ')1G"X!{1g87L$i15(<W-o$&;&BiH(6&2(Y)-(O!<q<D0*Oz] L%Sr)s=y,+5$F)k.(-2N/c'2%)@;j%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: GNU gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2010-12-21 10:59+0100 Last-Translator: Nicolas Provost Language-Team: French Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Erreur appel |Routine erreur| Infos supplmentaires | | -h, --help Affiche l'aide et quitte. -V, --version Affiche la version et quitte. -l, --list-mechanisms Liste des infos sur les mcanismes disponibles dans un format humainement comprhensible. -m, --major=LONG Dcrit un code d'erreur d'tat principal. -q, --quiet Opre en silence (non par dfaut). Une rfrence tait invalideUn jeton antrieur a dj t traitUn paramtre tait mal formUn paramtre requis l'entre n'a pas pu tre luUn paramtre requis la sortie n'a pas pu tre critUn nom fourni tait de type non supportUn jeton a un MIC invalideUn jeton tait invalideUn jeton attendu par message n'a pas t reuUn nom invalide a t fourniUn code d'tat invalide a t fourniUn mcanisme non support tait requisTentative d'utilisation d'un contexte incomplet de scuritL'authentificateur n'a pas de sous-clLe tampon est de taille erroneInterface en ligne de commande GSS, pour dtailler les codes d'erreur. Le contexte est dj compltement tabliImpossible d'allouer le tampon de donnes gss_buffer_tLa cache des rfrences n'a pas de TGTL'usage du type de rfrence est inconnuGSS-API code majeur d'tat %ld (0x%lx). Une liaison incorrecte de canal a t fournieLongueur invalide du champ dans le jetonMcanisme Kerberos V5 GSS-APILes arguments obligatoires des options longues le sont aussi pour les courtes. Erreur d'appel masque %ld (0x%lx) dcal dans %ld (0x%lx): Erreur routine masque %ld (0x%lx) dcal dans %ld (0x%lx): Infos supplmentaires masques %ld (0x%lx) dcal dans %ld (0x%lx): Message de contexte non valideAucun @ dans la chane du nom SERVICE-NAMEAucun contexte n'a t tabliAucune rfrence n'a t fournie ou les rfrences n'taient pas disponibles ou inaccessiblesAucune erreurAucune erreur Pas d'erreur KRB5Aucun nom principal dans la table des cls ne concorde avec le nom recherchLe nom principal dans le cache des rfrences ne concorde pas avec le nom recherchSTRING-UID-NAME ne contient aucun chiffreLe contexte a expirLa fonction gss_init_sec_context() ou gss_accept_sec_context() doit tre appelle nous pour complter la fonctionL'opration est interdite par la politique locale de scuritL'opration ou l'option n'est pas disponibleLe nom fourni n'est pas un nom de mcanismeLa qualit de protection requise ne peut tre fournieLes rfrences fournies ont expiresL'lment de rfrence requis existe djLe jeton est le duplicata d'un jeton prcdentLa priode de validit du jeton a expirEssayer `%s --help' pour plus d'information. UID ne peut permettre d'identifier le nom d'usagerErreur KRB5 inconnueLa qualit de protection spcifie est inconnueType de signature inconnu dans le jetonErreur non spcifie dans le mcanisme sous-jacentUsage : %s OPTIONS... Erreur de validationchec d'affichage du code d'tat (%d)chec de rcupration des mcanismes (%d)impossible d'obtenir des informations sur le mcanisme (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.2/po/it.gmo0000644000000000000000000002025211663554722010747 00000000000000@Yh4(,0D*u.# &? *f   = $ #) M i ( (   I ;b ; @  3 T Qt  + 9 "M p m 3 &**Q9|'/-'<&d ')1G"X!{1g'4H+g69-  No1#./ 6<&s!Q*&9+`.46''!OTqDC FO!+$a  ky:M/$Tvk<+-K;y*/+,<-i.#1!Sg"}-7 %845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss-1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2010-12-02 18:21+0100 Last-Translator: Sergio Zanchetta Language-Team: Italian Language: it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural= (n != 1) MSB LSB +----------------------+---------------------+------------------------------+ | Errore di chiamata | Errore di routine | Informazioni aggiuntive | | -h, --help Stampa questo aiuto ed esce. -V, --version Stampa la versione ed esce. -l, --list-mechanisms Elenca le informazioni sui meccanismi supportati in forma leggibile. -m, --major=LONG Descrive un codice di errore "major status". -q, --quiet Silent operation (default=off). Una credenziale non era validaUn token successivo è già stato elaboratoUn parametro era malformatoUn parametro di input necessario non può essere lettoUn parametro di output necessario non può essere scrittoUn nome fornito era di un tipo non supportatoUn token aveva un MIC non validoUn token non era validoUn token per-message atteso non è stato ricevutoÈ stato fornito un nome non validoÈ stato fornito un codice di stato non validoÈ stato richiesto un meccanismo non supportatoTentativo d'uso di un contesto di sicurezza incompletoL'autenticatore non ha una sottochiaveIl buffer è di dimensione errataInterfaccia a riga di comando per GSS, usata per illustrare i codici di errore. Il contesto è già completamente definitoImpossibile allocare dati gss_buffer_tLa cache delle credenziali non contiene TGTIl tipo d'uso delle credenziali è sconosciutoCodice di stato principale %ld (0x%lx) di GSS-API. Sono state fornite associazioni di canale non corretteLunghezza di campo non valida nel tokenMeccanismo GSS-API di Kerberos V5Gli argomenti obbligatori per le opzioni lunghe lo sono anche per le opzioni corte. Errore della chiamata nascosta %ld (0x%lx) spostato in %ld (0x%lx): Errore della routine nascosta %ld (0x%lx) spostato in %ld (0x%lx): Informazione aggiuntiva nascosta %ld (0x%lx) spostata in %ld (0x%lx): Contesto del messaggio non validoNessun @ nella stringa di nome SERVICE-NAMENon è stato definito alcun contestoNon è stata fornita alcuna credenziale oppure le credenziali erano indisponibili o inaccessibiliNessun erroreNessun errore Nessun errore krb5Nessun principal nel keytab corrisponde al nome desideratoIl principal nella cache delle credenziali non corrisponde al nome desideratoSTRING-UID-NAME contiene caratteri non numericiIl contesto è scadutoLa funzione gss_init_sec_context() oppure gss_accept_sec_context() deve essere chiamata di nuovo per essere completataL'operazione è proibita dalle politiche di sicurezza localiL'operazione o l'opzione non è disponibileIl nome fornito non era un nome di meccanismoLa qualità di protezione richiesta non può essere fornitaLe credenziali di riferimento sono scaduteL'elemento di credenziale richiesto esiste giàIl token era un duplicato di uno precedenteIl periodo di validità del token è scadutoUsare "%s --help" per maggiori informazioni. UID non risolve il nome utenteErrore krb5 sconosciutoQualità di protezione specificata sconosciutaTipo di firma sconosciuto nel tokenErrore non specificato nel meccanismo sottostanteUso: %s OPZIONI... Errore di validazionedisplaying status code failed (%d)segnalazione del meccanismo non riuscita (%d)richiesta informazioni sul meccanismo non riuscita (%d)| +----------------------+---------------------+------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.2/po/eo.po0000644000000000000000000002243711663555055010601 00000000000000# Esperanto translation. # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Felipe Castro , 2011. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2011-03-13 13:15-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Mekanismo Kerberos V5 GSS-API" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Bezonata eniga parametro ne povis esti legata" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Bezonata eliga parametro ne povis esti skribata" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parametro estis misformata" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Nesubtenata mekanismo estis petata" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Malvalida nomo estis donata" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Donata nomo estis el nesubtenata tipo" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Malĝusta kanal-ligoj estis donataj" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Malvalita stat-kodo estis donata" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Ĵetono havis malvalidan MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Neniu legitimilo estis donata, aŭ la legitimiloj estis nedisponeblaj aŭ " "neatingeblaj" #: lib/error.c:61 msgid "No context has been established" msgstr "Neniu kunteksto estas starigita" #: lib/error.c:63 msgid "A token was invalid" msgstr "Ĵetono estis malvalida" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Legitimilo estis malvalida" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "La referencitaj legitimiloj senvalidiĝis" #: lib/error.c:69 msgid "The context has expired" msgstr "La kunteksto senvalidiĝis" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Nespecifita eraro en implicita mekanismo" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "La peto kvalito-de-protekto ne povis esti provizata" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "La operacio estas malpermesata de loka sekurec-politiko" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "La operacio aŭ elekto ne estas disponebla" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "La petita legitimila elemento jam ekzistas" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "La donita nomo ne estis mekanismo-nomo" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "La funkcio gss_init_sec_context() aŭ gss_accept_sec_context() devas esti " "vokata refoje por plenumigi ĝian funkcion" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "La ĵetono estis ripetaĵo de pli frua ĵetono" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "La valideca templimo de ĵetono finiĝis" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Posta ĵetono jam estas procezita" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Atendita po-mesaĝa ĵetono ne estis ricevata" #: lib/error.c:312 msgid "No error" msgstr "Neniu eraro" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Neniu @ en nom-ĉeno SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME enhavas ne-ciferojn" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID ne solviĝas al uzantnomo" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Validiga eraro" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Ni ne povis rezervi datumaron gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Mesaĝo-kunteksto estas malvalida" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Bufro havas malĝustan grandon" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Legitimila uzad-tipo estas nekonata" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Nekonata kvalito de protekto estis indikata" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "Ĉefo en legitimila kaŝmemoro ne kongruas al dezirata nomo" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Neniu ĉefo en keytab kongruas al dezirata nomo" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Legitimila kaŝmemoro havas neniu TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Aŭtentikanto havas neniun subkey" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Kunteksto jam estas plene starigita" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Nekonata subskriba tipo en ĵetono" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Malvalida kampo-longo en ĵetono" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Provo uzi malkompletan sekurecan kuntekston" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Neniu eraro krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Nekonata eraro krb5" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Provu '%s --help' por pli da informoj.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Uzado: %s ELEKTILOJ...\n" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Komand-linia interfaco al GSS, uzata por klarigi erar-kodojn.\n" "\n" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Devigaj argumentoj por longaj elektiloj estas same devigaj por mallongaj.\n" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Montri tiun ĉi helpon kaj eliri.\n" " -V, --version Montri version kaj eliri.\n" " -l, --list-mechanisms\n" " Listigi informon pri subtenataj mekanismoj\n" " laŭ hom-legebla formo.\n" " -m, --major=LONG Priskribi 'plejgrav-statan' erar-kodan valoron.\n" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Silenta funkciado (apriore=ne).\n" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API plejgrava stat-kodo %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Vok-Eraro | Procedur-Eraro | Kroma Informo |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bito 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskita procedura eraro %ld (0x%lx) ŝoviĝis al %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, c-format msgid "displaying status code failed (%d)" msgstr "montrigo de stat-kodo malsukcesis (%d)" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskita vok-eraro %ld (0x%lx) ŝoviĝis al %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskita kroma informo %ld (0x%lx) ŝoviĝis al %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Neniu eraro\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "indikado de mekanismoj malsukcesis (%d)" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "petado de informo pri mekanismo malsukcesis (%d)" gss-1.0.2/po/Makevars0000644000000000000000000000341711663554717011333 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Simon Josefsson # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = bug-gss@gnu.org # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = gss-1.0.2/po/en@quot.gmo0000644000000000000000000001727711663554722011763 00000000000000@Yh4(,0D*u.# &? *f   = $ #) M i ( (   I ;b ; @  3 T Qt  + 9 "M p m 3 &**Q9|'/-'<&d ')1G"X!{1ig!4((Q,k0*.#R#o&*=$X#} ((0NIl;;@.o Q # -+;9g"m3J&~*9' /2-b'* '?)_"!1'%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.2 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2011-11-25 00:57+0100 Last-Translator: Automatically generated Language-Team: none Language: en@quot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a ‘major status’ error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry ‘%s --help’ for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.2/po/fi.gmo0000644000000000000000000002016111663554722010730 00000000000000@Yh4(,0D*u.# &? *f   = $ #) M i ( (   I ;b ; @  3 T Qt  + 9 "M p m 3 &**Q9|'/-'<&d ')1G"X!{1g C]+{ *0+$"Ps;#!-0^}H!"U)*&)($YCEGE+q,] 7 DRWdTBTyl4'&C#j$-5*)B!l#,4*F*U"1%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2010-11-16 17:15+0200 Last-Translator: Jorma Karvonen Language-Team: Finnish Language: fi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Kutsuvirhe | Rutiinivirhe | Lisätietoja | | -h, --help Tulosta opaste ja poistu. -V, --version Tulosta versio ja poistu. -l, --list-mechanisms Luettelotiedot tuetuista mekanismeista ihmisluettavassa muodossa. -m, --major=LONG Kuvaa ”major status”-virhekoodiarvo. -q, --quiet Hiljainen toiminta (oletus=pois käytöstä). Valtuustieto oli virheellinenJälkimmäinen merkkijono on jo prosessoituParametri on väärän muotoinenVaadittua syöteparametriä ei voitu lukeaVaadittua tulosteparametriä ei voitu kirjoittaaToimitettu nimi oli tyyppiä, jota ei tuetaMerkkijonolla oli virheellinen MICMerkkijono oli virheellinenOdotettua merkkijonokohtaista viestiä ei ole vastaanotettuToimitettiin virheellinen nimiToimitettiin virheellinen tilakoodiKutsuttiin tukematonta mekanismiaYritys käyttää vaillinaista turvakonteksiaTodentajalla ei ole aliavaintaPuskuri on väärän kokoinenKomentorivirajapinta GSS:ään, käytetty selittämään virhekoodeja. Konteksi on jo täysin perustettuEi voitu varata gss_buffer_t-dataaValtuustietovälimuistissa ei ole Ticket-Granting Ticket-sanomaa todennuspalvelimeltaValtuustiedon käyttötyyppi on tuntematonGSS-API major-tilakoodi %ld (0x%lx). Toimitettiin virheellisiä kanavasidoksiaVirheellinen kenttäpituus merkkijonossaKerberos V5 GSS-API -mekanismiPakolliset argumentit pitkille valitsimille ovat pakollisia myös lyhyille valitsimille. Peitetty kutsuvirhe %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx): Peitetty rutiinivirhe %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx): Peitetty lisätieto %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx): Viestikonteksi on virheellinenEi @-merkkiä PALVELU-NIMI-nimimerkkijonossaKonteksia ei ole perustettuValtuustietoja ei toimitettu, tai valtuustiedot eivät olleet käytettävissä tai saatavillaEi virhettäEi virhettä Ei krb5-virhettäYksikään todennettu entiteetti keytab-tiedostossa ei täsmännyt halutun nimen kanssaTodennettu entiteetti valtuustietovälimuistissa ei täsmännyt halutun nimen kanssaMERKKIJONO-UID-NIMI-merkkijono sisältää muutakin kuin numeroitaKonteksi on vanhentunutFunktio gss_init_sec_context() tai funktio gss_accept_sec_context() on kutsuttava uudelleen funktion saamiseksi valmiiksiPaikallinen turvakäytäntö on kieltänyt toiminnonToiminto tai valitsin ei ole saatavillaToimitettu nimi ei ollut mekanisminimiEi voitu tarjota turvatasopyyntöäViitevaltuustiedot ovat vanhentuneetPyydetty valtuustietoelementti on jo olemassaMerkkijono oli aikaisemman merkkijonon kaksoiskappaleMerkkijonon kelpoisuuskausi on vanhentunutLisätietoja ”%s --help”-komennolla. UID ei ratkaise käyttäjänimeäTuntematon krb5-virheTuntematon suojelutaso määriteltyTuntematon allekirjoitustyyppi merkkijonossaMäärittelemätön virhe alla olevassa mekanismissaKäyttö: %s VALITSIMET... Kelpuutusvirhetilakoodin näyttäminen epäonnistui (%d)osoitusmekanismi epäonnistui (%d)tietojen kysyminen mekanismista epäonnistui (%d)| +-----------------+-----------------+---------------------------------+ Bitti 31 24 23 16 15 0 gss-1.0.2/po/en@boldquot.po0000644000000000000000000002501511663554722012445 00000000000000# English translations for gss package. # Copyright (C) 2011 Simon Josefsson # This file is distributed under the same license as the gss package. # Automatically generated, 2011. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.2\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2011-11-25 00:57+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en@boldquot\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API mechanism" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "A required input parameter could not be read" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "A required output parameter could not be written" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "A parameter was malformed" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "An unsupported mechanism was requested" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "An invalid name was supplied" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "A supplied name was of an unsupported type" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Incorrect channel bindings were supplied" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "An invalid status code was supplied" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "A token had an invalid MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" #: lib/error.c:61 msgid "No context has been established" msgstr "No context has been established" #: lib/error.c:63 msgid "A token was invalid" msgstr "A token was invalid" #: lib/error.c:65 msgid "A credential was invalid" msgstr "A credential was invalid" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "The referenced credentials have expired" #: lib/error.c:69 msgid "The context has expired" msgstr "The context has expired" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Unspecified error in underlying mechanism" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "The quality-of-protection requested could not be provided" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "The operation is forbidden by local security policy" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "The operation or option is unavailable" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "The requested credential element already exists" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "The provided name was not a mechanism name" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "The token was a duplicate of an earlier token" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "The token's validity period has expired" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "A later token has already been processed" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "An expected per-message token was not received" #: lib/error.c:312 msgid "No error" msgstr "No error" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "No @ in SERVICE-NAME name string" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME contains nondigits" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID does not resolve to username" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Validation error" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Couldn't allocate gss_buffer_t data" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Message context invalid" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Buffer is the wrong size" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Credential usage type is unknown" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Unknown quality of protection specified" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "Principal in credential cache does not match desired name" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "No principal in keytab matches desired name" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Credential cache has no TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Authenticator has no subkey" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Context is already fully established" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Unknown signature type in token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Invalid field length in token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Attempt to use incomplete security context" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "No krb5 error" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Unknown krb5 error" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Try ‘%s --help’ for more information.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Usage: %s OPTIONS...\n" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Command line interface to GSS, used to explain error codes.\n" "\n" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Mandatory arguments to long options are mandatory for short options too.\n" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a ‘major status’ error code value.\n" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Silent operation (default=off).\n" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API major status code %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, c-format msgid "displaying status code failed (%d)" msgstr "displaying status code failed (%d)" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "No error\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "indicating mechanisms failed (%d)" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "inquiring information about mechanism failed (%d)" gss-1.0.2/po/zh_CN.po0000644000000000000000000002275511663554723011203 00000000000000# Chinese translations for gss package. # Copyright (C) 2008 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Ji ZhengYu , 2008. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2011-01-12 21:21中国标准时间\n" "Last-Translator: Ji ZhengYu \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API 机制" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "无法读取所需的输入参数" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "无法写入所需的输出参数" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "参数形式错误" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "请求了一个不支持的机制" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "提供了无效的名称" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "所提供的名字是一种不支持的类型" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "提供了错误的绑定通道" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "提供了无效的状态码" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "有个标识拥有无效的 MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "未提供证书,或是证书不可用或无法访问" #: lib/error.c:61 msgid "No context has been established" msgstr "尚未创建内容" #: lib/error.c:63 msgid "A token was invalid" msgstr "标识无效" #: lib/error.c:65 msgid "A credential was invalid" msgstr "证书无效" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "关联证书过期了" #: lib/error.c:69 msgid "The context has expired" msgstr "内容过期了" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "底层机制中有不明错误" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "无法提供所需要的保护等级" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "本地安全机制禁止了此项操作" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "此操作或选项不可用" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "所需证书组件已经存在" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "所提供的名称不是保护机制的名称" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "要完成它的功能必须再次调用 gss_init_sec_context() 或 gss_accept_sec_context()" "函数" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "此标识是一个更早期标识的镜像" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "标识已超过了有效期" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "已经处理了一个较新的标识" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "所需的 per-message 标识不被接受" #: lib/error.c:312 msgid "No error" msgstr "没有错误" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "在 SERVICE-NAME 字符串中没有 @" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME 包含非数字字符" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID 无法解析为用户名" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "验证错误" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "无法分配 gss_buffer_t data" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "信息内容无效" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "缓冲区大小错误" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "证书使用类型未知" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "所指定的保护等级未知" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "证书缓存中的委托人与所要的名字不匹配" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "keytab 中的委托人没有一个与所要的名字匹配的" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "证书缓存无 TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "验证方没有子密钥" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "内容已经完全创建好了" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "标识中的签名类型未知" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "标识中的域长度无效" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "尝试使用不完整的安全内容" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "错误: 找不到 krb5 服务器" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "错误: 未知的 krb5 服务器" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "尝试用‘%s --help’来获取更多信息。\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "用法: %s 选项...\n" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "GSS 命令行接口,用于解释错误代码。\n" "\n" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "长选项所必须的参数短选项也是必须的。\n" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help 显示帮助并退出\n" " -V, --version 显示版本信息并退出\n" " -l, --list-mechanisms\n" " 以易读的形式\n" " 列出所支持的加密方式信息\n" " -m, --major=LONG 描述一个主状态错误代码\n" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet 操作时无显示(默认关闭)\n" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API 主状态码 %ld (0x%lx)。\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | 调用错误 | 路由错误 | 备注信息 |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "位元31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "隐蔽的路由错误 %ld (0x%lx) 被移入 %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, c-format msgid "displaying status code failed (%d)" msgstr "显示状态码时出错 (%d)" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "隐蔽的调用错误 %ld (0x%lx) 被移入 %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "隐蔽的备注信息错误 %ld (0x%lx) 被移入 %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "没有错误\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "正显示加密方式时出错 (%d)" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "正查寻加密方式信息时出错 (%d)" #~ msgid "" #~ " -h, --help Print help and exit\n" #~ " -V, --version Print version and exit\n" #~ " -m, --major=LONG Describe a `major status' error code vaue in plain " #~ "text.\n" #~ " -q, --quiet Silent operation (default=off)\n" #~ msgstr "" #~ " -h, --help 打印帮助并退出\n" #~ " -V, --version 打印版本并退出\n" #~ " -m, --major=LONG 以普通文件描述`主状态错误代码。\n" #~ " -q, --quiet 无输出模式(默认=off)\n" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: 缺少参数\n" gss-1.0.2/po/LINGUAS0000644000000000000000000000007311662451204010641 00000000000000en@boldquot en@quot eo fi fr ga id it pl ro sk sv vi zh_CN gss-1.0.2/po/gss.pot0000644000000000000000000001422511663554722011152 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Simon Josefsson # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: gss 1.0.2\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" #: lib/error.c:61 msgid "No context has been established" msgstr "" #: lib/error.c:63 msgid "A token was invalid" msgstr "" #: lib/error.c:65 msgid "A credential was invalid" msgstr "" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "" #: lib/error.c:69 msgid "The context has expired" msgstr "" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "" #: lib/error.c:312 msgid "No error" msgstr "" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, c-format msgid "displaying status code failed (%d)" msgstr "" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" gss-1.0.2/po/vi.po0000644000000000000000000002475011663554723010615 00000000000000# Vietnamese Translation for GSS. # Copyright © 2010 Free Software Foundation, Inc. # Copyright © 2010 Simon Josefsson (msgid) # This file is distributed under the same license as the gss package. # Clytie Siddall , 2005-2010. # msgid "" msgstr "" "Project-Id-Version: gss 0.1.5\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2010-03-25 22:34+0930\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: LocFactoryEditor 1.8\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Cơ chế GSS-API Kerberos pb5" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Một tham số nhập cần thiết không thể đọc được" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Một tham số xuất cần thiết không thể ghi được" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Có một tham số dạng sai" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Đã yêu cầu một cơ chế không được hỗ trợ" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Đã cung cấp một tên không hợp lệ" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Đã cung cấp một tên có kiểu không được hỗ trợ" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Đã cung cấp các tổ hợp kênh không đúng" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Đã cung cấp một mã trạng thái không hợp lệ" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Có một hiệu bài với MIC không hợp lệ" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Chưa cung cấp thông tin xác thực, hoặc thông tin xác thực chưa sẵn sàng, " "hoặc không thể được truy cập" #: lib/error.c:61 msgid "No context has been established" msgstr "Chưa thiết lập ngữ cảnh" #: lib/error.c:63 msgid "A token was invalid" msgstr "Có một hiệu bài không hợp lệ" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Có thông tin xác thực không hợp lệ" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Đã tham chiếu đến thông tin xác thực đã hết hạn" #: lib/error.c:69 msgid "The context has expired" msgstr "Ngữ cảnh đã hết hạn" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Lỗi không rõ trong cơ chế cơ sở" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Không thể cung cấp mức bảo vệ (quality-of-protection) yêu cầu" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Thao tác bị chính sách bảo mật cục bộ cấm" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Thao tác hay tùy chọn không sẵn sàng" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Đã yêu cầu một phần tử thông tin xác thực đã có" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Đã cung cấp một tên không phải tên cơ chế" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Hàm « gss_init_sec_context() » hay « gss_accept_sec_context() » phải được " "gọi lần nữa để hoàn tất chức năng" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Hiệu bài là bản sao của một hiệu bài nằm trước" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Thời gian hợp lệ của hiệu bài đã hết hạn" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Một hiệu bài nằm sau đã được xử lý" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Chưa nhận một hiệu bài từng thông điệp mong đợi" #: lib/error.c:312 msgid "No error" msgstr "Không có lỗi" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Không có dấu @ trong chuỗi SERVICE-NAME (tên dịch vụ)" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME (chuỗi-tên-UID) chứa ký tự khác chữ số" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID không giải quyết thành tên người dùng" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Lỗi hợp lệ hoá" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Không thể phân cấp dữ liệu « gss_buffer_t »" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Ngữ cảnh thông điệp không hợp lệ" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Vùng đệm kích cỡ sai" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Không rõ kiểu sử dụng thông tin xác thực" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Đã ghi rõ mức bảo vệ không rõ" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Điều chính trong bộ nhớ tạm thông tin xác thực không tương ứng với tên yêu " "cầu" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Không có điều chính trong keytab mà tương ứng với tên yêu cầu" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Bộ nhớ tạm thông tin xác thực không có TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Nhà xác thực không có khoá phụ" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Ngữ cảnh đã được thiết lập đầy đủ" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Không rõ kiểu chữ ký trong hiệu bài" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Chiều dài trường không hợp lệ trong hiệu bài" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Đã thử sử dụng ngữ cảnh bảo mật chưa hoàn tất" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Không có lỗi krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Lỗi krb5 không rõ" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Hãy thử câu lệnh trợ giúp « %s --help » để tìm thêm thông tin.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Sử dụng: %s TÙY_CHỌN...\n" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Giao diện dòng lệnh vào GSS, dùng để giải thích mã lỗi.\n" "\n" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Mọi đối số bắt buộc phải sử dụng với tùy chọn dài cũng bắt buộc với tùy chọn " "ngắn.\n" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API mã trạng thái chính %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Lỗi gọi | Lỗi hàm | Thông tin bổ sung |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Lỗi hàm có mặt nạ %ld (0x%lx) đã rời vào %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, fuzzy, c-format msgid "displaying status code failed (%d)" msgstr "%s: lỗi hiển thị mã trạng thái\n" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Lỗi gói có mặt nạ %ld (0x%lx) đã rời vào %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Thông tin bổ sung có mặt nạ %ld (0x%lx) đã rời vào %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Không có lỗi\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #~ msgid "" #~ " -h, --help Print help and exit\n" #~ " -V, --version Print version and exit\n" #~ " -m, --major=LONG Describe a `major status' error code vaue in plain " #~ "text.\n" #~ " -q, --quiet Silent operation (default=off)\n" #~ msgstr "" #~ " -h, --help Hiển thị trợ giúp, sau đó thoát\n" #~ " -V, --version Hiển thị số thứ tự phiên bản, sau đó thoát\n" #~ " -m, --major=DÀI Diễn tả một giá trị mã lỗi « trạng thái chính » bằng " #~ "nhập thô.\n" #~ " -q, --quiet Thao tác mà không xuất chi tiết (mặc định là bị tắt)\n" gss-1.0.2/po/Makevars.in0000644000000000000000000000343611361023201011707 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE)@PO_SUFFIX@ # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Simon Josefsson # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = @PACKAGE_BUGREPORT@ # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = gss-1.0.2/po/stamp-po0000644000000000000000000000001211663554723011303 00000000000000timestamp gss-1.0.2/po/en@quot.header0000644000000000000000000000226311663554672012422 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # gss-1.0.2/po/sk.po0000644000000000000000000002151511663554722010607 00000000000000# Translation of gss package to Slovak. # Copyright (C) 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Ivan Masár , 2007. # msgid "" msgstr "" "Project-Id-Version: gss 0.0.22\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2007-09-14 23:40+0100\n" "Last-Translator: Ivan Masár \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Požadovaný vstupný parameter nebolo možné načítať" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Požadovaný výstupný parameter nebolo možné zapísať" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Formát parametra bol chybný" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Bol vyžiadaný nepodporovaný mechanizmus" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Bol dodaný neplatný názov" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Dodaný názov bol nepodporovaného typu" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Boli dodané nesprávne väzby na kanál" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Bol dodaný neplatný stavový kód" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Token mal nesprávny MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "Poverenie nebolo dodané, dostupné alebo prístupné" #: lib/error.c:61 msgid "No context has been established" msgstr "Nebol zavedený kontext" #: lib/error.c:63 msgid "A token was invalid" msgstr "Token bol neplatný" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Poverenie bolo neplatné" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Poverenie, na ktoré bolo odkazované, vypršalo" #: lib/error.c:69 msgid "The context has expired" msgstr "Kontext vypršal" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Nešpecifikovaná chyba v použitom mechanizme" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "" "Nebolo možné poskytnúť požadovanú kvalitu-ochrany (quality-of-protection)" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Operáciu zakazuje lokálna bezpečnostná politika" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Operácia alebo voľba nie je dostupná" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Požadovaný prvok poverenia už existuje" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Poskytnutý názov nebol názvom mechanizmu" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Funkciu gss_init_sec_context() alebo gss_accept_sec_context() je potrebné " "zavolať znova, aby dokončila svoju úlohu" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Token bol duplikátom skoršieho tokenu" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Platnosť tokenu vypršala" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Už bol spracovaný neskorší token" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Očakávaný token-na-správu nebol obdržaný" #: lib/error.c:312 msgid "No error" msgstr "Žiadna chyba" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "V reťazci SERVICE-NAME chýba @" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME obsahuje znaky, ktoré nie sú číslice" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID nie je možné preložiť na používateľské meno" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Chyba pri overovaní" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Nebolo možné alokovať údaje gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Neplatný kontext správy" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "CHybná veľkosť bufera" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Typ použitia oprávnenia je neznámy" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Bola zadaná neznáma kvalita ochrany" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Zmocniteľ vo vyrovnávacej pamäti oprávnení sa nezhoduje s požadovaným menom" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Zmocniteľ v keytab sa zhoduje s požadovaným menom" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Vyrovnávacia pamäť oprávnení nemá TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Autentifikátor nemá podkľúč" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Kontext je už úplne zavedený" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Neplatný typ podpisu v tokene" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Neplatná dĺžka poľa v tokene" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Pokus o použitie neúplného bezpečnostného kontextu" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Žiadna chyba krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Neznáma chyba krb5" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Skúste viac informácií pomocou „%s --help“.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API hlavné, stavový kód %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Chyba volania | Chyba rutiny | Doplňujúce informácie |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskovaná chyba rutiny %ld (0x%lx) posunutá na %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, fuzzy, c-format msgid "displaying status code failed (%d)" msgstr "%s: zobrazenie stavového kódu zlyhalo\n" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskovaná chyba volania %ld (0x%lx) posunutá na %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskované doplňujúce informácie %ld (0x%lx) posunuté na %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Žiadna chyba\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: chýba parameter\n" gss-1.0.2/po/remove-potcdate.sin0000644000000000000000000000066011663554673013446 00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } gss-1.0.2/po/Rules-quot0000644000000000000000000000340011663554672011632 00000000000000# Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header gss-1.0.2/po/en@boldquot.header0000644000000000000000000000247111663554672013264 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # gss-1.0.2/po/sk.gmo0000644000000000000000000001461011663554722010751 000000000000007I(,0!*R}.#&*Cn$# ()(R{;;@ R j  Q    + 9J "  m 3- &a * 9 ' / -E 's &  '  )> h y ^pZ$s9:(+Tm.#*7 Tu,+%--([ ?>J$o 5 4(R]8v3q'+O0I)z'37S%g.(*43+.,$#6 5 " '10 2&% / -!7) MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeContext is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenMasked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismValidation error| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 0.0.22 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2007-09-14 23:40+0100 Last-Translator: Ivan Masár Language-Team: Slovak Language: sk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MSB LSB +-----------------+-----------------+---------------------------------+ | Chyba volania | Chyba rutiny | Doplňujúce informácie | | Poverenie bolo neplatnéUž bol spracovaný neskorší tokenFormát parametra bol chybnýPožadovaný vstupný parameter nebolo možné načítaťPožadovaný výstupný parameter nebolo možné zapísaťDodaný názov bol nepodporovaného typuToken mal nesprávny MICToken bol neplatnýOčakávaný token-na-správu nebol obdržanýBol dodaný neplatný názovBol dodaný neplatný stavový kódBol vyžiadaný nepodporovaný mechanizmusPokus o použitie neúplného bezpečnostného kontextuAutentifikátor nemá podkľúčCHybná veľkosť buferaKontext je už úplne zavedenýNebolo možné alokovať údaje gss_buffer_tVyrovnávacia pamäť oprávnení nemá TGTTyp použitia oprávnenia je neznámyGSS-API hlavné, stavový kód %ld (0x%lx). Boli dodané nesprávne väzby na kanálNeplatná dĺžka poľa v tokeneMaskovaná chyba volania %ld (0x%lx) posunutá na %ld (0x%lx): Maskovaná chyba rutiny %ld (0x%lx) posunutá na %ld (0x%lx): Maskované doplňujúce informácie %ld (0x%lx) posunuté na %ld (0x%lx): Neplatný kontext správyV reťazci SERVICE-NAME chýba @Nebol zavedený kontextPoverenie nebolo dodané, dostupné alebo prístupnéŽiadna chybaŽiadna chyba Žiadna chyba krb5Zmocniteľ v keytab sa zhoduje s požadovaným menomZmocniteľ vo vyrovnávacej pamäti oprávnení sa nezhoduje s požadovaným menomSTRING-UID-NAME obsahuje znaky, ktoré nie sú čísliceKontext vypršalFunkciu gss_init_sec_context() alebo gss_accept_sec_context() je potrebné zavolať znova, aby dokončila svoju úlohuOperáciu zakazuje lokálna bezpečnostná politikaOperácia alebo voľba nie je dostupnáPoskytnutý názov nebol názvom mechanizmuNebolo možné poskytnúť požadovanú kvalitu-ochrany (quality-of-protection)Poverenie, na ktoré bolo odkazované, vypršaloPožadovaný prvok poverenia už existujeToken bol duplikátom skoršieho tokenuPlatnosť tokenu vypršalaSkúste viac informácií pomocou „%s --help“. UID nie je možné preložiť na používateľské menoNeznáma chyba krb5Bola zadaná neznáma kvalita ochranyNeplatný typ podpisu v tokeneNešpecifikovaná chyba v použitom mechanizmeChyba pri overovaní| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.2/po/en@quot.po0000644000000000000000000002456311663554722011613 00000000000000# English translations for gss package. # Copyright (C) 2011 Simon Josefsson # This file is distributed under the same license as the gss package. # Automatically generated, 2011. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.2\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2011-11-25 00:57+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en@quot\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API mechanism" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "A required input parameter could not be read" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "A required output parameter could not be written" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "A parameter was malformed" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "An unsupported mechanism was requested" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "An invalid name was supplied" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "A supplied name was of an unsupported type" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Incorrect channel bindings were supplied" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "An invalid status code was supplied" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "A token had an invalid MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" #: lib/error.c:61 msgid "No context has been established" msgstr "No context has been established" #: lib/error.c:63 msgid "A token was invalid" msgstr "A token was invalid" #: lib/error.c:65 msgid "A credential was invalid" msgstr "A credential was invalid" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "The referenced credentials have expired" #: lib/error.c:69 msgid "The context has expired" msgstr "The context has expired" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Unspecified error in underlying mechanism" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "The quality-of-protection requested could not be provided" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "The operation is forbidden by local security policy" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "The operation or option is unavailable" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "The requested credential element already exists" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "The provided name was not a mechanism name" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "The token was a duplicate of an earlier token" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "The token's validity period has expired" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "A later token has already been processed" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "An expected per-message token was not received" #: lib/error.c:312 msgid "No error" msgstr "No error" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "No @ in SERVICE-NAME name string" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME contains nondigits" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID does not resolve to username" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Validation error" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Couldn't allocate gss_buffer_t data" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Message context invalid" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Buffer is the wrong size" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Credential usage type is unknown" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Unknown quality of protection specified" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "Principal in credential cache does not match desired name" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "No principal in keytab matches desired name" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Credential cache has no TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Authenticator has no subkey" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Context is already fully established" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Unknown signature type in token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Invalid field length in token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Attempt to use incomplete security context" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "No krb5 error" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Unknown krb5 error" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Try ‘%s --help’ for more information.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Usage: %s OPTIONS...\n" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Command line interface to GSS, used to explain error codes.\n" "\n" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Mandatory arguments to long options are mandatory for short options too.\n" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a ‘major status’ error code value.\n" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Silent operation (default=off).\n" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API major status code %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, c-format msgid "displaying status code failed (%d)" msgstr "displaying status code failed (%d)" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "No error\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "indicating mechanisms failed (%d)" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "inquiring information about mechanism failed (%d)" gss-1.0.2/po/vi.gmo0000644000000000000000000001725411663554723010762 00000000000000;O ( 2,L0y*.3#P&t*=$9#^ (( / IM ; ; @ P h  Q    + 9H "  m 3+ &_ * 9 ' / -C 'q &  ' )<f|%,2A;>}@1'/@W,9:A:'|I5 7@6x4/3:HvCC]M-@ ^$N:gC5S8,7?Kw@A@F9P4G(]-)/32.&6,4*;85 9-1 %7 + !($:"0)'# MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation error| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 0.1.5 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2010-03-25 22:34+0930 Last-Translator: Clytie Siddall Language-Team: Vietnamese Language: vi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Generator: LocFactoryEditor 1.8 MSB LSB +-----------------+-----------------+---------------------------------+ | Lỗi gọi | Lỗi hàm | Thông tin bổ sung | | Có thông tin xác thực không hợp lệMột hiệu bài nằm sau đã được xử lýCó một tham số dạng saiMột tham số nhập cần thiết không thể đọc đượcMột tham số xuất cần thiết không thể ghi đượcĐã cung cấp một tên có kiểu không được hỗ trợCó một hiệu bài với MIC không hợp lệCó một hiệu bài không hợp lệChưa nhận một hiệu bài từng thông điệp mong đợiĐã cung cấp một tên không hợp lệĐã cung cấp một mã trạng thái không hợp lệĐã yêu cầu một cơ chế không được hỗ trợĐã thử sử dụng ngữ cảnh bảo mật chưa hoàn tấtNhà xác thực không có khoá phụVùng đệm kích cỡ saiGiao diện dòng lệnh vào GSS, dùng để giải thích mã lỗi. Ngữ cảnh đã được thiết lập đầy đủKhông thể phân cấp dữ liệu « gss_buffer_t »Bộ nhớ tạm thông tin xác thực không có TGTKhông rõ kiểu sử dụng thông tin xác thựcGSS-API mã trạng thái chính %ld (0x%lx). Đã cung cấp các tổ hợp kênh không đúngChiều dài trường không hợp lệ trong hiệu bàiCơ chế GSS-API Kerberos pb5Mọi đối số bắt buộc phải sử dụng với tùy chọn dài cũng bắt buộc với tùy chọn ngắn. Lỗi gói có mặt nạ %ld (0x%lx) đã rời vào %ld (0x%lx): Lỗi hàm có mặt nạ %ld (0x%lx) đã rời vào %ld (0x%lx): Thông tin bổ sung có mặt nạ %ld (0x%lx) đã rời vào %ld (0x%lx): Ngữ cảnh thông điệp không hợp lệKhông có dấu @ trong chuỗi SERVICE-NAME (tên dịch vụ)Chưa thiết lập ngữ cảnhChưa cung cấp thông tin xác thực, hoặc thông tin xác thực chưa sẵn sàng, hoặc không thể được truy cậpKhông có lỗiKhông có lỗi Không có lỗi krb5Không có điều chính trong keytab mà tương ứng với tên yêu cầuĐiều chính trong bộ nhớ tạm thông tin xác thực không tương ứng với tên yêu cầuSTRING-UID-NAME (chuỗi-tên-UID) chứa ký tự khác chữ sốNgữ cảnh đã hết hạnHàm « gss_init_sec_context() » hay « gss_accept_sec_context() » phải được gọi lần nữa để hoàn tất chức năngThao tác bị chính sách bảo mật cục bộ cấmThao tác hay tùy chọn không sẵn sàngĐã cung cấp một tên không phải tên cơ chếKhông thể cung cấp mức bảo vệ (quality-of-protection) yêu cầuĐã tham chiếu đến thông tin xác thực đã hết hạnĐã yêu cầu một phần tử thông tin xác thực đã cóHiệu bài là bản sao của một hiệu bài nằm trướcThời gian hợp lệ của hiệu bài đã hết hạnHãy thử câu lệnh trợ giúp « %s --help » để tìm thêm thông tin. UID không giải quyết thành tên người dùngLỗi krb5 không rõĐã ghi rõ mức bảo vệ không rõKhông rõ kiểu chữ ký trong hiệu bàiLỗi không rõ trong cơ chế cơ sởSử dụng: %s TÙY_CHỌN... Lỗi hợp lệ hoá| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.2/po/fr.po0000644000000000000000000002343611663554722010605 00000000000000# Messages franais pour GNU gss. # Copyright 2010 Free Software Foundation, Inc. # Copyright (C) 2010 Simon Josefsson # This file is distributed under the same license as the gss package. # Michel Robitaille , traducteur depuis/since 1996. # Nicolas Provost , 2010. # msgid "" msgstr "" "Project-Id-Version: GNU gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2010-12-21 10:59+0100\n" "Last-Translator: Nicolas Provost \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Mcanisme Kerberos V5 GSS-API" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Un paramtre requis l'entre n'a pas pu tre lu" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Un paramtre requis la sortie n'a pas pu tre crit" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Un paramtre tait mal form" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Un mcanisme non support tait requis" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Un nom invalide a t fourni" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Un nom fourni tait de type non support" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Une liaison incorrecte de canal a t fournie" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Un code d'tat invalide a t fourni" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Un jeton a un MIC invalide" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Aucune rfrence n'a t fournie ou les rfrences n'taient pas disponibles " "ou inaccessibles" #: lib/error.c:61 msgid "No context has been established" msgstr "Aucun contexte n'a t tabli" #: lib/error.c:63 msgid "A token was invalid" msgstr "Un jeton tait invalide" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Une rfrence tait invalide" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Les rfrences fournies ont expires" #: lib/error.c:69 msgid "The context has expired" msgstr "Le contexte a expir" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Erreur non spcifie dans le mcanisme sous-jacent" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "La qualit de protection requise ne peut tre fournie" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "L'opration est interdite par la politique locale de scurit" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "L'opration ou l'option n'est pas disponible" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "L'lment de rfrence requis existe dj" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Le nom fourni n'est pas un nom de mcanisme" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "La fonction gss_init_sec_context() ou gss_accept_sec_context() doit tre " "appelle nous pour complter la fonction" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Le jeton est le duplicata d'un jeton prcdent" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "La priode de validit du jeton a expir" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Un jeton antrieur a dj t trait" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Un jeton attendu par message n'a pas t reu" #: lib/error.c:312 msgid "No error" msgstr "Aucune erreur" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Aucun @ dans la chane du nom SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME ne contient aucun chiffre" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID ne peut permettre d'identifier le nom d'usager" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Erreur de validation" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Impossible d'allouer le tampon de donnes gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Message de contexte non valide" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Le tampon est de taille errone" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "L'usage du type de rfrence est inconnu" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "La qualit de protection spcifie est inconnue" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Le nom principal dans le cache des rfrences ne concorde pas avec le nom " "recherch" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "" "Aucun nom principal dans la table des cls ne concorde avec le nom recherch" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "La cache des rfrences n'a pas de TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "L'authentificateur n'a pas de sous-cl" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Le contexte est dj compltement tabli" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Type de signature inconnu dans le jeton" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Longueur invalide du champ dans le jeton" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Tentative d'utilisation d'un contexte incomplet de scurit" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Pas d'erreur KRB5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Erreur KRB5 inconnue" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Essayer `%s --help' pour plus d'information.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Usage : %s OPTIONS...\n" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Interface en ligne de commande GSS, pour dtailler les codes d'erreur.\n" "\n" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Les arguments obligatoires des options longues le sont aussi pour les " "courtes.\n" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Affiche l'aide et quitte.\n" " -V, --version Affiche la version et quitte.\n" " -l, --list-mechanisms\n" " Liste des infos sur les mcanismes disponibles\n" " dans un format humainement comprhensible.\n" " -m, --major=LONG Dcrit un code d'erreur d'tat principal.\n" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Opre en silence (non par dfaut).\n" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API code majeur d'tat %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Erreur appel |Routine erreur| Infos supplmentaires |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Erreur routine masque %ld (0x%lx) dcal dans %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, c-format msgid "displaying status code failed (%d)" msgstr "chec d'affichage du code d'tat (%d)" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Erreur d'appel masque %ld (0x%lx) dcal dans %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Infos supplmentaires masques %ld (0x%lx) dcal dans %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Aucune erreur\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "chec de rcupration des mcanismes (%d)" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "impossible d'obtenir des informations sur le mcanisme (%d)" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: paramtre manquant\n" gss-1.0.2/po/id.po0000644000000000000000000002300411663554722010561 00000000000000# Indonesian translations for gss package. # Copyright (C) 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Andhika Padmawan , 2010. # msgid "" msgstr "" "Project-Id-Version: gss 0.1.5\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2010-03-25 23:00+0700\n" "Last-Translator: Andhika Padmawan \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Mekanisme Kerberos V5 GSS-API" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Parameter masukan yang dibutuhkan tak bisa dibaca" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Parameter keluaran yang dibutuhkan tak bisa ditulis" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parameter salah bentuk" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Mekanisme yang tak didukung telah diminta" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Nama tidak sah telah diberikan" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Nama yang diberikan merupakan tipe yang tak didukung" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Pengikat kanal tidak sah telah dipasok" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Kode status tidak sah telah dipasok" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Token memiliki MIC tidak sah" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Tak ada kredensial yang dipasok, atau kredensial tak tersedia atau tak dapat " "diakses" #: lib/error.c:61 msgid "No context has been established" msgstr "Tak ada konteks yang dibangun" #: lib/error.c:63 msgid "A token was invalid" msgstr "Token tidak sah" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Kredensial tidak sah" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Kredensial yang diacu telah kadaluarsa" #: lib/error.c:69 msgid "The context has expired" msgstr "Konteks telah kadaluarsa" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Galat tak ditentukan di mekanisme dasar" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Kualitas proteksi diminta tak dapat disediakan" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Operasi dilarang oleh kebijakan keamanan lokal" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Operasi atau opsi tak tersedia" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Elemen kredensial yang diminta telah ada" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Nama yang diberikan bukan nama mekanisme" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Fungsi gss_init_sec_context() atau gss_accept_sec_context() harus dipanggil " "ulang untuk melengkapi fungsinya" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Token merupakan duplikat dari token sebelumnya" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Periode validitas token telah kadaluarsa" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Token selanjutnya telah diproses" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Token per-pesan yang diharapkan tidak diterima" #: lib/error.c:312 msgid "No error" msgstr "Tak ada galat" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Tak ada @ di benang nama SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME berisi nondigit" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID tak dapat memecahkan ke nama pengguna" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Galat validasi" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Tak dapat mengalokasikan data gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Konteks pesan tidak sah" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Penyangga dalam ukuran yang salah" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Tipe penggunaan kredensial tak diketahui" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Kualitas proteksi tak diketahui telah ditentukan" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Prinsip dalam tembolok kredensial tidak cocok dengan nama yang diinginkan" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Tak ada prinsip di tab kunci yang cocok dengan nama yang diinginkan" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Tembolok kredensial tak memiliki TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Otentikator tidak memiliki subkunci" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Konteks telah sepenuhnya terbangun" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Tipe tanda tangan tak dikenal di token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Panjang medan tak sah di token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Coba menggunakan konteks keamanan tidak lengkap" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Tak ada galat krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Galat krb5 tak dikenal" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Coba `%s --help' untuk informasi lebih lanjut.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Penggunaan: %s OPSI...\n" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Antarmuka baris perintah ke GSS, digunakan untuk menjelaskan kode galat.\n" "\n" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "Argumen wajib untuk opsi panjang juga wajib untuk opsi pendek.\n" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "Kode status mayor GSS-API %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-------------------+---------------+---------------------------------+\n" " | Galat Memanggil | Galat Rutin | Info Tambahan |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bita 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Galat rutin bertopeng %ld (0x%lx) digeser ke %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, fuzzy, c-format msgid "displaying status code failed (%d)" msgstr "%s: menampilkan kode status gagal\n" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Galat memanggil bertopeng %ld (0x%lx) digeser ke %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Info tambahan bertopeng %ld (0x%lx) digeser ke %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Tak ada galat\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #~ msgid "" #~ " -h, --help Print help and exit\n" #~ " -V, --version Print version and exit\n" #~ " -m, --major=LONG Describe a `major status' error code vaue in plain " #~ "text.\n" #~ " -q, --quiet Silent operation (default=off)\n" #~ msgstr "" #~ " -h, --help Cetak bantuan dan keluar\n" #~ " -V, --version Cetak versi dan keluar\n" #~ " -m, --major=LONG Jelaskan nilai kode galat `status utama' dalam teks " #~ "biasa.\n" #~ " -q, --quiet Operasi diam (standar=off)\n" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: kehilangan parameter\n" gss-1.0.2/po/sv.gmo0000644000000000000000000001416411663554723010771 000000000000007I(,0!*R}.#&*Cn$# ()(R{;;@ R j  Q    + 9J "  m 3- &a * 9 ' / -E 's &  '  )> h y !!+5a!u.5%L#r%7.:fA*%(JN  *+&0;sl-,$;/`&&,#Eix"(*43+.,$#6 5 " '10 2&% / -!7) MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeContext is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenMasked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismValidation error| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 0.0.22 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2008-01-17 08:19+0100 Last-Translator: Christer Andersson Language-Team: Swedish Language: sv MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Anropsfel | Funktionsfel | Tillggsinformation | | Credential felaktigSenare meddelande redan behandlatParameter felaktigNdvndig indata kunde ej lsasNdvndig utdata kunde ej skrivasTypen p angivet namn stds ejMeddelande har felaktig integritetskontrollMeddelande felaktigTidigare meddelande inte mottagetFelaktigt namn angivenFelaktig statuskod angivenEfterfrgad mekanism stds ejFrskte anvnda ofullstndig skerhetskontextAutenticerare har ingen nyckelBuffer har fel storlekIngen skerhetskontext har upprttatsKan inte allokera gss_buffer_t dataCredential-cache har ingen TGTCredential har oknd typGSS-API huvudstatuskod %ld (0x%lx). Ogiltig kanalbindning angivenFelaktigt lngdflt i tokenMaskat anropsfel %ld (0x%lx) skiftad till %ld (0x%lx): Maskat funktionsfel %ld (0x%lx) skiftad till %ld (0x%lx): Maskad tillgssinformation %ld (0x%lx) skiftad till %ld (0x%lx): Ogiltig MeddelandekontextTecknet @ saknas i SERVICE-NAME namnstrngIngen skerhetskontext har upprttatsIngen credential tillgnglig, eller s var angiven credential otillgngligInget felInget fel Inget krb5 felInget namn i nyckelfil matchar begrt namnNamn p credential matchar inte begrt namnSTRING-UID-NAME innehller ickesiffrorGiltighetstiden fr skerhetskontext har gtt utFunktionerna gss_init_sec_context() eller gss_accept_sec_context() mste anropas igen fr att fullflja operationenFunktionen frbjuden av lokal skerhetspolicyFunktion eller parameter r inte tillgngligGivet namn r inte ett mekanism-namnEfterfrgad skyddsniv kan inte tillhandahllasAngiven credential har gtt utEfterfrgad credential existerar redanMeddelandet r en dubblettMeddelandets giltighetstid har gtt utFrsk med `%s --help' fr mer information. UID identifierar inget anvndarnamnOknt krb5 felOknd skyddsniv begrdOknd signaturtyp i tokenOknt fel i underliggande mekanismValideringsfel| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.2/po/zh_CN.gmo0000644000000000000000000001665311663554723011347 00000000000000@Yh4(,0D*u.# &? *f   = $ #) M i ( (   I ;b ; @  3 T Qt  + 9 "M p m 3 &**Q9|'/-'<&d ')1G"X!{1}g5 $$I!\!~- ($=!Y${3"AU%n79"9\?%6" Y f t=6% 0a@'-$9O*n1 %Dc #)%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2011-01-12 21:21中国标准时间 Last-Translator: Ji ZhengYu Language-Team: Chinese (simplified) Language: zh_CN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MSB LSB +-----------------+-----------------+---------------------------------+ | 调用错误 | 路由错误 | 备注信息 | | -h, --help 显示帮助并退出 -V, --version 显示版本信息并退出 -l, --list-mechanisms 以易读的形式 列出所支持的加密方式信息 -m, --major=LONG 描述一个主状态错误代码 -q, --quiet 操作时无显示(默认关闭) 证书无效已经处理了一个较新的标识参数形式错误无法读取所需的输入参数无法写入所需的输出参数所提供的名字是一种不支持的类型有个标识拥有无效的 MIC标识无效所需的 per-message 标识不被接受提供了无效的名称提供了无效的状态码请求了一个不支持的机制尝试使用不完整的安全内容验证方没有子密钥缓冲区大小错误GSS 命令行接口,用于解释错误代码。 内容已经完全创建好了无法分配 gss_buffer_t data证书缓存无 TGT证书使用类型未知GSS-API 主状态码 %ld (0x%lx)。 提供了错误的绑定通道标识中的域长度无效Kerberos V5 GSS-API 机制长选项所必须的参数短选项也是必须的。 隐蔽的调用错误 %ld (0x%lx) 被移入 %ld (0x%lx): 隐蔽的路由错误 %ld (0x%lx) 被移入 %ld (0x%lx): 隐蔽的备注信息错误 %ld (0x%lx) 被移入 %ld (0x%lx): 信息内容无效在 SERVICE-NAME 字符串中没有 @尚未创建内容未提供证书,或是证书不可用或无法访问没有错误没有错误 错误: 找不到 krb5 服务器keytab 中的委托人没有一个与所要的名字匹配的证书缓存中的委托人与所要的名字不匹配STRING-UID-NAME 包含非数字字符内容过期了要完成它的功能必须再次调用 gss_init_sec_context() 或 gss_accept_sec_context()函数本地安全机制禁止了此项操作此操作或选项不可用所提供的名称不是保护机制的名称无法提供所需要的保护等级关联证书过期了所需证书组件已经存在此标识是一个更早期标识的镜像标识已超过了有效期尝试用‘%s --help’来获取更多信息。 UID 无法解析为用户名错误: 未知的 krb5 服务器所指定的保护等级未知标识中的签名类型未知底层机制中有不明错误用法: %s 选项... 验证错误显示状态码时出错 (%d)正显示加密方式时出错 (%d)正查寻加密方式信息时出错 (%d)| +-----------------+-----------------+---------------------------------+ 位元31 24 23 16 15 0 gss-1.0.2/po/pl.po0000644000000000000000000002262011663554722010603 00000000000000# Polish translation for gss. # Copyright (C) 2004, 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Jakub Bogusz , 2004-2010. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2010-11-16 21:01+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Mechanizm Kerberos V5 GSS-API" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Wymagany parametr wejciowy nie mg by odczytany" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Wymagany parametr wyjciowy nie mg by zapisany" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parametr by le sformuowany" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "dano nieobsugiwanego mechanizmu" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Podano bdn nazw" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Podana nazwa bya nieobsugiwanego typu" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Podano niepoprawne powizania kanau" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Podano bdny kod stanu" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Token mia bdny MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "Nie podano danych uwierzytelniajcych lub byy niedostpne" #: lib/error.c:61 msgid "No context has been established" msgstr "Nie ustalono kontekstu" #: lib/error.c:63 msgid "A token was invalid" msgstr "Token by bdny" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Dane uwierzytelniajce byy niepoprawne" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Wskazane dane uwierzytelniajce wygasy" #: lib/error.c:69 msgid "The context has expired" msgstr "Kontekst wygas" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Nieokrelony bd w podrzdnym mechanizmie" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "dana jako zabezpieczenia nie moga by zapewniona" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Operacja jest zabroniona przez lokaln polityk bezpieczestwa" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Operacja lub opcja jest niedostpna" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "dany element danych uwierzytelniajcych ju istnieje" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Dostarczona nazwa nie bya nazw mechanizmu" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Funkcja gss_init_sec_context() lub gss_accept_sec_context() musi by " "wywoana ponownie aby dokoczy funkcj" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Token by duplikatem wczeniejszego" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Okres poprawnoci tokenu min" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Pniejszy token by ju przetworzony" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Nie otrzymano oczekiwanego tokenu dla komunikatu" #: lib/error.c:312 msgid "No error" msgstr "Brak bdu" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Brak @ w acuchu nazwy SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME zawiera znaki nie bdce cyframi" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID nie rozwizuje si na nazw uytkownika" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Bd kontroli poprawnoci" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Nie mona przydzieli danych gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Bdny kontekst komunikatu" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Zy rozmiar bufora" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Nieznany sposb uycia danych uwierzytelniajcych" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Podano nieznan jako zabezpieczenia" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Zarzdca w buforze danych uwierzytelniajcych nie pasuje do danej nazwy" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "aden zarzdca w keytab nie pasuje do danej nazwy" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Bufor danych uwierzytelniajcych nie zawiera TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Authenticator nie ma pola subkey" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Kontekst ju zosta w peni ustalony" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Nieznany rodzaj sygnatury w tokenie" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Bdna dugo pola w tokenie" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Prba uycia niepenego kontekstu bezpieczestwa" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Brak bdu krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Nieznany bd krb5" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "`%s --help' poda wicej informacji.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Skadnia: %s OPCJE...\n" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Interfejs linii polece do GSS sucy do wyjaniania kodw bdw.\n" "\n" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Argumenty obowizkowe dla opcji dugich s obowizkowe take dla opcji " "krtkich.\n" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Wypisanie tego opisu i zakoczenie\n" " -V, --version Wypisanie numeru wersji i zakoczenie\n" " -l, --list-mechanisms\n" " Informacje o obsugiwanych mechanizmach\n" " w postaci czytelnej dla czowieka\n" " -m, --major=LONG Opis \"gwnego\" kodu bdu w postaci tekstowej\n" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Dziaanie bez komunikatw (domylnie wyczone)\n" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "Gwny kod stanu GSS-API %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Bd wywoania | Bd procedury | Dodatkowe informacje |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskowany bd procedury %ld (0x%lx) przesunity do %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, c-format msgid "displaying status code failed (%d)" msgstr "wywietlenie kodu stanu nie powiodo si (%d)" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskowany bd wywoania %ld (0x%lx) przesunity do %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" "Maskowane dodatkowe informacje %ld (0x%lx) przesunite do %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Brak bdu\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "okrelanie mechanizmw nie powiodo si (%d)" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "pobieranie informacji o mechanizmach nie powiodo si (%d)" gss-1.0.2/po/eo.gmo0000644000000000000000000001743111663555055010743 00000000000000@Yh4(,0D*u.# &? *f   = $ #) M i ( (   I ;b ; @  3 T Qt  + 9 "M p m 3 &**Q9|'/-'<&d ')1G"X!{1sg,4$!?a-|/%-5c "+!?0#p*%#* #4 XyJ8><Z!!W S _l/};# t(7*&3')[*.('0N+b"(&'(0P%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2011-03-13 13:15-0300 Last-Translator: Felipe Castro Language-Team: Esperanto Language: eo MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit MSB LSB +-----------------+-----------------+---------------------------------+ | Vok-Eraro | Procedur-Eraro | Kroma Informo | | -h, --help Montri tiun ĉi helpon kaj eliri. -V, --version Montri version kaj eliri. -l, --list-mechanisms Listigi informon pri subtenataj mekanismoj laŭ hom-legebla formo. -m, --major=LONG Priskribi 'plejgrav-statan' erar-kodan valoron. -q, --quiet Silenta funkciado (apriore=ne). Legitimilo estis malvalidaPosta ĵetono jam estas procezitaParametro estis misformataBezonata eniga parametro ne povis esti legataBezonata eliga parametro ne povis esti skribataDonata nomo estis el nesubtenata tipoĴetono havis malvalidan MICĴetono estis malvalidaAtendita po-mesaĝa ĵetono ne estis ricevataMalvalida nomo estis donataMalvalita stat-kodo estis donataNesubtenata mekanismo estis petataProvo uzi malkompletan sekurecan kuntekstonAŭtentikanto havas neniun subkeyBufro havas malĝustan grandonKomand-linia interfaco al GSS, uzata por klarigi erar-kodojn. Kunteksto jam estas plene starigitaNi ne povis rezervi datumaron gss_buffer_tLegitimila kaŝmemoro havas neniu TGTLegitimila uzad-tipo estas nekonataGSS-API plejgrava stat-kodo %ld (0x%lx). Malĝusta kanal-ligoj estis donatajMalvalida kampo-longo en ĵetonoMekanismo Kerberos V5 GSS-APIDevigaj argumentoj por longaj elektiloj estas same devigaj por mallongaj. Maskita vok-eraro %ld (0x%lx) ŝoviĝis al %ld (0x%lx): Maskita procedura eraro %ld (0x%lx) ŝoviĝis al %ld (0x%lx): Maskita kroma informo %ld (0x%lx) ŝoviĝis al %ld (0x%lx): Mesaĝo-kunteksto estas malvalidaNeniu @ en nom-ĉeno SERVICE-NAMENeniu kunteksto estas starigitaNeniu legitimilo estis donata, aŭ la legitimiloj estis nedisponeblaj aŭ neatingeblajNeniu eraroNeniu eraro Neniu eraro krb5Neniu ĉefo en keytab kongruas al dezirata nomoĈefo en legitimila kaŝmemoro ne kongruas al dezirata nomoSTRING-UID-NAME enhavas ne-ciferojnLa kunteksto senvalidiĝisLa funkcio gss_init_sec_context() aŭ gss_accept_sec_context() devas esti vokata refoje por plenumigi ĝian funkcionLa operacio estas malpermesata de loka sekurec-politikoLa operacio aŭ elekto ne estas disponeblaLa donita nomo ne estis mekanismo-nomoLa peto kvalito-de-protekto ne povis esti provizataLa referencitaj legitimiloj senvalidiĝisLa petita legitimila elemento jam ekzistasLa ĵetono estis ripetaĵo de pli frua ĵetonoLa valideca templimo de ĵetono finiĝisProvu '%s --help' por pli da informoj. UID ne solviĝas al uzantnomoNekonata eraro krb5Nekonata kvalito de protekto estis indikataNekonata subskriba tipo en ĵetonoNespecifita eraro en implicita mekanismoUzado: %s ELEKTILOJ... Validiga eraromontrigo de stat-kodo malsukcesis (%d)indikado de mekanismoj malsukcesis (%d)petado de informo pri mekanismo malsukcesis (%d)| +-----------------+-----------------+---------------------------------+ Bito 31 24 23 16 15 0 gss-1.0.2/po/fi.po0000644000000000000000000003035611663554722010573 00000000000000# Finnish messages for gss. # Copyright © 2009 Free Software Foundation, Inc. # Copyright © 2009 Simon Josefsson # This file is distributed under the same license as the gss package. # Jorma Karvonen , 2009, 2010. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2010-11-16 17:15+0200\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API -mekanismi" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Vaadittua syöteparametriä ei voitu lukea" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Vaadittua tulosteparametriä ei voitu kirjoittaa" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parametri on väärän muotoinen" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Kutsuttiin tukematonta mekanismia" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Toimitettiin virheellinen nimi" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Toimitettu nimi oli tyyppiä, jota ei tueta" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Toimitettiin virheellisiä kanavasidoksia" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Toimitettiin virheellinen tilakoodi" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Merkkijonolla oli virheellinen MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Valtuustietoja ei toimitettu, tai valtuustiedot eivät olleet käytettävissä " "tai saatavilla" #: lib/error.c:61 msgid "No context has been established" msgstr "Konteksia ei ole perustettu" #: lib/error.c:63 msgid "A token was invalid" msgstr "Merkkijono oli virheellinen" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Valtuustieto oli virheellinen" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Viitevaltuustiedot ovat vanhentuneet" #: lib/error.c:69 msgid "The context has expired" msgstr "Konteksi on vanhentunut" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Määrittelemätön virhe alla olevassa mekanismissa" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Ei voitu tarjota turvatasopyyntöä" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Paikallinen turvakäytäntö on kieltänyt toiminnon" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Toiminto tai valitsin ei ole saatavilla" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Pyydetty valtuustietoelementti on jo olemassa" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Toimitettu nimi ei ollut mekanisminimi" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Funktio gss_init_sec_context() tai funktio gss_accept_sec_context() on " "kutsuttava uudelleen funktion saamiseksi valmiiksi" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Merkkijono oli aikaisemman merkkijonon kaksoiskappale" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Merkkijonon kelpoisuuskausi on vanhentunut" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Jälkimmäinen merkkijono on jo prosessoitu" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Odotettua merkkijonokohtaista viestiä ei ole vastaanotettu" #: lib/error.c:312 msgid "No error" msgstr "Ei virhettä" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Ei @-merkkiä PALVELU-NIMI-nimimerkkijonossa" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "MERKKIJONO-UID-NIMI-merkkijono sisältää muutakin kuin numeroita" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID ei ratkaise käyttäjänimeä" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Kelpuutusvirhe" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Ei voitu varata gss_buffer_t-dataa" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Viestikonteksi on virheellinen" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Puskuri on väärän kokoinen" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Valtuustiedon käyttötyyppi on tuntematon" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Tuntematon suojelutaso määritelty" # security principal on entiteetti, joka on todennettu #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Todennettu entiteetti valtuustietovälimuistissa ei täsmännyt halutun nimen " "kanssa" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "" "Yksikään todennettu entiteetti keytab-tiedostossa ei täsmännyt halutun nimen " "kanssa" # TGT = Ticket-Granting Ticket on sanoma B, jonka todennuspalvelin lähettää asiakkaalle client authentication -menettelyssä. #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "" "Valtuustietovälimuistissa ei ole Ticket-Granting Ticket-sanomaa " "todennuspalvelimelta" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Todentajalla ei ole aliavainta" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Konteksi on jo täysin perustettu" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Tuntematon allekirjoitustyyppi merkkijonossa" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Virheellinen kenttäpituus merkkijonossa" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Yritys käyttää vaillinaista turvakonteksia" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Ei krb5-virhettä" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Tuntematon krb5-virhe" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Lisätietoja ”%s --help”-komennolla.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Käyttö: %s VALITSIMET...\n" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Komentorivirajapinta GSS:ään, käytetty selittämään virhekoodeja.\n" "\n" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Pakolliset argumentit pitkille valitsimille ovat pakollisia myös lyhyille " "valitsimille.\n" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Tulosta opaste ja poistu.\n" " -V, --version Tulosta versio ja poistu.\n" " -l, --list-mechanisms\n" " Luettelotiedot tuetuista mekanismeista\n" " ihmisluettavassa muodossa.\n" " -m, --major=LONG Kuvaa ”major status”-virhekoodiarvo.\n" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Hiljainen toiminta (oletus=pois käytöstä).\n" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API major-tilakoodi %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB " "LSB\n" " +-----------------+-----------------+---------------------------------" "+\n" " | Kutsuvirhe | Rutiinivirhe | Lisätietoja " "|\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------" "+\n" "Bitti 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" "Peitetty rutiinivirhe %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, c-format msgid "displaying status code failed (%d)" msgstr "tilakoodin näyttäminen epäonnistui (%d)" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Peitetty kutsuvirhe %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Peitetty lisätieto %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Ei virhettä\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "osoitusmekanismi epäonnistui (%d)" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "tietojen kysyminen mekanismista epäonnistui (%d)" #~ msgid "" #~ " -h, --help Print help and exit\n" #~ " -V, --version Print version and exit\n" #~ " -m, --major=LONG Describe a `major status' error code vaue in plain " #~ "text.\n" #~ " -q, --quiet Silent operation (default=off)\n" #~ msgstr "" #~ " -h, --help Tulosta opaste ja poistu\n" #~ " -V, --version Tulosta versio ja poistu\n" #~ " -m, --major=LONG Kuvaile `päätila'-virhekoodiarvo pelkkänä tekstinä.\n" #~ " -q, --quiet Hiljainen toiminta (oletus=ei ole käytössä)\n" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: parametri puuttuu\n" #~ msgid "Usage: " #~ msgstr "Käyttö: " #~ msgid " -h, --help Print help and exit" #~ msgstr " -h, --help Tulosta opaste ja poistu" #~ msgid " -V, --version Print version and exit" #~ msgstr " -V, --version Tulosta versio ja poistu" #~ msgid "" #~ " -m, --major=LONG Describe a `major status' error code vaue in plain " #~ "text." #~ msgstr "" #~ " -m, --major=LONG Kuvaile ”major status”-virhekoodiarvo selväkielisenä " #~ "tekstinä." #~ msgid "" #~ " -m, --major=LONG Describe a `major status' error code value in plain " #~ "text." #~ msgstr "" #~ " -m, --major=LONG Kuvaile ”major status”-virhekoodiarvo selväkielisenä " #~ "tekstinä." #~ msgid "%s: cannot open file for writing: %s\n" #~ msgstr "%s: ei voida avata tiedosto kirjoittamista varten: %s\n" #~ msgid "%s: `--%s' (`-%c') option given more than once%s\n" #~ msgstr "%s: ”--%s” (”-%c”) valitsin annettu useammin kuin kerran%s\n" #~ msgid "%s: `--%s' option given more than once%s\n" #~ msgstr "%s: ”--%s” valitsin annettu useammin kuin kerran%s\n" #~ msgid "%s: invalid numeric value: %s\n" #~ msgstr "%s: virheellinen numeroarvo: %s\n" #~ msgid "%s: option unknown: %c%s\n" #~ msgstr "%s: valitsin tuntematon: %c%s\n" #~ msgid "" #~ " -h, --help Print help and exit\n" #~ " -V, --version Print version and exit\n" #~ " -m, --major=LONG Describe a `major status' error code value in plain " #~ "text.\n" #~ " -q, --quiet Silent operation (default=off)\n" #~ msgstr "" #~ " -h, --help Tulosta opaste ja poistu\n" #~ " -V, --version Tulosta versio ja poistu\n" #~ " -m, --major=LONG Kuvaile ”päätila”-virhekoodiarvo pelkkänä tekstinä.\n" #~ " -q, --quiet Hiljainen toiminta (oletus=pois käytöstä)\n" gss-1.0.2/po/it.po0000644000000000000000000002334311663554722010607 00000000000000# Italian translation for GNU gss. # Copyright (C) 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Sergio Zanchetta , 2010. # msgid "" msgstr "" "Project-Id-Version: gss-1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2010-12-02 18:21+0100\n" "Last-Translator: Sergio Zanchetta \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural= (n != 1)\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Meccanismo GSS-API di Kerberos V5" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Un parametro di input necessario non può essere letto" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Un parametro di output necessario non può essere scritto" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Un parametro era malformato" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "È stato richiesto un meccanismo non supportato" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "È stato fornito un nome non valido" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Un nome fornito era di un tipo non supportato" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Sono state fornite associazioni di canale non corrette" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "È stato fornito un codice di stato non valido" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Un token aveva un MIC non valido" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Non è stata fornita alcuna credenziale oppure le credenziali erano " "indisponibili o inaccessibili" #: lib/error.c:61 msgid "No context has been established" msgstr "Non è stato definito alcun contesto" #: lib/error.c:63 msgid "A token was invalid" msgstr "Un token non era valido" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Una credenziale non era valida" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Le credenziali di riferimento sono scadute" #: lib/error.c:69 msgid "The context has expired" msgstr "Il contesto è scaduto" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Errore non specificato nel meccanismo sottostante" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "La qualità di protezione richiesta non può essere fornita" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "L'operazione è proibita dalle politiche di sicurezza locali" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "L'operazione o l'opzione non è disponibile" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "L'elemento di credenziale richiesto esiste già" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Il nome fornito non era un nome di meccanismo" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "La funzione gss_init_sec_context() oppure gss_accept_sec_context() deve " "essere chiamata di nuovo per essere completata" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Il token era un duplicato di uno precedente" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Il periodo di validità del token è scaduto" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Un token successivo è già stato elaborato" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Un token per-message atteso non è stato ricevuto" #: lib/error.c:312 msgid "No error" msgstr "Nessun errore" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Nessun @ nella stringa di nome SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME contiene caratteri non numerici" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID non risolve il nome utente" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Errore di validazione" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Impossibile allocare dati gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Contesto del messaggio non valido" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Il buffer è di dimensione errata" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Il tipo d'uso delle credenziali è sconosciuto" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Qualità di protezione specificata sconosciuta" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Il principal nella cache delle credenziali non corrisponde al nome desiderato" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Nessun principal nel keytab corrisponde al nome desiderato" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "La cache delle credenziali non contiene TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "L'autenticatore non ha una sottochiave" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Il contesto è già completamente definito" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Tipo di firma sconosciuto nel token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Lunghezza di campo non valida nel token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Tentativo d'uso di un contesto di sicurezza incompleto" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Nessun errore krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Errore krb5 sconosciuto" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Usare \"%s --help\" per maggiori informazioni.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Uso: %s OPZIONI...\n" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Interfaccia a riga di comando per GSS, usata per illustrare i codici di " "errore.\n" "\n" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Gli argomenti obbligatori per le opzioni lunghe lo sono anche per le opzioni " "corte.\n" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Stampa questo aiuto ed esce.\n" " -V, --version Stampa la versione ed esce.\n" " -l, --list-mechanisms\n" " Elenca le informazioni sui meccanismi supportati\n" " in forma leggibile.\n" " -m, --major=LONG Descrive un codice di errore \"major status\".\n" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Silent operation (default=off).\n" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "Codice di stato principale %ld (0x%lx) di GSS-API.\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB " "LSB\n" " +----------------------+---------------------" "+------------------------------+\n" " | Errore di chiamata | Errore di routine | Informazioni " "aggiuntive |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +----------------------+---------------------" "+------------------------------+\n" "Bit 31 24 23 16 15 " "0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Errore della routine nascosta %ld (0x%lx) spostato in %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, c-format msgid "displaying status code failed (%d)" msgstr "displaying status code failed (%d)" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Errore della chiamata nascosta %ld (0x%lx) spostato in %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" "Informazione aggiuntiva nascosta %ld (0x%lx) spostata in %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Nessun errore\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "segnalazione del meccanismo non riuscita (%d)" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "richiesta informazioni sul meccanismo non riuscita (%d)" gss-1.0.2/po/en@boldquot.gmo0000644000000000000000000001732311663554722012614 00000000000000@Yh4(,0D*u.# &? *f   = $ #) M i ( (   I ;b ; @  3 T Qt  + 9 "M p m 3 &**Q9|'/-'<&d ')1G"X!{1mg)4(4],w0*./^#{&* =&$d# ((<ZIx;;@:{ Q& / 9+G9s"m3V&*9'/>-n'2 '+S)s"!1 ;%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.2 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2011-11-25 00:57+0100 Last-Translator: Automatically generated Language-Team: none Language: en@boldquot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a ‘major status’ error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry ‘%s --help’ for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.2/po/ro.po0000644000000000000000000002210111663554722010602 00000000000000# Mesajele n limba romn pentru gss. # Copyright (C) 2003 Free Software Foundation, Inc. # Acest fiier este distribuit sub aceeai licen ca i pachetul gss. # Laurentiu Buzdugan , 2003. # # # msgid "" msgstr "" "Project-Id-Version: gss 0.0.11\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2004-04-22 12:00-0500\n" "Last-Translator: Laurentiu Buzdugan \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Nu a putut fi citit un parametru de intrare obligatoriu" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Nu a putut fi scris un parametru de ieire obligatoriu" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Un parametru a fost incorect" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "A fost cerut un mecanism care nu este suportat" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "A fost furnizat un nume invalid" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Un nume furnizat a fost de un tip care nu este suportat" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Au for furnizate legturi de canale incorecte" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "A fost furnizat un cod de stare invalid" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Un token a avut un MIC invalid" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Nici o legitimaie (credential) nu a fost furnizat, sau legitimaiile nu au " "fost disponibile sau inaccesibile" #: lib/error.c:61 msgid "No context has been established" msgstr "Nici un context nu a fost stabilit" #: lib/error.c:63 msgid "A token was invalid" msgstr "Un token a fost invalid" #: lib/error.c:65 msgid "A credential was invalid" msgstr "O legitimaie (credential) a fost invalid" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Legitimaiile (credentials) referite au expirat" #: lib/error.c:69 msgid "The context has expired" msgstr "Contextul a expirat" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "O eraoare nespecificat n mecanismul subiacent" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Calitatea-de-protecie cerut nu a putut fi furnizat" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Operaia este interzis de politica de securitate local" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Operaia sau opiunea nu este disponibil" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Elementul de legitimare (credential) cerut exist deja" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Numele furnizat nu a fost un nume de mecanism" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Funciile gss_init_sec_context() sau gss_accept_sec_context() trebuie " "chemate din nou pentru a-i ndeplini funcia" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Token-ul a fost un duplicat al unui token anterior" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Perioada de validitate a token-ului a expirat" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Un token ulterior a fost deja procesat" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Un token pe mesaj ateptat nu a fost primit" #: lib/error.c:312 msgid "No error" msgstr "Nici o eroare" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Nici un @ n numele SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME conine non-cifre" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID nu este rezolvat ca username (nume utilizator)" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Eroare de validare" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Nu am putut aloca data gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Context mesaj invalid" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Buffer-ul este de dimensiune incorect" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Tipul de folosire a legitimaiei este necunoscut" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Calitate de protecie specificat necunoscut" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Principalul n cache-ul de legitimaii nu se potrivete cu numele dorit" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Nici un principal n keytab nu se potrivete cu numele dorit" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Cache-ul de legitimaii (credentials) nu are nici un TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Authenticator-u nu are nici o subcheie" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Contextul este deja stabilit n totalitate" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Tip de semntur necunoscut n token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Lungimea cmpuui invalid n token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "ncercare de folosire a unui context de securitate incomplet" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Nici o eroare krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Eroare krb5 necunoscut" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "ncercai `%s --help' pentru informaii suplimentare.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "Cod de stare GSS-API major %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Eroare Apel | Eroare Rutin | Informaii Suplimentare |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Eroare rutin mascat %ld (0x%lx) shiftat n %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, fuzzy, c-format msgid "displaying status code failed (%d)" msgstr "%s: afiarea codului de stare a euat\n" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Eroare apel mascat %ld (0x%lx) shiftat n %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Informaia suplimentar mascat %ld (0x%lx) shiftat n %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Nici o eroare\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: parametru lips\n" gss-1.0.2/po/POTFILES.in0000644000000000000000000000016211361023201011354 00000000000000# List of source files containing translatable strings for GSS. lib/meta.c lib/error.c lib/krb5/error.c src/gss.c gss-1.0.2/po/boldquot.sed0000644000000000000000000000033111663554672012155 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g gss-1.0.2/po/sv.po0000644000000000000000000002114611663554723010623 00000000000000# Swedish translation of GSS. # Copyright (C) 2008 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Simon Josefsson , 2004-2007. # Christer Andersson , 2008. # msgid "" msgstr "" "Project-Id-Version: gss 0.0.22\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2008-01-17 08:19+0100\n" "Last-Translator: Christer Andersson \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Ndvndig indata kunde ej lsas" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Ndvndig utdata kunde ej skrivas" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parameter felaktig" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Efterfrgad mekanism stds ej" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Felaktigt namn angiven" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Typen p angivet namn stds ej" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Ogiltig kanalbindning angiven" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Felaktig statuskod angiven" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Meddelande har felaktig integritetskontroll" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Ingen credential tillgnglig, eller s var angiven credential otillgnglig" #: lib/error.c:61 msgid "No context has been established" msgstr "Ingen skerhetskontext har upprttats" #: lib/error.c:63 msgid "A token was invalid" msgstr "Meddelande felaktig" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Credential felaktig" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Angiven credential har gtt ut" #: lib/error.c:69 msgid "The context has expired" msgstr "Giltighetstiden fr skerhetskontext har gtt ut" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Oknt fel i underliggande mekanism" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Efterfrgad skyddsniv kan inte tillhandahllas" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Funktionen frbjuden av lokal skerhetspolicy" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Funktion eller parameter r inte tillgnglig" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Efterfrgad credential existerar redan" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Givet namn r inte ett mekanism-namn" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Funktionerna gss_init_sec_context() eller gss_accept_sec_context() mste " "anropas igen fr att fullflja operationen" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Meddelandet r en dubblett" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Meddelandets giltighetstid har gtt ut" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Senare meddelande redan behandlat" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Tidigare meddelande inte mottaget" #: lib/error.c:312 msgid "No error" msgstr "Inget fel" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Tecknet @ saknas i SERVICE-NAME namnstrng" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME innehller ickesiffror" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID identifierar inget anvndarnamn" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Valideringsfel" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Kan inte allokera gss_buffer_t data" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Ogiltig Meddelandekontext" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Buffer har fel storlek" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Credential har oknd typ" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Oknd skyddsniv begrd" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "Namn p credential matchar inte begrt namn" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Inget namn i nyckelfil matchar begrt namn" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Credential-cache har ingen TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Autenticerare har ingen nyckel" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Ingen skerhetskontext har upprttats" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Oknd signaturtyp i token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Felaktigt lngdflt i token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Frskte anvnda ofullstndig skerhetskontext" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Inget krb5 fel" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Oknt krb5 fel" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Frsk med `%s --help' fr mer information.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API huvudstatuskod %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Anropsfel | Funktionsfel | Tillggsinformation |\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskat funktionsfel %ld (0x%lx) skiftad till %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, fuzzy, c-format msgid "displaying status code failed (%d)" msgstr "%s: visning av statuskod misslyckades\n" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskat anropsfel %ld (0x%lx) skiftad till %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskad tillgssinformation %ld (0x%lx) skiftad till %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Inget fel\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: parameter saknas\n" gss-1.0.2/po/id.gmo0000644000000000000000000001546411663554722010740 00000000000000;O ( 2,L0y*.3#P&t*=$9#^ (( / IM ; ; @ P h  Q    + 9H "  m 3+ &_ * 9 ' / -C 'q &  ' )<f|% 13 4Av.#)/?#o!J"*#$N(s(& ?)>i:< %8^T| CIEl.5d(.&(.+(Z/)0&%'Lt/32.&6,4*;85 9-1 %7 + !($:"0)'# MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation error| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 0.1.5 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2010-03-25 23:00+0700 Last-Translator: Andhika Padmawan Language-Team: Indonesian Language: id MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit MSB LSB +-------------------+---------------+---------------------------------+ | Galat Memanggil | Galat Rutin | Info Tambahan | | Kredensial tidak sahToken selanjutnya telah diprosesParameter salah bentukParameter masukan yang dibutuhkan tak bisa dibacaParameter keluaran yang dibutuhkan tak bisa ditulisNama yang diberikan merupakan tipe yang tak didukungToken memiliki MIC tidak sahToken tidak sahToken per-pesan yang diharapkan tidak diterimaNama tidak sah telah diberikanKode status tidak sah telah dipasokMekanisme yang tak didukung telah dimintaCoba menggunakan konteks keamanan tidak lengkapOtentikator tidak memiliki subkunciPenyangga dalam ukuran yang salahAntarmuka baris perintah ke GSS, digunakan untuk menjelaskan kode galat. Konteks telah sepenuhnya terbangunTak dapat mengalokasikan data gss_buffer_tTembolok kredensial tak memiliki TGTTipe penggunaan kredensial tak diketahuiKode status mayor GSS-API %ld (0x%lx). Pengikat kanal tidak sah telah dipasokPanjang medan tak sah di tokenMekanisme Kerberos V5 GSS-APIArgumen wajib untuk opsi panjang juga wajib untuk opsi pendek. Galat memanggil bertopeng %ld (0x%lx) digeser ke %ld (0x%lx): Galat rutin bertopeng %ld (0x%lx) digeser ke %ld (0x%lx): Info tambahan bertopeng %ld (0x%lx) digeser ke %ld (0x%lx): Konteks pesan tidak sahTak ada @ di benang nama SERVICE-NAMETak ada konteks yang dibangunTak ada kredensial yang dipasok, atau kredensial tak tersedia atau tak dapat diaksesTak ada galatTak ada galat Tak ada galat krb5Tak ada prinsip di tab kunci yang cocok dengan nama yang diinginkanPrinsip dalam tembolok kredensial tidak cocok dengan nama yang diinginkanSTRING-UID-NAME berisi nondigitKonteks telah kadaluarsaFungsi gss_init_sec_context() atau gss_accept_sec_context() harus dipanggil ulang untuk melengkapi fungsinyaOperasi dilarang oleh kebijakan keamanan lokalOperasi atau opsi tak tersediaNama yang diberikan bukan nama mekanismeKualitas proteksi diminta tak dapat disediakanKredensial yang diacu telah kadaluarsaElemen kredensial yang diminta telah adaToken merupakan duplikat dari token sebelumnyaPeriode validitas token telah kadaluarsaCoba `%s --help' untuk informasi lebih lanjut. UID tak dapat memecahkan ke nama penggunaGalat krb5 tak dikenalKualitas proteksi tak diketahui telah ditentukanTipe tanda tangan tak dikenal di tokenGalat tak ditentukan di mekanisme dasarPenggunaan: %s OPSI... Galat validasi| +-----------------+-----------------+---------------------------------+ Bita 31 24 23 16 15 0 gss-1.0.2/po/ro.gmo0000644000000000000000000001516111663554722010756 000000000000007I(,0!*R}.#&*Cn$# ()(R{;;@ R j  Q    + 9J "  m 3- &a * 9 ' / -E 's &  '  )> h y *&76F7}+'8.`<&&*#E8i0)-"+9N;E  "And <G@!s82)k-5/6)2`-62+-C$q/(*43+.,$#6 5 " '10 2&% / -!7) MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeContext is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenMasked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismValidation error| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 0.0.11 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2004-04-22 12:00-0500 Last-Translator: Laurentiu Buzdugan Language-Team: Romanian Language: ro MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Eroare Apel | Eroare Rutin | Informaii Suplimentare | | O legitimaie (credential) a fost invalidUn token ulterior a fost deja procesatUn parametru a fost incorectNu a putut fi citit un parametru de intrare obligatoriuNu a putut fi scris un parametru de ieire obligatoriuUn nume furnizat a fost de un tip care nu este suportatUn token a avut un MIC invalidUn token a fost invalidUn token pe mesaj ateptat nu a fost primitA fost furnizat un nume invalidA fost furnizat un cod de stare invalidA fost cerut un mecanism care nu este suportatncercare de folosire a unui context de securitate incompletAuthenticator-u nu are nici o subcheieBuffer-ul este de dimensiune incorectContextul este deja stabilit n totalitateNu am putut aloca data gss_buffer_tCache-ul de legitimaii (credentials) nu are nici un TGTTipul de folosire a legitimaiei este necunoscutCod de stare GSS-API major %ld (0x%lx). Au for furnizate legturi de canale incorecteLungimea cmpuui invalid n tokenEroare apel mascat %ld (0x%lx) shiftat n %ld (0x%lx): Eroare rutin mascat %ld (0x%lx) shiftat n %ld (0x%lx): Informaia suplimentar mascat %ld (0x%lx) shiftat n %ld (0x%lx): Context mesaj invalidNici un @ n numele SERVICE-NAMENici un context nu a fost stabilitNici o legitimaie (credential) nu a fost furnizat, sau legitimaiile nu au fost disponibile sau inaccesibileNici o eroareNici o eroare Nici o eroare krb5Nici un principal n keytab nu se potrivete cu numele doritPrincipalul n cache-ul de legitimaii nu se potrivete cu numele doritSTRING-UID-NAME conine non-cifreContextul a expiratFunciile gss_init_sec_context() sau gss_accept_sec_context() trebuie chemate din nou pentru a-i ndeplini funciaOperaia este interzis de politica de securitate localOperaia sau opiunea nu este disponibilNumele furnizat nu a fost un nume de mecanismCalitatea-de-protecie cerut nu a putut fi furnizatLegitimaiile (credentials) referite au expiratElementul de legitimare (credential) cerut exist dejaToken-ul a fost un duplicat al unui token anteriorPerioada de validitate a token-ului a expiratncercai `%s --help' pentru informaii suplimentare. UID nu este rezolvat ca username (nume utilizator)Eroare krb5 necunoscutCalitate de protecie specificat necunoscutTip de semntur necunoscut n tokenO eraoare nespecificat n mecanismul subiacentEroare de validare| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.2/po/insert-header.sin0000644000000000000000000000124011663554673013075 00000000000000# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } gss-1.0.2/po/Makefile.in.in0000644000000000000000000003744211663554672012316 00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.18 GETTEXT_MACRO_VERSION = 0.18 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: check-macro-version all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. check-macro-version: @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ package_gnu='GNU '; \ else \ package_gnu=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_gnu}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/po/ga.po0000644000000000000000000002232611663554722010562 00000000000000# Irish translations for gss. # Copyright (C) 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Kevin Scannell , 2007. msgid "" msgstr "" "Project-Id-Version: gss 0.0.22\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2011-11-25 00:57+0100\n" "PO-Revision-Date: 2007-09-17 11:04-0500\n" "Last-Translator: Kevin Scannell \n" "Language-Team: Irish \n" "Language: ga\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Níorbh fhéidir paraiméadar riachtanach ionchurtha a léamh" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Níorbh fhéidir paraiméadar riachtanach aschurtha a scríobh" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Paraiméadar míchumtha" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Iarratas ar mheicníocht gan tacaíocht" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Ainm neamhbhailí" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Ainm de chineál nach dtacaítear leis" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Ceangail mhíchearta chainéil" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Cód neamhbhailí stádais" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Bhí MIC neamhbhailí ag ceadchomhartha" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Ní raibh aon dintiúir, bhí na dintiúir dofhaighte, nó bhíodar dorochtana" #: lib/error.c:61 msgid "No context has been established" msgstr "Níor bunaíodh aon chomhthéacs" #: lib/error.c:63 msgid "A token was invalid" msgstr "Ceadchomhartha neamhbhailí" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Dintiúr neamhbhailí" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Chuaigh na dintiúir tagartha as feidhm" #: lib/error.c:69 msgid "The context has expired" msgstr "Tá an comhthéacs as dáta" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Earráid gan sonrú sa bhunmheicníocht" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Níorbh fhéidir an cháilíocht cosanta iarrtha a sholáthar" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Ní cheadaítear an oibríocht de bharr polasaí logánta slándála" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Níl aon fháil ar an oibríocht nó ar an rogha" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Tá an dintiúr iarrtha ann cheana" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Ní ainm meicníochta é an t-ainm a tugadh" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Caithfear gss_init_sec_context() nó gss_accept_sec_context() a glaoch chun a " "fheidhm a chur i gcrích" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Cóip den cheadchomhartha roimhe seo an ceadchomhartha seo" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Tá tréimhse bhailíochta an cheadchomhartha thart" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Próiseáladh ceadchomhartha níos nuaí cheana" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Bhíothas súil le ceadchomhartha sa teachtaireacht agus ní bhfuarthas é" #: lib/error.c:312 msgid "No error" msgstr "Ní raibh aon earráid" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "@ ar iarraidh san ainm SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "Tá carachtair neamhuimhriúla i STRING-UID-NAME" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "Ní féidir an t-aitheantas úsáideora a réiteach mar ainm" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Earráid le linn deimhnithe" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Níorbh fhéidir gss_buffer_t a dháileadh" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Tá comhthéacs na teachtaireachta neamhbhailí" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Méid mhícheart ar an maolán" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Cineál úsáide dintiúir nach bhfuil eolas air" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Sonraíodh cáilíocht cosanta nach bhfuil eolas uirthi" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Ní mheaitseálann an príomhaí i dtaisce na ndintiúr leis an ainm iarrtha" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Níl aon phríomhaí i keytab a mheaitseálann an t-ainm iarrtha" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Níl TGT ag taisce na ndintiúr" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Níl fo-eochair ag an bhfíordheimhneoir" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Socraíodh an comhthéacs go hiomlán cheana féin" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Cineál anaithnid sínithe sa cheadchomhartha" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Fad neamhbhailí réimse sa cheadchomhartha" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Rinneadh iarracht ar chomhthéacs neamhiomlán slándála a úsáid" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Gan earráid krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Earráid anaithnid krb5" #: src/gss.c:65 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Bain triail as `%s --help' chun tuilleadh eolais a fháil.\n" #: src/gss.c:69 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "" #: src/gss.c:72 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" #: src/gss.c:76 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" #: src/gss.c:79 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:87 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:106 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "Mórchód stádais GSS-API %ld (0x%lx).\n" "\n" #: src/gss.c:109 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " GMS " "GLS\n" " +-----------------+-----------------+---------------------------------" "+\n" " | Earráid Glaoite | Earráid Gnáthamh| Eolas Forlíontach " "|\n" " | " #: src/gss.c:123 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------" "+\n" "Giotán31 24 23 16 15 0\n" "\n" #: src/gss.c:133 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Aistríodh earráid mhasctha ghnáthaimh %ld (0x%lx) go %ld (0x%lx):\n" #: src/gss.c:150 src/gss.c:184 src/gss.c:221 #, fuzzy, c-format msgid "displaying status code failed (%d)" msgstr "%s: níorbh fhéidir an cód stádais a thaispeáint\n" #: src/gss.c:170 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Aistríodh earráid mhasctha ghlaoite %ld (0x%lx) go %ld (0x%lx):\n" #: src/gss.c:203 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Aistríodh eolas masctha forlíontach %ld (0x%lx) go %ld (0x%lx):\n" #: src/gss.c:238 #, c-format msgid "No error\n" msgstr "Ní raibh aon earráid\n" #: src/gss.c:256 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:271 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: paraiméadar ar iarraidh\n" #~ msgid "called again to complete its function" #~ msgstr "glaoch arís chun a fheidhm a chur i gcrích" gss-1.0.2/po/ga.gmo0000644000000000000000000001521711663554722010727 000000000000007I(,0!*R}.#&*Cn$# ()(R{;;@ R j  Q    + 9J "  m 3- &a * 9 ' / -E 's &  '  )> h y ot/=>&O'vJ'2CZ(2*D0d)+B EMB/# *NK@L0ifD0b+='"%:H3;<07H-'(*43+.,$#6 5 " '10 2&% / -!7) MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeContext is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenMasked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismValidation error| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 0.0.22 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2007-09-17 11:04-0500 Last-Translator: Kevin Scannell Language-Team: Irish Language: ga MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GMS GLS +-----------------+-----------------+---------------------------------+ | Earráid Glaoite | Earráid Gnáthamh| Eolas Forlíontach | | Dintiúr neamhbhailíPróiseáladh ceadchomhartha níos nuaí cheanaParaiméadar míchumthaNíorbh fhéidir paraiméadar riachtanach ionchurtha a léamhNíorbh fhéidir paraiméadar riachtanach aschurtha a scríobhAinm de chineál nach dtacaítear leisBhí MIC neamhbhailí ag ceadchomharthaCeadchomhartha neamhbhailíBhíothas súil le ceadchomhartha sa teachtaireacht agus ní bhfuarthas éAinm neamhbhailíCód neamhbhailí stádaisIarratas ar mheicníocht gan tacaíochtRinneadh iarracht ar chomhthéacs neamhiomlán slándála a úsáidNíl fo-eochair ag an bhfíordheimhneoirMéid mhícheart ar an maolánSocraíodh an comhthéacs go hiomlán cheana féinNíorbh fhéidir gss_buffer_t a dháileadhNíl TGT ag taisce na ndintiúrCineál úsáide dintiúir nach bhfuil eolas airMórchód stádais GSS-API %ld (0x%lx). Ceangail mhíchearta chainéilFad neamhbhailí réimse sa cheadchomharthaAistríodh earráid mhasctha ghlaoite %ld (0x%lx) go %ld (0x%lx): Aistríodh earráid mhasctha ghnáthaimh %ld (0x%lx) go %ld (0x%lx): Aistríodh eolas masctha forlíontach %ld (0x%lx) go %ld (0x%lx): Tá comhthéacs na teachtaireachta neamhbhailí@ ar iarraidh san ainm SERVICE-NAMENíor bunaíodh aon chomhthéacsNí raibh aon dintiúir, bhí na dintiúir dofhaighte, nó bhíodar dorochtanaNí raibh aon earráidNí raibh aon earráid Gan earráid krb5Níl aon phríomhaí i keytab a mheaitseálann an t-ainm iarrthaNí mheaitseálann an príomhaí i dtaisce na ndintiúr leis an ainm iarrthaTá carachtair neamhuimhriúla i STRING-UID-NAMETá an comhthéacs as dátaCaithfear gss_init_sec_context() nó gss_accept_sec_context() a glaoch chun a fheidhm a chur i gcríchNí cheadaítear an oibríocht de bharr polasaí logánta slándálaNíl aon fháil ar an oibríocht nó ar an roghaNí ainm meicníochta é an t-ainm a tugadhNíorbh fhéidir an cháilíocht cosanta iarrtha a sholátharChuaigh na dintiúir tagartha as feidhmTá an dintiúr iarrtha ann cheanaCóip den cheadchomhartha roimhe seo an ceadchomhartha seoTá tréimhse bhailíochta an cheadchomhartha thartBain triail as `%s --help' chun tuilleadh eolais a fháil. Ní féidir an t-aitheantas úsáideora a réiteach mar ainmEarráid anaithnid krb5Sonraíodh cáilíocht cosanta nach bhfuil eolas uirthiCineál anaithnid sínithe sa cheadchomharthaEarráid gan sonrú sa bhunmheicníochtEarráid le linn deimhnithe| +-----------------+-----------------+---------------------------------+ Giotán31 24 23 16 15 0 gss-1.0.2/po/pl.gmo0000644000000000000000000001756211663554722010760 00000000000000@Yh4(,0D*u.# &? *f   = $ #) M i ( (   I ;b ; @  3 T Qt  + 9 "M p m 3 &**Q9|'/-'<&d ')1G"X!{1xg>D'K%s21'DZ0k"0 =EP$)01'H$pQA#AeG$ /:F  3I0&Wlg>#+75c'6#$;+`$#**-D,r:%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2011-11-25 00:57+0100 PO-Revision-Date: 2010-11-16 21:01+0100 Last-Translator: Jakub Bogusz Language-Team: Polish Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit MSB LSB +-----------------+-----------------+---------------------------------+ | Bd wywoania | Bd procedury | Dodatkowe informacje | | -h, --help Wypisanie tego opisu i zakoczenie -V, --version Wypisanie numeru wersji i zakoczenie -l, --list-mechanisms Informacje o obsugiwanych mechanizmach w postaci czytelnej dla czowieka -m, --major=LONG Opis "gwnego" kodu bdu w postaci tekstowej -q, --quiet Dziaanie bez komunikatw (domylnie wyczone) Dane uwierzytelniajce byy niepoprawnePniejszy token by ju przetworzonyParametr by le sformuowanyWymagany parametr wejciowy nie mg by odczytanyWymagany parametr wyjciowy nie mg by zapisanyPodana nazwa bya nieobsugiwanego typuToken mia bdny MICToken by bdnyNie otrzymano oczekiwanego tokenu dla komunikatuPodano bdn nazwPodano bdny kod stanudano nieobsugiwanego mechanizmuPrba uycia niepenego kontekstu bezpieczestwaAuthenticator nie ma pola subkeyZy rozmiar buforaInterfejs linii polece do GSS sucy do wyjaniania kodw bdw. Kontekst ju zosta w peni ustalonyNie mona przydzieli danych gss_buffer_tBufor danych uwierzytelniajcych nie zawiera TGTNieznany sposb uycia danych uwierzytelniajcychGwny kod stanu GSS-API %ld (0x%lx). Podano niepoprawne powizania kanauBdna dugo pola w tokenieMechanizm Kerberos V5 GSS-APIArgumenty obowizkowe dla opcji dugich s obowizkowe take dla opcji krtkich. Maskowany bd wywoania %ld (0x%lx) przesunity do %ld (0x%lx): Maskowany bd procedury %ld (0x%lx) przesunity do %ld (0x%lx): Maskowane dodatkowe informacje %ld (0x%lx) przesunite do %ld (0x%lx): Bdny kontekst komunikatuBrak @ w acuchu nazwy SERVICE-NAMENie ustalono kontekstuNie podano danych uwierzytelniajcych lub byy niedostpneBrak bduBrak bdu Brak bdu krb5aden zarzdca w keytab nie pasuje do danej nazwyZarzdca w buforze danych uwierzytelniajcych nie pasuje do danej nazwySTRING-UID-NAME zawiera znaki nie bdce cyframiKontekst wygasFunkcja gss_init_sec_context() lub gss_accept_sec_context() musi by wywoana ponownie aby dokoczy funkcjOperacja jest zabroniona przez lokaln polityk bezpieczestwaOperacja lub opcja jest niedostpnaDostarczona nazwa nie bya nazw mechanizmudana jako zabezpieczenia nie moga by zapewnionaWskazane dane uwierzytelniajce wygasydany element danych uwierzytelniajcych ju istniejeToken by duplikatem wczeniejszegoOkres poprawnoci tokenu min`%s --help' poda wicej informacji. UID nie rozwizuje si na nazw uytkownikaNieznany bd krb5Podano nieznan jako zabezpieczeniaNieznany rodzaj sygnatury w tokenieNieokrelony bd w podrzdnym mechanizmieSkadnia: %s OPCJE... Bd kontroli poprawnociwywietlenie kodu stanu nie powiodo si (%d)okrelanie mechanizmw nie powiodo si (%d)pobieranie informacji o mechanizmach nie powiodo si (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.2/configure0000755000000000000000000230167111663554703011130 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.67 for GNU Generic Security Service 1.0.2. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-gss@gnu.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Generic Security Service' PACKAGE_TARNAME='gss' PACKAGE_VERSION='1.0.2' PACKAGE_STRING='GNU Generic Security Service 1.0.2' PACKAGE_BUGREPORT='bug-gss@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gss/' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" gt_needs= gl_getopt_required=POSIX ac_header_list= gl_getopt_required=POSIX ac_func_list= ac_subst_vars='srcgltests_LTLIBOBJS srcgltests_LIBOBJS srcgl_LTLIBOBJS srcgl_LIBOBJS libgltests_LTLIBOBJS libgltests_LIBOBJS libgl_LTLIBOBJS libgl_LIBOBJS gltests_LTLIBOBJS gltests_LIBOBJS gl_LTLIBOBJS gl_LIBOBJS CONFIG_INCLUDE am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS WERROR_CFLAGS PO_SUFFIX GTK_DOC_USE_REBASE_FALSE GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_BUILD_PDF_FALSE GTK_DOC_BUILD_PDF_TRUE GTK_DOC_BUILD_HTML_FALSE GTK_DOC_BUILD_HTML_TRUE ENABLE_GTK_DOC_FALSE ENABLE_GTK_DOC_TRUE HTML_DIR GTKDOC_MKPDF GTKDOC_REBASE GTKDOC_CHECK PKG_CONFIG INCLUDE_GSS_KRB5_EXT INCLUDE_GSS_KRB5 KRB5_FALSE KRB5_TRUE LIBSHISHI_PREFIX LTLIBSHISHI LIBSHISHI HAVE_LIBSHISHI VERSION_NUMBER VERSION_PATCH VERSION_MINOR VERSION_MAJOR srcgltests_WITNESS HAVE_UNISTD_H NEXT_AS_FIRST_DIRECTIVE_UNISTD_H NEXT_UNISTD_H HAVE_WINSOCK2_H GL_GENERATE_STDARG_H_FALSE GL_GENERATE_STDARG_H_TRUE STDARG_H NEXT_AS_FIRST_DIRECTIVE_STDARG_H NEXT_STDARG_H HAVE_MSVC_INVALID_PARAMETER_HANDLER GETOPT_H HAVE_GETOPT_H NEXT_AS_FIRST_DIRECTIVE_GETOPT_H NEXT_GETOPT_H UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS UNISTD_H_HAVE_WINSOCK2_H REPLACE_WRITE REPLACE_USLEEP REPLACE_UNLINKAT REPLACE_UNLINK REPLACE_TTYNAME_R REPLACE_SYMLINK REPLACE_SLEEP REPLACE_RMDIR REPLACE_READLINK REPLACE_READ REPLACE_PWRITE REPLACE_PREAD REPLACE_LSEEK REPLACE_LINKAT REPLACE_LINK REPLACE_LCHOWN REPLACE_GETPAGESIZE REPLACE_GETGROUPS REPLACE_GETLOGIN_R REPLACE_GETDOMAINNAME REPLACE_GETCWD REPLACE_FCHOWNAT REPLACE_DUP2 REPLACE_DUP REPLACE_CLOSE REPLACE_CHOWN HAVE_SYS_PARAM_H HAVE_OS_H HAVE_DECL_TTYNAME_R HAVE_DECL_GETUSERSHELL HAVE_DECL_GETPAGESIZE HAVE_DECL_GETLOGIN_R HAVE_DECL_GETDOMAINNAME HAVE_DECL_FDATASYNC HAVE_DECL_FCHDIR HAVE_DECL_ENVIRON HAVE_USLEEP HAVE_UNLINKAT HAVE_SYMLINKAT HAVE_SYMLINK HAVE_SLEEP HAVE_READLINKAT HAVE_READLINK HAVE_PWRITE HAVE_PREAD HAVE_PIPE2 HAVE_PIPE HAVE_LINKAT HAVE_LINK HAVE_LCHOWN HAVE_GROUP_MEMBER HAVE_GETPAGESIZE HAVE_GETLOGIN HAVE_GETHOSTNAME HAVE_GETGROUPS HAVE_GETDTABLESIZE HAVE_FTRUNCATE HAVE_FSYNC HAVE_FDATASYNC HAVE_FCHOWNAT HAVE_FCHDIR HAVE_FACCESSAT HAVE_EUIDACCESS HAVE_DUP3 HAVE_DUP2 HAVE_CHOWN GNULIB_WRITE GNULIB_USLEEP GNULIB_UNLINKAT GNULIB_UNLINK GNULIB_UNISTD_H_SIGPIPE GNULIB_UNISTD_H_NONBLOCKING GNULIB_UNISTD_H_GETOPT GNULIB_TTYNAME_R GNULIB_SYMLINKAT GNULIB_SYMLINK GNULIB_SLEEP GNULIB_RMDIR GNULIB_READLINKAT GNULIB_READLINK GNULIB_READ GNULIB_PWRITE GNULIB_PREAD GNULIB_PIPE2 GNULIB_PIPE GNULIB_LSEEK GNULIB_LINKAT GNULIB_LINK GNULIB_LCHOWN GNULIB_GROUP_MEMBER GNULIB_GETUSERSHELL GNULIB_GETPAGESIZE GNULIB_GETLOGIN_R GNULIB_GETLOGIN GNULIB_GETHOSTNAME GNULIB_GETGROUPS GNULIB_GETDTABLESIZE GNULIB_GETDOMAINNAME GNULIB_GETCWD GNULIB_FTRUNCATE GNULIB_FSYNC GNULIB_FDATASYNC GNULIB_FCHOWNAT GNULIB_FCHDIR GNULIB_FACCESSAT GNULIB_EUIDACCESS GNULIB_ENVIRON GNULIB_DUP3 GNULIB_DUP2 GNULIB_DUP GNULIB_CLOSE GNULIB_CHOWN GNULIB_CHDIR EOVERFLOW_VALUE EOVERFLOW_HIDDEN ENOLINK_VALUE ENOLINK_HIDDEN EMULTIHOP_VALUE EMULTIHOP_HIDDEN GL_GENERATE_ERRNO_H_FALSE GL_GENERATE_ERRNO_H_TRUE ERRNO_H NEXT_AS_FIRST_DIRECTIVE_ERRNO_H NEXT_ERRNO_H libgltests_WITNESS NEXT_AS_FIRST_DIRECTIVE_STRING_H NEXT_STRING_H UNDEFINE_STRTOK_R REPLACE_STRTOK_R REPLACE_STRSIGNAL REPLACE_STRNLEN REPLACE_STRNDUP REPLACE_STRNCAT REPLACE_STRERROR_R REPLACE_STRERROR REPLACE_STRCHRNUL REPLACE_STRCASESTR REPLACE_STRSTR REPLACE_STRDUP REPLACE_STPNCPY REPLACE_MEMMEM REPLACE_MEMCHR HAVE_STRVERSCMP HAVE_DECL_STRSIGNAL HAVE_DECL_STRERROR_R HAVE_DECL_STRTOK_R HAVE_STRCASESTR HAVE_STRSEP HAVE_STRPBRK HAVE_DECL_STRNLEN HAVE_DECL_STRNDUP HAVE_DECL_STRDUP HAVE_STRCHRNUL HAVE_STPNCPY HAVE_STPCPY HAVE_RAWMEMCHR HAVE_DECL_MEMRCHR HAVE_MEMPCPY HAVE_DECL_MEMMEM HAVE_MEMCHR HAVE_FFSLL HAVE_FFSL HAVE_MBSLEN GNULIB_STRVERSCMP GNULIB_STRSIGNAL GNULIB_STRERROR_R GNULIB_STRERROR GNULIB_MBSTOK_R GNULIB_MBSSEP GNULIB_MBSSPN GNULIB_MBSPBRK GNULIB_MBSCSPN GNULIB_MBSCASESTR GNULIB_MBSPCASECMP GNULIB_MBSNCASECMP GNULIB_MBSCASECMP GNULIB_MBSSTR GNULIB_MBSRCHR GNULIB_MBSCHR GNULIB_MBSNLEN GNULIB_MBSLEN GNULIB_STRTOK_R GNULIB_STRCASESTR GNULIB_STRSTR GNULIB_STRSEP GNULIB_STRPBRK GNULIB_STRNLEN GNULIB_STRNDUP GNULIB_STRNCAT GNULIB_STRDUP GNULIB_STRCHRNUL GNULIB_STPNCPY GNULIB_STPCPY GNULIB_RAWMEMCHR GNULIB_MEMRCHR GNULIB_MEMPCPY GNULIB_MEMMEM GNULIB_MEMCHR GNULIB_FFSLL GNULIB_FFSL NEXT_AS_FIRST_DIRECTIVE_STDDEF_H NEXT_STDDEF_H PRAGMA_COLUMNS PRAGMA_SYSTEM_HEADER INCLUDE_NEXT_AS_FIRST_DIRECTIVE INCLUDE_NEXT GL_GENERATE_STDDEF_H_FALSE GL_GENERATE_STDDEF_H_TRUE STDDEF_H HAVE_WCHAR_T REPLACE_NULL HAVE_LD_OUTPUT_DEF_FALSE HAVE_LD_OUTPUT_DEF_TRUE gltests_WITNESS WARN_CFLAGS VALGRIND PMCCABE HAVE_LD_VERSION_SCRIPT_FALSE HAVE_LD_VERSION_SCRIPT_TRUE GL_COND_LIBTOOL_FALSE GL_COND_LIBTOOL_TRUE POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS DLL_VERSION HELP2MAN PERL OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL OBJDUMP DLLTOOL AS host_os host_vendor host_cpu host build_os build_vendor build_cpu build RANLIB ARFLAGS AR EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC LT_AGE LT_REVISION LT_CURRENT AM_BACKSLASH AM_DEFAULT_VERBOSITY am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld enable_libtool_lock enable_nls enable_rpath with_libiconv_prefix with_libintl_prefix enable_ld_version_script enable_valgrind_tests with_packager with_packager_version with_packager_bug_reports enable_kerberos5 with_libshishi_prefix with_html_dir enable_gtk_doc enable_gtk_doc_html enable_gtk_doc_pdf with_po_suffix enable_gcc_warnings ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures GNU Generic Security Service 1.0.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gss] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of GNU Generic Security Service 1.0.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --enable-ld-version-script enable linker version script (default is enabled when possible) --enable-valgrind-tests run self tests under valgrind --disable-kerberos5 disable Kerberos V5 mechanism unconditionally --enable-gtk-doc use gtk-doc to build documentation [[default=no]] --enable-gtk-doc-html build documentation in html format [[default=yes]] --enable-gtk-doc-pdf build documentation in pdf format [[default=no]] --enable-gcc-warnings turn on lots of GCC warnings (for developers) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-packager String identifying the packager of this software --with-packager-version Packager-specific version information --with-packager-bug-reports Packager info for bug reports (URL/e-mail/...) --with-libshishi-prefix[=DIR] search for libshishi in DIR/include and DIR/lib --without-libshishi-prefix don't search for libshishi in includedir and libdir --with-html-dir=PATH path to installed docs --with-po-suffix=STR add suffix to gettext translation domain Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . GNU Generic Security Service home page: . General help using GNU software: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF GNU Generic Security Service configure 1.0.2 generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval "test \"\${$3+set}\"" = set; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------ ## ## Report this to bug-gss@gnu.org ## ## ------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_decl # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by GNU Generic Security Service $as_me 1.0.2, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5 ; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi gt_needs="$gt_needs " gl_getopt_required=GNU as_fn_append ac_header_list " getopt.h" as_fn_append ac_func_list " _set_invalid_parameter_handler" as_fn_append ac_header_list " sys/socket.h" as_fn_append ac_header_list " unistd.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers config.h" am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gss' VERSION='1.0.2' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac AM_BACKSLASH='\' # Library code modified: REVISION++ # Interfaces changed/added/removed: CURRENT++ REVISION=0 # Interfaces added: AGE++ # Interfaces removed: AGE=0 LT_CURRENT=3 LT_REVISION=2 LT_AGE=0 # Checks for programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5 ; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5 ; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5 ; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5 ; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 $as_echo_n "checking for Minix Amsterdam compiler... " >&6; } if test "${gl_cv_c_amsterdam_compiler+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ACK__ Amsterdam #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Amsterdam" >/dev/null 2>&1; then : gl_cv_c_amsterdam_compiler=yes else gl_cv_c_amsterdam_compiler=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 $as_echo "$gl_cv_c_amsterdam_compiler" >&6; } if test -z "$AR"; then if test $gl_cv_c_amsterdam_compiler = yes; then AR='cc -c.a' if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="ar" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi if test -z "$ARFLAGS"; then ARFLAGS='cru' fi fi else if test -z "$ARFLAGS"; then ARFLAGS='cru' fi fi if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi fi fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Code from module autobuild: if test -z "$AB_PACKAGE"; then AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} fi { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild project... $AB_PACKAGE" >&5 $as_echo "$as_me: autobuild project... $AB_PACKAGE" >&6;} if test -z "$AB_VERSION"; then AB_VERSION=${PACKAGE_VERSION:-$VERSION} fi { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild revision... $AB_VERSION" >&5 $as_echo "$as_me: autobuild revision... $AB_VERSION" >&6;} hostname=`hostname` if test "$hostname"; then { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild hostname... $hostname" >&5 $as_echo "$as_me: autobuild hostname... $hostname" >&6;} fi date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` if test "$?" != 0; then date=`date` fi if test "$date"; then { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild timestamp... $date" >&5 $as_echo "$as_me: autobuild timestamp... $date" >&6;} fi # Code from module fdl-1.3: # Code from module gendocs: # Code from module gnumakefile: # Code from module gnupload: # Code from module gpl-3.0: # Code from module havelib: # Code from module lib-symbol-versions: # Code from module maintainer-makefile: # Code from module manywarnings: # Code from module pmccabe2html: # Code from module update-copyright: # Code from module useless-if-before-free: # Code from module valgrind-tests: # Code from module vc-list-files: # Code from module warnings: { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = x""yes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi case "$host_os" in hpux*) $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h # Code from module extensions: # Code from module gettext-h: # Code from module include_next: # Code from module lib-msvc-compat: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module stddef: # Code from module string: # Code from module strverscmp: case $ac_cv_prog_cc_stdc in #( no) : ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if test "${ac_cv_prog_cc_c99+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 else ac_cv_prog_cc_stdc=no fi fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 $as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } if test "${ac_cv_prog_cc_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 fi case $ac_cv_prog_cc_stdc in #( no) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; #( '') : { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; #( *) : { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 $as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; esac # Code from module errno: # Code from module error: # Code from module extensions: # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module gettext-h: # Code from module include_next: # Code from module intprops: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module nocrash: # Code from module progname: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module stdarg: # Code from module stddef: # Code from module strerror: # Code from module strerror-override: # Code from module string: # Code from module unistd: # Code from module verify: # Code from module version-etc: enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AS+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AS+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DLLTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.2.10' macro_revision='1.3175' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`print -r -- -n 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if test "${ac_cv_path_SED+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test "${lt_cv_path_NM+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DUMPBIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if test "${lt_cv_nm_interface+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if test "${lt_cv_sys_max_cmd_len+set}" = set; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if test "${lt_cv_cc_needs_belf+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_NMEDIT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LIPO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if test "${lt_cv_apple_cc_single_mod+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if test "${lt_cv_ld_force_load+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if test "${lt_cv_objdir+set}" = set; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' lt_prog_compiler_pic='-Xcompiler -fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld='-rpath $libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if test "${lt_cv_prog_compiler__b+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(void) {} _ACEOF if ac_fn_c_try_link "$LINENO"; then : archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if test "${lt_cv_archive_cmds_need_lc+set}" = set; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; haiku*) version_type=linux need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if test "${ac_cv_lib_svld_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) void fnord () __attribute__((visibility("default"))); #endif void fnord () { int i=42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self_static+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) void fnord () __attribute__((visibility("default"))); #endif void fnord () { int i=42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: PERL=${PERL-"${am_missing_run}perl"} HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"} # Used when creating libgss-XX.def. DLL_VERSION=`expr ${LT_CURRENT} - ${LT_AGE}` # Internationalization. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.18 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GMSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XGETTEXT+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGMERGE+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${acl_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${acl_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if test "${acl_cv_rpath+set}" = set; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if test "${gl_cv_solaris_64bit+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval "test \"\${$gt_func_gnugettext_libc+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if test "${am_cv_func_iconv+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if test "${am_cv_func_iconv_works+set}" = set; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval "test \"\${$gt_func_gnugettext_libintl+set}\"" = set; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" # For gnulib stuff. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ if true; then GL_COND_LIBTOOL_TRUE= GL_COND_LIBTOOL_FALSE='#' else GL_COND_LIBTOOL_TRUE='#' GL_COND_LIBTOOL_FALSE= fi gl_cond_libtool=true gl_m4_base='gl/m4' gl_source_base='gl' # Autoconf 2.61a.99 and earlier don't support linking a file only # in VPATH builds. But since GNUmakefile is for maintainer use # only, it does not matter if we skip the link with older autoconf. # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH # builds, so use a shell variable to bypass this. GNUmakefile=GNUmakefile ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile" # Check whether --enable-ld-version-script was given. if test "${enable_ld_version_script+set}" = set; then : enableval=$enable_ld_version_script; have_ld_version_script=$enableval fi if test -z "$have_ld_version_script"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if LD -Wl,--version-script works" >&5 $as_echo_n "checking if LD -Wl,--version-script works... " >&6; } save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" cat > conftest.map <conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_ld_version_script=yes else have_ld_version_script=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext rm -f conftest.map LDFLAGS="$save_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ld_version_script" >&5 $as_echo "$have_ld_version_script" >&6; } fi if test "$have_ld_version_script" = "yes"; then HAVE_LD_VERSION_SCRIPT_TRUE= HAVE_LD_VERSION_SCRIPT_FALSE='#' else HAVE_LD_VERSION_SCRIPT_TRUE='#' HAVE_LD_VERSION_SCRIPT_FALSE= fi # Extract the first word of "pmccabe", so it can be a program name with args. set dummy pmccabe; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PMCCABE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PMCCABE in [\\/]* | ?:[\\/]*) ac_cv_path_PMCCABE="$PMCCABE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PMCCABE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PMCCABE" && ac_cv_path_PMCCABE="false" ;; esac fi PMCCABE=$ac_cv_path_PMCCABE if test -n "$PMCCABE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PMCCABE" >&5 $as_echo "$PMCCABE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --enable-valgrind-tests was given. if test "${enable_valgrind_tests+set}" = set; then : enableval=$enable_valgrind_tests; opt_valgrind_tests=$enableval else opt_valgrind_tests=yes fi # Run self-tests under valgrind? if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then for ac_prog in valgrind do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_VALGRIND+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$VALGRIND"; then ac_cv_prog_VALGRIND="$VALGRIND" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_VALGRIND="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi VALGRIND=$ac_cv_prog_VALGRIND if test -n "$VALGRIND"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VALGRIND" >&5 $as_echo "$VALGRIND" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$VALGRIND" && break done fi OPTS="-q --error-exitcode=1 --leak-check=no" if test -n "$VALGRIND" \ && $VALGRIND $OPTS $SHELL -c 'exit 0' > /dev/null 2>&1; then opt_valgrind_tests=yes VALGRIND="$VALGRIND $OPTS" else opt_valgrind_tests=no VALGRIND= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether self tests are run under valgrind" >&5 $as_echo_n "checking whether self tests are run under valgrind... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $opt_valgrind_tests" >&5 $as_echo "$opt_valgrind_tests" >&6; } # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='gl/tests' gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS gl_module_indicator_condition=$gltests_WITNESS # Check whether --enable-valgrind-tests was given. if test "${enable_valgrind_tests+set}" = set; then : enableval=$enable_valgrind_tests; opt_valgrind_tests=$enableval else opt_valgrind_tests=yes fi # Run self-tests under valgrind? if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then for ac_prog in valgrind do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_VALGRIND+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$VALGRIND"; then ac_cv_prog_VALGRIND="$VALGRIND" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_VALGRIND="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi VALGRIND=$ac_cv_prog_VALGRIND if test -n "$VALGRIND"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VALGRIND" >&5 $as_echo "$VALGRIND" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$VALGRIND" && break done fi OPTS="-q --error-exitcode=1 --leak-check=no" if test -n "$VALGRIND" \ && $VALGRIND $OPTS $SHELL -c 'exit 0' > /dev/null 2>&1; then opt_valgrind_tests=yes VALGRIND="$VALGRIND $OPTS" else opt_valgrind_tests=no VALGRIND= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether self tests are run under valgrind" >&5 $as_echo_n "checking whether self tests are run under valgrind... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $opt_valgrind_tests" >&5 $as_echo "$opt_valgrind_tests" >&6; } REPLACE_NULL=0; HAVE_WCHAR_T=1; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 $as_echo_n "checking for wchar_t... " >&6; } if test "${gt_cv_c_wchar_t+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wchar_t=yes else gt_cv_c_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 $as_echo "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 $as_echo_n "checking whether the preprocessor supports include_next... " >&6; } if test "${gl_cv_have_include_next+set}" = set; then : $as_echo_n "(cached) " >&6 else rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_have_include_next=yes else CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_have_include_next=buggy else gl_cv_have_include_next=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 $as_echo "$gl_cv_have_include_next" >&6; } PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5 $as_echo_n "checking whether system header files limit the line length... " >&6; } if test "${gl_cv_pragma_columns+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __TANDEM choke me #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "choke me" >/dev/null 2>&1; then : gl_cv_pragma_columns=yes else gl_cv_pragma_columns=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5 $as_echo "$gl_cv_pragma_columns" >&6; } if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 $as_echo_n "checking for C/C++ restrict keyword... " >&6; } if test "${ac_cv_c_restrict+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_c_restrict=no # The order here caters to the fact that C++ does not require restrict. for ac_kw in __restrict __restrict__ _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int * int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int main () { int s[1]; int * $ac_kw t = s; t[0] = 0; return foo(t) ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 $as_echo "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) $as_echo "#define restrict /**/" >>confdefs.h ;; *) cat >>confdefs.h <<_ACEOF #define restrict $ac_cv_c_restrict _ACEOF ;; esac GNULIB_FFSL=0; GNULIB_FFSLL=0; GNULIB_MEMCHR=0; GNULIB_MEMMEM=0; GNULIB_MEMPCPY=0; GNULIB_MEMRCHR=0; GNULIB_RAWMEMCHR=0; GNULIB_STPCPY=0; GNULIB_STPNCPY=0; GNULIB_STRCHRNUL=0; GNULIB_STRDUP=0; GNULIB_STRNCAT=0; GNULIB_STRNDUP=0; GNULIB_STRNLEN=0; GNULIB_STRPBRK=0; GNULIB_STRSEP=0; GNULIB_STRSTR=0; GNULIB_STRCASESTR=0; GNULIB_STRTOK_R=0; GNULIB_MBSLEN=0; GNULIB_MBSNLEN=0; GNULIB_MBSCHR=0; GNULIB_MBSRCHR=0; GNULIB_MBSSTR=0; GNULIB_MBSCASECMP=0; GNULIB_MBSNCASECMP=0; GNULIB_MBSPCASECMP=0; GNULIB_MBSCASESTR=0; GNULIB_MBSCSPN=0; GNULIB_MBSPBRK=0; GNULIB_MBSSPN=0; GNULIB_MBSSEP=0; GNULIB_MBSTOK_R=0; GNULIB_STRERROR=0; GNULIB_STRERROR_R=0; GNULIB_STRSIGNAL=0; GNULIB_STRVERSCMP=0; HAVE_MBSLEN=0; HAVE_FFSL=1; HAVE_FFSLL=1; HAVE_MEMCHR=1; HAVE_DECL_MEMMEM=1; HAVE_MEMPCPY=1; HAVE_DECL_MEMRCHR=1; HAVE_RAWMEMCHR=1; HAVE_STPCPY=1; HAVE_STPNCPY=1; HAVE_STRCHRNUL=1; HAVE_DECL_STRDUP=1; HAVE_DECL_STRNDUP=1; HAVE_DECL_STRNLEN=1; HAVE_STRPBRK=1; HAVE_STRSEP=1; HAVE_STRCASESTR=1; HAVE_DECL_STRTOK_R=1; HAVE_DECL_STRERROR_R=1; HAVE_DECL_STRSIGNAL=1; HAVE_STRVERSCMP=1; REPLACE_MEMCHR=0; REPLACE_MEMMEM=0; REPLACE_STPNCPY=0; REPLACE_STRDUP=0; REPLACE_STRSTR=0; REPLACE_STRCASESTR=0; REPLACE_STRCHRNUL=0; REPLACE_STRERROR=0; REPLACE_STRERROR_R=0; REPLACE_STRNCAT=0; REPLACE_STRNDUP=0; REPLACE_STRNLEN=0; REPLACE_STRSIGNAL=0; REPLACE_STRTOK_R=0; UNDEFINE_STRTOK_R=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_string_h='<'string.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if test "${gl_cv_next_string_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'string.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"`'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 $as_echo "$gl_cv_next_string_h" >&6; } fi NEXT_STRING_H=$gl_cv_next_string_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'string.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_string_h fi NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive for gl_func in ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strsignal strverscmp; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval "test \"\${$as_gl_Symbol+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done if true; then GL_COND_LIBTOOL_TRUE= GL_COND_LIBTOOL_FALSE='#' else GL_COND_LIBTOOL_TRUE='#' GL_COND_LIBTOOL_FALSE= fi gl_cond_libtool=true gl_m4_base='lib/gl/m4' gl_source_base='lib/gl' { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gcc/ld supports -Wl,--output-def" >&5 $as_echo_n "checking if gcc/ld supports -Wl,--output-def... " >&6; } if test "${gl_cv_ld_output_def+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$enable_shared" = no; then gl_cv_ld_output_def="not needed, shared libraries are disabled" else gl_ldflags_save=$LDFLAGS LDFLAGS="-Wl,--output-def,conftest.def" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_ld_output_def=yes else gl_cv_ld_output_def=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext rm -f conftest.def LDFLAGS="$gl_ldflags_save" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_ld_output_def" >&5 $as_echo "$gl_cv_ld_output_def" >&6; } if test "x$gl_cv_ld_output_def" = "xyes"; then HAVE_LD_OUTPUT_DEF_TRUE= HAVE_LD_OUTPUT_DEF_FALSE='#' else HAVE_LD_OUTPUT_DEF_TRUE='#' HAVE_LD_OUTPUT_DEF_FALSE= fi STDDEF_H= if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 $as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } if test "${gl_cv_decl_null_works+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int test[2 * (sizeof NULL == sizeof (void *)) -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_decl_null_works=yes else gl_cv_decl_null_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 $as_echo "$gl_cv_decl_null_works" >&6; } if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi if test -n "$STDDEF_H"; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= fi if test -n "$STDDEF_H"; then if test $gl_cv_have_include_next = yes; then gl_cv_next_stddef_h='<'stddef.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if test "${gl_cv_next_stddef_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"`'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 $as_echo "$gl_cv_next_stddef_h" >&6; } fi NEXT_STDDEF_H=$gl_cv_next_stddef_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stddef.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stddef_h fi NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive fi for ac_func in strverscmp do : ac_fn_c_check_func "$LINENO" "strverscmp" "ac_cv_func_strverscmp" if test "x$ac_cv_func_strverscmp" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRVERSCMP 1 _ACEOF fi done if test $ac_cv_func_strverscmp = no; then HAVE_STRVERSCMP=0 fi if test $HAVE_STRVERSCMP = 0; then libgl_LIBOBJS="$libgl_LIBOBJS strverscmp.$ac_objext" : fi GNULIB_STRVERSCMP=1 $as_echo "#define GNULIB_TEST_STRVERSCMP 1" >>confdefs.h # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='lib/gl/tests' libgltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS gl_module_indicator_condition=$libgltests_WITNESS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 $as_echo_n "checking for complete errno.h... " >&6; } if test "${gl_cv_header_errno_h_complete+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "booboo" >/dev/null 2>&1; then : gl_cv_header_errno_h_complete=no else gl_cv_header_errno_h_complete=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 $as_echo "$gl_cv_header_errno_h_complete" >&6; } if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else if test $gl_cv_have_include_next = yes; then gl_cv_next_errno_h='<'errno.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if test "${gl_cv_next_errno_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'errno.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_next_errno_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"`'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 $as_echo "$gl_cv_next_errno_h" >&6; } fi NEXT_ERRNO_H=$gl_cv_next_errno_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'errno.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_errno_h fi NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive ERRNO_H='errno.h' fi if test -n "$ERRNO_H"; then GL_GENERATE_ERRNO_H_TRUE= GL_GENERATE_ERRNO_H_FALSE='#' else GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE= fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 $as_echo_n "checking for EMULTIHOP value... " >&6; } if test "${gl_cv_header_errno_h_EMULTIHOP+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EMULTIHOP=yes else gl_cv_header_errno_h_EMULTIHOP=no fi rm -f conftest* if test $gl_cv_header_errno_h_EMULTIHOP = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EMULTIHOP=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 $as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; } case $gl_cv_header_errno_h_EMULTIHOP in yes | no) EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= ;; *) EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" ;; esac fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 $as_echo_n "checking for ENOLINK value... " >&6; } if test "${gl_cv_header_errno_h_ENOLINK+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_ENOLINK=yes else gl_cv_header_errno_h_ENOLINK=no fi rm -f conftest* if test $gl_cv_header_errno_h_ENOLINK = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_ENOLINK=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_ENOLINK = hidden; then if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 $as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; } case $gl_cv_header_errno_h_ENOLINK in yes | no) ENOLINK_HIDDEN=0; ENOLINK_VALUE= ;; *) ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" ;; esac fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 $as_echo_n "checking for EOVERFLOW value... " >&6; } if test "${gl_cv_header_errno_h_EOVERFLOW+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EOVERFLOW=yes else gl_cv_header_errno_h_EOVERFLOW=no fi rm -f conftest* if test $gl_cv_header_errno_h_EOVERFLOW = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EOVERFLOW=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 $as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; } case $gl_cv_header_errno_h_EOVERFLOW in yes | no) EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= ;; *) EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" ;; esac fi ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" if test "x$ac_cv_have_decl_strerror_r" = x""yes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRERROR_R $ac_have_decl _ACEOF for ac_func in strerror_r do : ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" if test "x$ac_cv_func_strerror_r" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRERROR_R 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 $as_echo_n "checking whether strerror_r returns char *... " >&6; } if test "${ac_cv_func_strerror_r_char_p+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_func_strerror_r_char_p=no if test $ac_cv_have_decl_strerror_r = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); char *p = strerror_r (0, buf, sizeof buf); return !p || x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else # strerror_r is not declared. Choose between # systems that have relatively inaccessible declarations for the # function. BeOS and DEC UNIX 4.0 fall in this category, but the # former has a strerror_r that returns char*, while the latter # has a strerror_r that returns `int'. # This test should segfault on the DEC system. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default extern char *strerror_r (); int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); return ! isalpha (x); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 $as_echo "$ac_cv_func_strerror_r_char_p" >&6; } if test $ac_cv_func_strerror_r_char_p = yes; then $as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if test "${ac_cv_c_inline+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac XGETTEXT_EXTRA_OPTIONS= GNULIB_CHDIR=0; GNULIB_CHOWN=0; GNULIB_CLOSE=0; GNULIB_DUP=0; GNULIB_DUP2=0; GNULIB_DUP3=0; GNULIB_ENVIRON=0; GNULIB_EUIDACCESS=0; GNULIB_FACCESSAT=0; GNULIB_FCHDIR=0; GNULIB_FCHOWNAT=0; GNULIB_FDATASYNC=0; GNULIB_FSYNC=0; GNULIB_FTRUNCATE=0; GNULIB_GETCWD=0; GNULIB_GETDOMAINNAME=0; GNULIB_GETDTABLESIZE=0; GNULIB_GETGROUPS=0; GNULIB_GETHOSTNAME=0; GNULIB_GETLOGIN=0; GNULIB_GETLOGIN_R=0; GNULIB_GETPAGESIZE=0; GNULIB_GETUSERSHELL=0; GNULIB_GROUP_MEMBER=0; GNULIB_LCHOWN=0; GNULIB_LINK=0; GNULIB_LINKAT=0; GNULIB_LSEEK=0; GNULIB_PIPE=0; GNULIB_PIPE2=0; GNULIB_PREAD=0; GNULIB_PWRITE=0; GNULIB_READ=0; GNULIB_READLINK=0; GNULIB_READLINKAT=0; GNULIB_RMDIR=0; GNULIB_SLEEP=0; GNULIB_SYMLINK=0; GNULIB_SYMLINKAT=0; GNULIB_TTYNAME_R=0; GNULIB_UNISTD_H_GETOPT=0; GNULIB_UNISTD_H_NONBLOCKING=0; GNULIB_UNISTD_H_SIGPIPE=0; GNULIB_UNLINK=0; GNULIB_UNLINKAT=0; GNULIB_USLEEP=0; GNULIB_WRITE=0; HAVE_CHOWN=1; HAVE_DUP2=1; HAVE_DUP3=1; HAVE_EUIDACCESS=1; HAVE_FACCESSAT=1; HAVE_FCHDIR=1; HAVE_FCHOWNAT=1; HAVE_FDATASYNC=1; HAVE_FSYNC=1; HAVE_FTRUNCATE=1; HAVE_GETDTABLESIZE=1; HAVE_GETGROUPS=1; HAVE_GETHOSTNAME=1; HAVE_GETLOGIN=1; HAVE_GETPAGESIZE=1; HAVE_GROUP_MEMBER=1; HAVE_LCHOWN=1; HAVE_LINK=1; HAVE_LINKAT=1; HAVE_PIPE=1; HAVE_PIPE2=1; HAVE_PREAD=1; HAVE_PWRITE=1; HAVE_READLINK=1; HAVE_READLINKAT=1; HAVE_SLEEP=1; HAVE_SYMLINK=1; HAVE_SYMLINKAT=1; HAVE_UNLINKAT=1; HAVE_USLEEP=1; HAVE_DECL_ENVIRON=1; HAVE_DECL_FCHDIR=1; HAVE_DECL_FDATASYNC=1; HAVE_DECL_GETDOMAINNAME=1; HAVE_DECL_GETLOGIN_R=1; HAVE_DECL_GETPAGESIZE=1; HAVE_DECL_GETUSERSHELL=1; HAVE_DECL_TTYNAME_R=1; HAVE_OS_H=0; HAVE_SYS_PARAM_H=0; REPLACE_CHOWN=0; REPLACE_CLOSE=0; REPLACE_DUP=0; REPLACE_DUP2=0; REPLACE_FCHOWNAT=0; REPLACE_GETCWD=0; REPLACE_GETDOMAINNAME=0; REPLACE_GETLOGIN_R=0; REPLACE_GETGROUPS=0; REPLACE_GETPAGESIZE=0; REPLACE_LCHOWN=0; REPLACE_LINK=0; REPLACE_LINKAT=0; REPLACE_LSEEK=0; REPLACE_PREAD=0; REPLACE_PWRITE=0; REPLACE_READ=0; REPLACE_READLINK=0; REPLACE_RMDIR=0; REPLACE_SLEEP=0; REPLACE_SYMLINK=0; REPLACE_TTYNAME_R=0; REPLACE_UNLINK=0; REPLACE_UNLINKAT=0; REPLACE_USLEEP=0; REPLACE_WRITE=0; UNISTD_H_HAVE_WINSOCK2_H=0; UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test $gl_cv_have_include_next = yes; then gl_cv_next_getopt_h='<'getopt.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if test "${gl_cv_next_getopt_h+set}" = set; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_getopt_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'getopt.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_next_getopt_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"`'"' else gl_cv_next_getopt_h='<'getopt.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5 $as_echo "$gl_cv_next_getopt_h" >&6; } fi NEXT_GETOPT_H=$gl_cv_next_getopt_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'getopt.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_getopt_h fi NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi gl_replace_getopt= if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_header in getopt.h do : ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_H 1 _ACEOF else gl_replace_getopt=yes fi done fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_func in getopt_long_only do : ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only" if test "x$ac_cv_func_getopt_long_only" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_LONG_ONLY 1 _ACEOF else gl_replace_getopt=yes fi done fi if test -z "$gl_replace_getopt"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5 $as_echo_n "checking whether getopt is POSIX compatible... " >&6; } if test "${gl_cv_func_getopt_posix+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int *p = &optreset; return optreset; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_optind_min=1 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !getopt_clip; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_optind_min=1 else gl_optind_min=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext gl_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -DOPTIND_MIN=$gl_optind_min" if test "$cross_compiling" = yes; then : case "$host_os" in mingw*) gl_cv_func_getopt_posix="guessing no";; darwin* | aix*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; optind = OPTIND_MIN; opterr = 0; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; } /* Some internal state exists at this point. */ { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; optind = OPTIND_MIN; opterr = 0; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; } /* Detect MacOS 10.5, AIX 7.1 bug. */ { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; optind = OPTIND_MIN; opterr = 0; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_posix=yes else gl_cv_func_getopt_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CPPFLAGS=$gl_save_CPPFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5 $as_echo "$gl_cv_func_getopt_posix" >&6; } case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5 $as_echo_n "checking for working GNU getopt function... " >&6; } if test "${gl_cv_func_getopt_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on MacOS X. */ #include #include #include #include #include #include /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include #include static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include /* A POSIX signal handler. */ static void exception_handler (int sig) { exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif int main () { int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 32; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 64; else if (getopt (3, argv, "+:a:b") != ':') result |= 64; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 128; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_gnu=yes else gl_cv_func_getopt_gnu=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi case $gl_had_POSIXLY_CORRECT in exported) ;; yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;; *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5 $as_echo "$gl_cv_func_getopt_gnu" >&6; } if test "$gl_cv_func_getopt_gnu" = "no"; then gl_replace_getopt=yes fi fi REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then : REPLACE_GETOPT=1 fi if test $REPLACE_GETOPT = 1; then GETOPT_H=getopt.h $as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h GNULIB_UNISTD_H_GETOPT=1 fi ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default" if test "x$ac_cv_have_decl_getenv" = x""yes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETENV $ac_have_decl _ACEOF for ac_func in $ac_func_list do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done REPLACE_STRERROR_0=0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 $as_echo_n "checking whether strerror(0) succeeds... " >&6; } if test "${gl_cv_func_strerror_0_works+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_func_strerror_0_works="guessing no" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strerror_0_works=yes else gl_cv_func_strerror_0_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_0_works" >&5 $as_echo "$gl_cv_func_strerror_0_works" >&6; } if test "$gl_cv_func_strerror_0_works" != yes; then REPLACE_STRERROR_0=1 $as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi if true; then GL_COND_LIBTOOL_TRUE= GL_COND_LIBTOOL_FALSE='#' else GL_COND_LIBTOOL_TRUE='#' GL_COND_LIBTOOL_FALSE= fi gl_cond_libtool=true gl_m4_base='src/gl/m4' gl_source_base='src/gl' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 $as_echo_n "checking for error_at_line... " >&6; } if test "${ac_cv_lib_error_at_line+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_error_at_line=yes else ac_cv_lib_error_at_line=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 $as_echo "$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then srcgl_LIBOBJS="$srcgl_LIBOBJS error.$ac_objext" : fi XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" if test $REPLACE_GETOPT = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS getopt.$ac_objext" srcgl_LIBOBJS="$srcgl_LIBOBJS getopt1.$ac_objext" fi $as_echo "#define GNULIB_TEST_GETOPT_GNU 1" >>confdefs.h REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then : REPLACE_GETOPT=1 fi if test $REPLACE_GETOPT = 1; then GETOPT_H=getopt.h $as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h GNULIB_UNISTD_H_GETOPT=1 fi if test $REPLACE_GETOPT = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS getopt.$ac_objext" srcgl_LIBOBJS="$srcgl_LIBOBJS getopt1.$ac_objext" fi if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 $as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS msvc-inval.$ac_objext" fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS msvc-nothrow.$ac_objext" fi ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include " if test "x$ac_cv_have_decl_program_invocation_name" = x""yes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include " if test "x$ac_cv_have_decl_program_invocation_short_name" = x""yes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 $as_echo_n "checking for ssize_t... " >&6; } if test "${gt_cv_ssize_t+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_ssize_t=yes else gt_cv_ssize_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5 $as_echo "$gt_cv_ssize_t" >&6; } if test $gt_cv_ssize_t = no; then $as_echo "#define ssize_t int" >>confdefs.h fi STDARG_H='' NEXT_STDARG_H='' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5 $as_echo_n "checking for va_copy... " >&6; } if test "${gl_cv_func_va_copy+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef va_copy void (*func) (va_list, va_list) = va_copy; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func_va_copy=yes else gl_cv_func_va_copy=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_va_copy" >&5 $as_echo "$gl_cv_func_va_copy" >&6; } if test $gl_cv_func_va_copy = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _AIX && !defined __GNUC__ AIX vaccine #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "vaccine" >/dev/null 2>&1; then : gl_aixcc=yes else gl_aixcc=no fi rm -f conftest* if test $gl_aixcc = yes; then STDARG_H=stdarg.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdarg_h='<'stdarg.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if test "${gl_cv_next_stdarg_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdarg.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_next_stdarg_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"`'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdarg_h" >&5 $as_echo "$gl_cv_next_stdarg_h" >&6; } fi NEXT_STDARG_H=$gl_cv_next_stdarg_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdarg.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdarg_h fi NEXT_AS_FIRST_DIRECTIVE_STDARG_H=$gl_next_as_first_directive if test "$gl_cv_next_stdarg_h" = '""'; then gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' NEXT_STDARG_H="$gl_cv_next_stdarg_h" fi else saved_as_echo_n="$as_echo_n" as_echo_n=':' if test "${gl_cv_func___va_copy+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef __va_copy error, bail out #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_func___va_copy=yes else gl_cv_func___va_copy=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi as_echo_n="$saved_as_echo_n" if test $gl_cv_func___va_copy = yes; then $as_echo "#define va_copy __va_copy" >>confdefs.h else $as_echo "#define va_copy gl_va_copy" >>confdefs.h fi fi fi if test -n "$STDARG_H"; then GL_GENERATE_STDARG_H_TRUE= GL_GENERATE_STDARG_H_FALSE='#' else GL_GENERATE_STDARG_H_TRUE='#' GL_GENERATE_STDARG_H_FALSE= fi STDDEF_H= if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 STDDEF_H=stddef.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 $as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } if test "${gl_cv_decl_null_works+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int test[2 * (sizeof NULL == sizeof (void *)) -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_decl_null_works=yes else gl_cv_decl_null_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 $as_echo "$gl_cv_decl_null_works" >&6; } if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 STDDEF_H=stddef.h fi if test -n "$STDDEF_H"; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= fi if test -n "$STDDEF_H"; then if test $gl_cv_have_include_next = yes; then gl_cv_next_stddef_h='<'stddef.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if test "${gl_cv_next_stddef_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"`'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 $as_echo "$gl_cv_next_stddef_h" >&6; } fi NEXT_STDDEF_H=$gl_cv_next_stddef_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stddef.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stddef_h fi NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive fi if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 $as_echo_n "checking for working strerror function... " >&6; } if test "${gl_cv_func_working_strerror+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_func_working_strerror="guessing no" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { if (!*strerror (-2)) return 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_working_strerror=yes else gl_cv_func_working_strerror=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_strerror" >&5 $as_echo "$gl_cv_func_working_strerror" >&6; } if test "$gl_cv_func_working_strerror" != yes; then REPLACE_STRERROR=1 fi else REPLACE_STRERROR=1 fi if test $REPLACE_STRERROR = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS strerror.$ac_objext" fi cat >>confdefs.h <<_ACEOF #define GNULIB_STRERROR 1 _ACEOF GNULIB_STRERROR=1 $as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS strerror-override.$ac_objext" if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi fi if test $gl_cv_have_include_next = yes; then gl_cv_next_unistd_h='<'unistd.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if test "${gl_cv_next_unistd_h+set}" = set; then : $as_echo_n "(cached) " >&6 else if test $ac_cv_header_unistd_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'unistd.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_next_unistd_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"`'"' else gl_cv_next_unistd_h='<'unistd.h'>' fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5 $as_echo "$gl_cv_next_unistd_h" >&6; } fi NEXT_UNISTD_H=$gl_cv_next_unistd_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'unistd.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_unistd_h fi NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi for gl_func in chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sleep symlink symlinkat ttyname_r unlink unlinkat usleep; do as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5 $as_echo_n "checking whether $gl_func is declared without a macro... " >&6; } if eval "test \"\${$as_gl_Symbol+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H # include #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include # endif #endif int main () { #undef $gl_func (void) $gl_func; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_gl_Symbol=yes" else eval "$as_gl_Symbol=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_gl_Symbol { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1 _ACEOF eval ac_cv_have_decl_$gl_func=yes fi done # Check whether --with-packager was given. if test "${with_packager+set}" = set; then : withval=$with_packager; case $withval in yes|no) ;; *) cat >>confdefs.h <<_ACEOF #define PACKAGE_PACKAGER "$withval" _ACEOF ;; esac fi # Check whether --with-packager-version was given. if test "${with_packager_version+set}" = set; then : withval=$with_packager_version; case $withval in yes|no) ;; *) cat >>confdefs.h <<_ACEOF #define PACKAGE_PACKAGER_VERSION "$withval" _ACEOF ;; esac fi # Check whether --with-packager-bug-reports was given. if test "${with_packager_bug_reports+set}" = set; then : withval=$with_packager_bug_reports; case $withval in yes|no) ;; *) cat >>confdefs.h <<_ACEOF #define PACKAGE_PACKAGER_BUG_REPORTS "$withval" _ACEOF ;; esac fi if test "X$with_packager" = "X" && \ test "X$with_packager_version$with_packager_bug_reports" != "X" then as_fn_error $? "The --with-packager-{bug-reports,version} options require --with-packager" "$LINENO" 5 fi # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='src/gl/tests' srcgltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS gl_module_indicator_condition=$srcgltests_WITNESS # For gss.h. VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/\(.*\)\..*\..*/\1/g'` VERSION_MINOR=`echo $PACKAGE_VERSION | sed 's/.*\.\(.*\)\..*/\1/g'` VERSION_PATCH=`echo $PACKAGE_VERSION | sed 's/.*\..*\.\(.*\)/\1/g'` VERSION_NUMBER=`printf "0x%02x%02x%02x" $VERSION_MAJOR $VERSION_MINOR $VERSION_PATCH` # Test for Shishi. # Check whether --enable-kerberos5 was given. if test "${enable_kerberos5+set}" = set; then : enableval=$enable_kerberos5; kerberos5=$enableval fi if test "$kerberos5" != "no" ; then use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libshishi-prefix was given. if test "${with_libshishi_prefix+set}" = set; then : withval=$with_libshishi_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBSHISHI= LTLIBSHISHI= INCSHISHI= LIBSHISHI_PREFIX= HAVE_LIBSHISHI= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='shishi ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBSHISHI; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBSHISHI; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$found_so" else LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$found_a" else LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'shishi'; then LIBSHISHI_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'shishi'; then LIBSHISHI_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCSHISHI; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCSHISHI="${INCSHISHI}${INCSHISHI:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBSHISHI; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBSHISHI; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$dep" LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }$dep" ;; esac done fi else LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }-l$name" LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }-R$found_dir" done fi ac_save_CPPFLAGS="$CPPFLAGS" for element in $INCSHISHI; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libshishi" >&5 $as_echo_n "checking for libshishi... " >&6; } if test "${ac_cv_libshishi+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS="$LIBS" case " $LIBSHISHI" in *" -l"*) LIBS="$LIBS $LIBSHISHI" ;; *) LIBS="$LIBSHISHI $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { shishi_key_timestamp (0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_libshishi=yes else ac_cv_libshishi='no' fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libshishi" >&5 $as_echo "$ac_cv_libshishi" >&6; } if test "$ac_cv_libshishi" = yes; then HAVE_LIBSHISHI=yes $as_echo "#define HAVE_LIBSHISHI 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libshishi" >&5 $as_echo_n "checking how to link with libshishi... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBSHISHI" >&5 $as_echo "$LIBSHISHI" >&6; } else HAVE_LIBSHISHI=no CPPFLAGS="$ac_save_CPPFLAGS" LIBSHISHI= LTLIBSHISHI= LIBSHISHI_PREFIX= fi if test "$ac_cv_libshishi" = yes; then $as_echo "#define USE_KERBEROS5 1" >>confdefs.h INCLUDE_GSS_KRB5='# include ' INCLUDE_GSS_KRB5_EXT='# include ' kerberos5=yes else kerberos5=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the Kerberos V5 mechanism should be supported" >&5 $as_echo_n "checking if the Kerberos V5 mechanism should be supported... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kerberos5" >&5 $as_echo "$kerberos5" >&6; } if test "$kerberos5" = "yes"; then KRB5_TRUE= KRB5_FALSE='#' else KRB5_TRUE='#' KRB5_FALSE= fi # Check for gtk-doc. if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GTKDOC_CHECK+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_CHECK in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK if test -n "$GTKDOC_CHECK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 $as_echo "$GTKDOC_CHECK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi for ac_prog in gtkdoc-rebase do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GTKDOC_REBASE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_REBASE in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE if test -n "$GTKDOC_REBASE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 $as_echo "$GTKDOC_REBASE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$GTKDOC_REBASE" && break done test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true" # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. set dummy gtkdoc-mkpdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GTKDOC_MKPDF+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GTKDOC_MKPDF in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF if test -n "$GTKDOC_MKPDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 $as_echo "$GTKDOC_MKPDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-html-dir was given. if test "${with_html_dir+set}" = set; then : withval=$with_html_dir; else with_html_dir='${datadir}/gtk-doc/html' fi HTML_DIR="$with_html_dir" # Check whether --enable-gtk-doc was given. if test "${enable_gtk_doc+set}" = set; then : enableval=$enable_gtk_doc; else enable_gtk_doc=no fi if test x$enable_gtk_doc = xyes; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : else as_fn_error $? "You need to have gtk-doc >= 1.1 installed to build $PACKAGE_NAME" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 $as_echo_n "checking whether to build gtk-doc documentation... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 $as_echo "$enable_gtk_doc" >&6; } # Check whether --enable-gtk-doc-html was given. if test "${enable_gtk_doc_html+set}" = set; then : enableval=$enable_gtk_doc_html; else enable_gtk_doc_html=yes fi # Check whether --enable-gtk-doc-pdf was given. if test "${enable_gtk_doc_pdf+set}" = set; then : enableval=$enable_gtk_doc_pdf; else enable_gtk_doc_pdf=no fi if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi if test x$enable_gtk_doc = xyes; then ENABLE_GTK_DOC_TRUE= ENABLE_GTK_DOC_FALSE='#' else ENABLE_GTK_DOC_TRUE='#' ENABLE_GTK_DOC_FALSE= fi if test x$enable_gtk_doc_html = xyes; then GTK_DOC_BUILD_HTML_TRUE= GTK_DOC_BUILD_HTML_FALSE='#' else GTK_DOC_BUILD_HTML_TRUE='#' GTK_DOC_BUILD_HTML_FALSE= fi if test x$enable_gtk_doc_pdf = xyes; then GTK_DOC_BUILD_PDF_TRUE= GTK_DOC_BUILD_PDF_FALSE='#' else GTK_DOC_BUILD_PDF_TRUE='#' GTK_DOC_BUILD_PDF_FALSE= fi if test -n "$LIBTOOL"; then GTK_DOC_USE_LIBTOOL_TRUE= GTK_DOC_USE_LIBTOOL_FALSE='#' else GTK_DOC_USE_LIBTOOL_TRUE='#' GTK_DOC_USE_LIBTOOL_FALSE= fi if test -n "$GTKDOC_REBASE"; then GTK_DOC_USE_REBASE_TRUE= GTK_DOC_USE_REBASE_FALSE='#' else GTK_DOC_USE_REBASE_TRUE='#' GTK_DOC_USE_REBASE_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettext translation domain suffix to use" >&5 $as_echo_n "checking for gettext translation domain suffix to use... " >&6; } # Check whether --with-po-suffix was given. if test "${with_po_suffix+set}" = set; then : withval=$with_po_suffix; po_suffix=$withval else po_suffix=no fi if test "$po_suffix" = "yes"; then PO_SUFFIX=$DLL_VERSION elif test "$po_suffix" != "no" ; then PO_SUFFIX=$po_suffix fi if test -n "$PO_SUFFIX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PO_SUFFIX" >&5 $as_echo "$PO_SUFFIX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi cat >>confdefs.h <<_ACEOF #define PO_SUFFIX "$PO_SUFFIX" _ACEOF # Check whether --enable-gcc-warnings was given. if test "${enable_gcc_warnings+set}" = set; then : enableval=$enable_gcc_warnings; case $enableval in yes|no) ;; *) as_fn_error $? "bad value $enableval for gcc-warnings option" "$LINENO" 5 ;; esac gl_gcc_warnings=$enableval else gl_gcc_warnings=no fi if test "$gl_gcc_warnings" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Werror" >&5 $as_echo_n "checking whether compiler handles -Werror... " >&6; } if test "${gl_cv_warn__Werror+set}" = set; then : $as_echo_n "(cached) " >&6 else gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="${CPPFLAGS} -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : gl_cv_warn__Werror=yes else gl_cv_warn__Werror=no fi rm -f conftest.err conftest.i conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Werror" >&5 $as_echo "$gl_cv_warn__Werror" >&6; } if test "x$gl_cv_warn__Werror" = x""yes; then : as_fn_append WERROR_CFLAGS " -Werror" fi nw="$nw -Wsystem-headers" # Ignore errors in system headers nw="$nw -Wc++-compat" # We don't care much about C++ compilers nw="$nw -Wconversion" # Too many warnings for now nw="$nw -Wsign-conversion" # Too many warnings for now nw="$nw -Wcast-qual" # Too many warnings for now nw="$nw -Wtraditional" # Warns on #elif which we use often nw="$nw -Wunreachable-code" # False positive on strcmp nw="$nw -Wpadded" # Standard GSS-API headers are unpadded nw="$nw -Wtraditional-conversion" # Too many warnings for now nw="$nw -Wsuggest-attribute=pure" # Is it worth using attributes? nw="$nw -Wsuggest-attribute=const" # Is it worth using attributes? if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wno-missing-field-initializers is supported" >&5 $as_echo_n "checking whether -Wno-missing-field-initializers is supported... " >&6; } if test "${gl_cv_cc_nomfi_supported+set}" = set; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_nomfi_supported=yes else gl_cv_cc_nomfi_supported=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_nomfi_supported" >&5 $as_echo "$gl_cv_cc_nomfi_supported" >&6; } if test "$gl_cv_cc_nomfi_supported" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wno-missing-field-initializers is needed" >&5 $as_echo_n "checking whether -Wno-missing-field-initializers is needed... " >&6; } if test "${gl_cv_cc_nomfi_needed+set}" = set; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ void f (void) { typedef struct { int a; int b; } s_t; s_t s1 = { 0, }; } int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_nomfi_needed=no else gl_cv_cc_nomfi_needed=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_nomfi_needed" >&5 $as_echo "$gl_cv_cc_nomfi_needed" >&6; } fi fi gl_manywarn_set= for gl_manywarn_item in \ -Wall \ -W \ -Wformat-y2k \ -Wformat-nonliteral \ -Wformat-security \ -Winit-self \ -Wmissing-include-dirs \ -Wswitch-default \ -Wswitch-enum \ -Wunused \ -Wunknown-pragmas \ -Wstrict-aliasing \ -Wstrict-overflow \ -Wsystem-headers \ -Wfloat-equal \ -Wtraditional \ -Wtraditional-conversion \ -Wdeclaration-after-statement \ -Wundef \ -Wshadow \ -Wunsafe-loop-optimizations \ -Wpointer-arith \ -Wbad-function-cast \ -Wc++-compat \ -Wcast-qual \ -Wcast-align \ -Wwrite-strings \ -Wconversion \ -Wsign-conversion \ -Wlogical-op \ -Waggregate-return \ -Wstrict-prototypes \ -Wold-style-definition \ -Wmissing-prototypes \ -Wmissing-declarations \ -Wmissing-noreturn \ -Wmissing-format-attribute \ -Wpacked \ -Wpadded \ -Wredundant-decls \ -Wnested-externs \ -Wunreachable-code \ -Winline \ -Winvalid-pch \ -Wlong-long \ -Wvla \ -Wvolatile-register-var \ -Wdisabled-optimization \ -Wstack-protector \ -Woverlength-strings \ -Wbuiltin-macro-redefined \ -Wmudflap \ -Wpacked-bitfield-compat \ -Wsync-nand \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # The following are not documented in the manual but are included in # output from gcc --help=warnings. for gl_manywarn_item in \ -Wattributes \ -Wcoverage-mismatch \ -Wmultichar \ -Wunused-macros \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # More warnings from gcc 4.6.2 --help=warnings. for gl_manywarn_item in \ -Wabi \ -Wcpp \ -Wdeprecated \ -Wdeprecated-declarations \ -Wdiv-by-zero \ -Wdouble-promotion \ -Wendif-labels \ -Wextra \ -Wformat-contains-nul \ -Wformat-extra-args \ -Wformat-zero-length \ -Wformat=2 \ -Wmultichar \ -Wnormalized=nfc \ -Woverflow \ -Wpointer-to-int-cast \ -Wpragmas \ -Wsuggest-attribute=const \ -Wsuggest-attribute=noreturn \ -Wsuggest-attribute=pure \ -Wtrampolines \ -Wunsuffixed-float-constants \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # Disable the missing-field-initializers warning if needed if test "$gl_cv_cc_nomfi_needed" = yes; then gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" fi ws=$gl_manywarn_set gl_warn_set= set x $ws; shift for gl_warn_item do case " $nw " in *" $gl_warn_item "*) ;; *) gl_warn_set="$gl_warn_set $gl_warn_item" ;; esac done ws=$gl_warn_set for w in $ws; do as_gl_Warn=`$as_echo "gl_cv_warn_$w" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles $w" >&5 $as_echo_n "checking whether compiler handles $w... " >&6; } if eval "test \"\${$as_gl_Warn+set}\"" = set; then : $as_echo_n "(cached) " >&6 else gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="${CPPFLAGS} $w" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : eval "$as_gl_Warn=yes" else eval "$as_gl_Warn=no" fi rm -f conftest.err conftest.i conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" fi eval ac_res=\$$as_gl_Warn { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Warn"\" = x"yes"; then : as_fn_append WARN_CFLAGS " $w" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-unused-parameter" >&5 $as_echo_n "checking whether compiler handles -Wno-unused-parameter... " >&6; } if test "${gl_cv_warn__Wno_unused_parameter+set}" = set; then : $as_echo_n "(cached) " >&6 else gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="${CPPFLAGS} -Wno-unused-parameter" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : gl_cv_warn__Wno_unused_parameter=yes else gl_cv_warn__Wno_unused_parameter=no fi rm -f conftest.err conftest.i conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_unused_parameter" >&5 $as_echo "$gl_cv_warn__Wno_unused_parameter" >&6; } if test "x$gl_cv_warn__Wno_unused_parameter" = x""yes; then : as_fn_append WARN_CFLAGS " -Wno-unused-parameter" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-stack-protector" >&5 $as_echo_n "checking whether compiler handles -Wno-stack-protector... " >&6; } if test "${gl_cv_warn__Wno_stack_protector+set}" = set; then : $as_echo_n "(cached) " >&6 else gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="${CPPFLAGS} -Wno-stack-protector" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : gl_cv_warn__Wno_stack_protector=yes else gl_cv_warn__Wno_stack_protector=no fi rm -f conftest.err conftest.i conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_stack_protector" >&5 $as_echo "$gl_cv_warn__Wno_stack_protector" >&6; } if test "x$gl_cv_warn__Wno_stack_protector" = x""yes; then : as_fn_append WARN_CFLAGS " -Wno-stack-protector" fi # Some functions cannot be protected { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -fdiagnostics-show-option" >&5 $as_echo_n "checking whether compiler handles -fdiagnostics-show-option... " >&6; } if test "${gl_cv_warn__fdiagnostics_show_option+set}" = set; then : $as_echo_n "(cached) " >&6 else gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="${CPPFLAGS} -fdiagnostics-show-option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : gl_cv_warn__fdiagnostics_show_option=yes else gl_cv_warn__fdiagnostics_show_option=no fi rm -f conftest.err conftest.i conftest.$ac_ext CPPFLAGS="$gl_save_CPPFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__fdiagnostics_show_option" >&5 $as_echo "$gl_cv_warn__fdiagnostics_show_option" >&6; } if test "x$gl_cv_warn__fdiagnostics_show_option" = x""yes; then : as_fn_append WARN_CFLAGS " -fdiagnostics-show-option" fi fi ac_config_files="$ac_config_files Makefile doc/Makefile doc/cyclo/Makefile doc/reference/Makefile doc/reference/version.xml gl/Makefile gss.pc lib/Makefile lib/gl/Makefile lib/headers/gss.h lib/krb5/Makefile po/Makefile.in po/Makevars src/Makefile src/gl/Makefile tests/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then as_fn_error $? "conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi CONFIG_INCLUDE=config.h gl_libobjs= gl_ltlibobjs= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" done fi gl_LIBOBJS=$gl_libobjs gl_LTLIBOBJS=$gl_ltlibobjs gltests_libobjs= gltests_ltlibobjs= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" done fi gltests_LIBOBJS=$gltests_libobjs gltests_LTLIBOBJS=$gltests_ltlibobjs if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LD_OUTPUT_DEF_TRUE}" && test -z "${HAVE_LD_OUTPUT_DEF_FALSE}"; then as_fn_error $? "conditional \"HAVE_LD_OUTPUT_DEF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi libgl_libobjs= libgl_ltlibobjs= if test -n "$libgl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $libgl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do libgl_libobjs="$libgl_libobjs $i.$ac_objext" libgl_ltlibobjs="$libgl_ltlibobjs $i.lo" done fi libgl_LIBOBJS=$libgl_libobjs libgl_LTLIBOBJS=$libgl_ltlibobjs libgltests_libobjs= libgltests_ltlibobjs= if test -n "$libgltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $libgltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do libgltests_libobjs="$libgltests_libobjs $i.$ac_objext" libgltests_ltlibobjs="$libgltests_ltlibobjs $i.lo" done fi libgltests_LIBOBJS=$libgltests_libobjs libgltests_LTLIBOBJS=$libgltests_ltlibobjs if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_ERRNO_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDARG_H_TRUE}" && test -z "${GL_GENERATE_STDARG_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDARG_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi srcgl_libobjs= srcgl_ltlibobjs= if test -n "$srcgl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $srcgl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do srcgl_libobjs="$srcgl_libobjs $i.$ac_objext" srcgl_ltlibobjs="$srcgl_ltlibobjs $i.lo" done fi srcgl_LIBOBJS=$srcgl_libobjs srcgl_LTLIBOBJS=$srcgl_ltlibobjs srcgltests_libobjs= srcgltests_ltlibobjs= if test -n "$srcgltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $srcgltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do srcgltests_libobjs="$srcgltests_libobjs $i.$ac_objext" srcgltests_ltlibobjs="$srcgltests_ltlibobjs $i.lo" done fi srcgltests_LIBOBJS=$srcgltests_libobjs srcgltests_LTLIBOBJS=$srcgltests_ltlibobjs if test -z "${KRB5_TRUE}" && test -z "${KRB5_FALSE}"; then as_fn_error $? "conditional \"KRB5\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then as_fn_error $? "conditional \"ENABLE_GTK_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_HTML\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_BUILD_PDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by GNU Generic Security Service $as_me 1.0.2, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_links="$ac_config_links" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration links: $config_links Configuration commands: $config_commands Report bugs to . GNU Generic Security Service home page: . General help using GNU software: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ GNU Generic Security Service config.status 1.0.2 configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" GNUmakefile=$GNUmakefile _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/cyclo/Makefile") CONFIG_FILES="$CONFIG_FILES doc/cyclo/Makefile" ;; "doc/reference/Makefile") CONFIG_FILES="$CONFIG_FILES doc/reference/Makefile" ;; "doc/reference/version.xml") CONFIG_FILES="$CONFIG_FILES doc/reference/version.xml" ;; "gl/Makefile") CONFIG_FILES="$CONFIG_FILES gl/Makefile" ;; "gss.pc") CONFIG_FILES="$CONFIG_FILES gss.pc" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "lib/gl/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gl/Makefile" ;; "lib/headers/gss.h") CONFIG_FILES="$CONFIG_FILES lib/headers/gss.h" ;; "lib/krb5/Makefile") CONFIG_FILES="$CONFIG_FILES lib/krb5/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "po/Makevars") CONFIG_FILES="$CONFIG_FILES po/Makevars" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/gl/Makefile") CONFIG_FILES="$CONFIG_FILES src/gl/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :L) # # CONFIG_LINK # if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then : else # Prefer the file from the source tree if names are identical. if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then ac_source=$srcdir/$ac_source fi { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 $as_echo "$as_me: linking $ac_source to $ac_file" >&6;} if test ! -r "$ac_source"; then as_fn_error $? "$ac_source: file not found" "$LINENO" 5 fi rm -f "$ac_file" # Try a relative symlink, then a hard link, then a copy. case $ac_source in [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; *) ac_rel_source=$ac_top_build_prefix$ac_source ;; esac ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || ln "$ac_source" "$ac_file" 2>/dev/null || cp -p "$ac_source" "$ac_file" || as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010 Free Software Foundation, # Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == "file_magic". file_magic_cmd=$lt_file_magic_cmd # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: summary of build options: version: ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE Host type: ${host} Install prefix: ${prefix} Compiler: ${CC} Warning flags: errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS} Library types: Shared=${enable_shared}, Static=${enable_static} Valgrind: ${VALGRIND} Version script: $have_ld_version_script Enable krb5 mech: $kerberos5 I18n domain suffix: ${PO_SUFFIX:-none} " >&5 $as_echo "$as_me: summary of build options: version: ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE Host type: ${host} Install prefix: ${prefix} Compiler: ${CC} Warning flags: errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS} Library types: Shared=${enable_shared}, Static=${enable_static} Valgrind: ${VALGRIND} Version script: $have_ld_version_script Enable krb5 mech: $kerberos5 I18n domain suffix: ${PO_SUFFIX:-none} " >&6;} gss-1.0.2/.clcopying0000644000000000000000000000030611546676326011204 00000000000000 ----- Copyright (C) 2003-2011 Simon Josefsson Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved. gss-1.0.2/configure.ac0000644000000000000000000001243511662460016011472 00000000000000dnl Process this file with autoconf to produce a configure script. # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. AC_PREREQ(2.61) AC_INIT([GNU Generic Security Service], [1.0.2], [bug-gss@gnu.org], [gss]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS(config.h) AM_INIT_AUTOMAKE([1.10 -Wall -Werror -Wno-override]) AM_SILENT_RULES([yes]) # Library code modified: REVISION++ # Interfaces changed/added/removed: CURRENT++ REVISION=0 # Interfaces added: AGE++ # Interfaces removed: AGE=0 AC_SUBST(LT_CURRENT, 3) AC_SUBST(LT_REVISION, 2) AC_SUBST(LT_AGE, 0) # Checks for programs. AC_PROG_CC gl_EARLY libgl_EARLY srcgl_EARLY AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL AM_MISSING_PROG(PERL, perl, $missing_dir) AM_MISSING_PROG(HELP2MAN, help2man, $missing_dir) # Used when creating libgss-XX.def. DLL_VERSION=`expr ${LT_CURRENT} - ${LT_AGE}` AC_SUBST(DLL_VERSION) # Internationalization. AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.18.1]) # For gnulib stuff. gl_INIT libgl_INIT srcgl_INIT # For gss.h. VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/\(.*\)\..*\..*/\1/g'` VERSION_MINOR=`echo $PACKAGE_VERSION | sed 's/.*\.\(.*\)\..*/\1/g'` VERSION_PATCH=`echo $PACKAGE_VERSION | sed 's/.*\..*\.\(.*\)/\1/g'` AC_SUBST(VERSION_MAJOR) AC_SUBST(VERSION_MINOR) AC_SUBST(VERSION_PATCH) VERSION_NUMBER=`printf "0x%02x%02x%02x" $VERSION_MAJOR $VERSION_MINOR $VERSION_PATCH` AC_SUBST(VERSION_NUMBER) # Test for Shishi. AC_ARG_ENABLE(kerberos5, AC_HELP_STRING([--disable-kerberos5], [disable Kerberos V5 mechanism unconditionally]), kerberos5=$enableval) if test "$kerberos5" != "no" ; then AC_LIB_HAVE_LINKFLAGS(shishi,, [#include ], [shishi_key_timestamp (0);]) if test "$ac_cv_libshishi" = yes; then AC_DEFINE([USE_KERBEROS5], 1, [Define to 1 if you want Kerberos 5 mech.]) INCLUDE_GSS_KRB5='# include ' INCLUDE_GSS_KRB5_EXT='# include ' kerberos5=yes else kerberos5=no fi fi AC_MSG_CHECKING([if the Kerberos V5 mechanism should be supported]) AC_MSG_RESULT($kerberos5) AM_CONDITIONAL(KRB5, test "$kerberos5" = "yes") AC_SUBST(INCLUDE_GSS_KRB5) AC_SUBST(INCLUDE_GSS_KRB5_EXT) # Check for gtk-doc. GTK_DOC_CHECK(1.1) sj_PO_SUFFIX($DLL_VERSION) AC_ARG_ENABLE([gcc-warnings], [AS_HELP_STRING([--enable-gcc-warnings], [turn on lots of GCC warnings (for developers)])], [case $enableval in yes|no) ;; *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;; esac gl_gcc_warnings=$enableval], [gl_gcc_warnings=no] ) if test "$gl_gcc_warnings" = yes; then gl_WARN_ADD([-Werror], [WERROR_CFLAGS]) nw="$nw -Wsystem-headers" # Ignore errors in system headers nw="$nw -Wc++-compat" # We don't care much about C++ compilers nw="$nw -Wconversion" # Too many warnings for now nw="$nw -Wsign-conversion" # Too many warnings for now nw="$nw -Wcast-qual" # Too many warnings for now nw="$nw -Wtraditional" # Warns on #elif which we use often nw="$nw -Wunreachable-code" # False positive on strcmp nw="$nw -Wpadded" # Standard GSS-API headers are unpadded nw="$nw -Wtraditional-conversion" # Too many warnings for now nw="$nw -Wsuggest-attribute=pure" # Is it worth using attributes? nw="$nw -Wsuggest-attribute=const" # Is it worth using attributes? gl_MANYWARN_ALL_GCC([ws]) gl_MANYWARN_COMPLEMENT(ws, [$ws], [$nw]) for w in $ws; do gl_WARN_ADD([$w]) done gl_WARN_ADD([-Wno-unused-parameter]) gl_WARN_ADD([-Wno-stack-protector]) # Some functions cannot be protected gl_WARN_ADD([-fdiagnostics-show-option]) fi AC_CONFIG_FILES([ Makefile doc/Makefile doc/cyclo/Makefile doc/reference/Makefile doc/reference/version.xml gl/Makefile gss.pc lib/Makefile lib/gl/Makefile lib/headers/gss.h lib/krb5/Makefile po/Makefile.in po/Makevars src/Makefile src/gl/Makefile tests/Makefile ]) AC_OUTPUT AC_MSG_NOTICE([summary of build options: version: ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE Host type: ${host} Install prefix: ${prefix} Compiler: ${CC} Warning flags: errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS} Library types: Shared=${enable_shared}, Static=${enable_static} Valgrind: ${VALGRIND} Version script: $have_ld_version_script Enable krb5 mech: $kerberos5 I18n domain suffix: ${PO_SUFFIX:-none} ]) gss-1.0.2/maint.mk0000644000000000000000000016011211662446265010653 00000000000000# -*-Makefile-*- # This Makefile fragment tries to be general-purpose enough to be # used by many projects via the gnulib maintainer-makefile module. ## Copyright (C) 2001-2011 Free Software Foundation, Inc. ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program. If not, see . # This is reported not to work with make-3.79.1 # ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) ME := maint.mk # Diagnostic for continued use of deprecated variable. # Remove in 2013 ifneq ($(build_aux),) $(error "$(ME): \ set $$(_build-aux) relative to $$(srcdir) instead of $$(build_aux)") endif # Do not save the original name or timestamp in the .tar.gz file. # Use --rsyncable if available. gzip_rsyncable := \ $(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null \ && printf %s --rsyncable) GZIP_ENV = '--no-name --best $(gzip_rsyncable)' GIT = git VC = $(GIT) VC_LIST = $(srcdir)/$(_build-aux)/vc-list-files -C $(srcdir) # You can override this variable in cfg.mk to set your own regexp # matching files to ignore. VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$ # This is to preprocess robustly the output of $(VC_LIST), so that even # when $(srcdir) is a pathological name like "....", the leading sed command # removes only the intended prefix. _dot_escaped_srcdir = $(subst .,\.,$(srcdir)) # Post-process $(VC_LIST) output, prepending $(srcdir)/, but only # when $(srcdir) is not ".". ifeq ($(srcdir),.) _prepend_srcdir_prefix = else _prepend_srcdir_prefix = | sed 's|^|$(srcdir)/|' endif # In order to be able to consistently filter "."-relative names, # (i.e., with no $(srcdir) prefix), this definition is careful to # remove any $(srcdir) prefix, and to restore what it removes. _sc_excl = \ $(if $(exclude_file_name_regexp--$@),$(exclude_file_name_regexp--$@),^$$) VC_LIST_EXCEPT = \ $(VC_LIST) | sed 's|^$(_dot_escaped_srcdir)/||' \ | if test -f $(srcdir)/.x-$@; then grep -vEf $(srcdir)/.x-$@; \ else grep -Ev -e "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi \ | grep -Ev -e '($(VC_LIST_ALWAYS_EXCLUDE_REGEX)|$(_sc_excl))' \ $(_prepend_srcdir_prefix) ifeq ($(origin prev_version_file), undefined) prev_version_file = $(srcdir)/.prev-version endif PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null) VERSION_REGEXP = $(subst .,\.,$(VERSION)) PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION)) ifeq ($(VC),$(GIT)) this-vc-tag = v$(VERSION) this-vc-tag-regexp = v$(VERSION_REGEXP) else tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]') tag-this-version = $(subst .,_,$(VERSION)) this-vc-tag = $(tag-package)-$(tag-this-version) this-vc-tag-regexp = $(this-vc-tag) endif my_distdir = $(PACKAGE)-$(VERSION) # Old releases are stored here. release_archive_dir ?= ../release # Override gnu_rel_host and url_dir_list in cfg.mk if these are not right. # Use alpha.gnu.org for alpha and beta releases. # Use ftp.gnu.org for stable releases. gnu_ftp_host-alpha = alpha.gnu.org gnu_ftp_host-beta = alpha.gnu.org gnu_ftp_host-stable = ftp.gnu.org gnu_rel_host ?= $(gnu_ftp_host-$(RELEASE_TYPE)) ifeq ($(gnu_rel_host),ftp.gnu.org) url_dir_list ?= http://ftpmirror.gnu.org/$(PACKAGE) else url_dir_list ?= ftp://$(gnu_rel_host)/gnu/$(PACKAGE) endif # Override this in cfg.mk if you are using a different format in your # NEWS file. today = $(shell date +%Y-%m-%d) # Select which lines of NEWS are searched for $(news-check-regexp). # This is a sed line number spec. The default says that we search # lines 1..10 of NEWS for $(news-check-regexp). # If you want to search only line 3 or only lines 20-22, use "3" or "20,22". news-check-lines-spec ?= 1,10 news-check-regexp ?= '^\*.* $(VERSION_REGEXP) \($(today)\)' # Prevent programs like 'sort' from considering distinct strings to be equal. # Doing it here saves us from having to set LC_ALL elsewhere in this file. export LC_ALL = C ## --------------- ## ## Sanity checks. ## ## --------------- ## _cfg_mk := $(shell test -f $(srcdir)/cfg.mk && echo '$(srcdir)/cfg.mk') # Collect the names of rules starting with `sc_'. syntax-check-rules := $(sort $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' \ $(srcdir)/$(ME) $(_cfg_mk))) .PHONY: $(syntax-check-rules) ifeq ($(shell $(VC_LIST) >/dev/null 2>&1; echo $$?),0) local-checks-available += $(syntax-check-rules) else local-checks-available += no-vc-detected no-vc-detected: @echo "No version control files detected; skipping syntax check" endif .PHONY: $(local-checks-available) # Arrange to print the name of each syntax-checking rule just before running it. $(syntax-check-rules): %: %.m sc_m_rules_ = $(patsubst %, %.m, $(syntax-check-rules)) .PHONY: $(sc_m_rules_) $(sc_m_rules_): @echo $(patsubst sc_%.m, %, $@) @date +%s.%N > .sc-start-$(basename $@) # Compute and print the elapsed time for each syntax-check rule. sc_z_rules_ = $(patsubst %, %.z, $(syntax-check-rules)) .PHONY: $(sc_z_rules_) $(sc_z_rules_): %.z: % @end=$$(date +%s.%N); \ start=$$(cat .sc-start-$*); \ rm -f .sc-start-$*; \ awk -v s=$$start -v e=$$end \ 'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null # The patsubst here is to replace each sc_% rule with its sc_%.z wrapper # that computes and prints elapsed time. local-check := \ $(patsubst sc_%, sc_%.z, \ $(filter-out $(local-checks-to-skip), $(local-checks-available))) syntax-check: $(local-check) # _sc_search_regexp # # This macro searches for a given construct in the selected files and # then takes some action. # # Parameters (shell variables): # # prohibit | require # # Regular expression (ERE) denoting either a forbidden construct # or a required construct. Those arguments are exclusive. # # in_vc_files | in_files # # grep-E-style regexp denoting the files to check. If no files # are specified the default are all the files that are under # version control. # # containing | non_containing # # Select the files (non) containing strings matching this regexp. # If both arguments are specified then CONTAINING takes # precedence. # # with_grep_options # # Extra options for grep. # # ignore_case # # Ignore case. # # halt # # Message to display before to halting execution. # # Finally, you may exempt files based on an ERE matching file names. # For example, to exempt from the sc_space_tab check all files with the # .diff suffix, set this Make variable: # # exclude_file_name_regexp--sc_space_tab = \.diff$ # # Note that while this functionality is mostly inherited via VC_LIST_EXCEPT, # when filtering by name via in_files, we explicitly filter out matching # names here as well. # By default, _sc_search_regexp does not ignore case. export ignore_case = _ignore_case = $$(test -n "$$ignore_case" && printf %s -i || :) define _sc_say_and_exit dummy=; : so we do not need a semicolon before each use; \ { printf '%s\n' "$(ME): $$msg" 1>&2; exit 1; }; endef # _sc_search_regexp used to be named _prohibit_regexp. However, # upgrading to the new definition and leaving the old name undefined # would usually convert each custom rule using $(_prohibit_regexp) # (usually defined in cfg.mk) into a no-op. This definition ensures # that people know right away if they're still using the old name. # FIXME: remove in 2012. _prohibit_regexp = \ $(error '*** you need to s/_prohibit_regexp/_sc_search_regexp/, and adapt') define _sc_search_regexp dummy=; : so we do not need a semicolon before each use; \ \ : Check arguments; \ test -n "$$prohibit" && test -n "$$require" \ && { msg='Cannot specify both prohibit and require' \ $(_sc_say_and_exit) } || :; \ test -z "$$prohibit" && test -z "$$require" \ && { msg='Should specify either prohibit or require' \ $(_sc_say_and_exit) } || :; \ test -n "$$in_vc_files" && test -n "$$in_files" \ && { msg='Cannot specify both in_vc_files and in_files' \ $(_sc_say_and_exit) } || :; \ test "x$$halt" != x \ || { msg='halt not defined' $(_sc_say_and_exit) }; \ \ : Filter by file name; \ if test -n "$$in_files"; then \ files=$$(find $(srcdir) | grep -E "$$in_files" \ | grep -Ev '$(exclude_file_name_regexp--$@)'); \ else \ files=$$($(VC_LIST_EXCEPT)); \ if test -n "$$in_vc_files"; then \ files=$$(echo "$$files" | grep -E "$$in_vc_files"); \ fi; \ fi; \ \ : Filter by content; \ test -n "$$files" && test -n "$$containing" \ && { files=$$(grep -l "$$containing" $$files); } || :; \ test -n "$$files" && test -n "$$non_containing" \ && { files=$$(grep -vl "$$non_containing" $$files); } || :; \ \ : Check for the construct; \ if test -n "$$files"; then \ if test -n "$$prohibit"; then \ grep $$with_grep_options $(_ignore_case) -nE "$$prohibit" $$files \ && { msg="$$halt" $(_sc_say_and_exit) } || :; \ else \ grep $$with_grep_options $(_ignore_case) -LE "$$require" $$files \ | grep . \ && { msg="$$halt" $(_sc_say_and_exit) } || :; \ fi \ else :; \ fi || :; endef sc_avoid_if_before_free: @$(srcdir)/$(_build-aux)/useless-if-before-free \ $(useless_free_options) \ $$($(VC_LIST_EXCEPT) | grep -v useless-if-before-free) && \ { echo '$(ME): found useless "if" before "free" above' 1>&2; \ exit 1; } || : sc_cast_of_argument_to_free: @prohibit='\&2; exit 1; } || : # Pass EXIT_*, not number, to usage, exit, and error (when exiting) # Convert all uses automatically, via these two commands: # git grep -l '\&2; \ exit 1; } || : # Error messages should not start with a capital letter sc_error_message_uppercase: @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \ | grep -E '"[A-Z]' \ | grep -vE '"FATAL|"WARNING|"Java|"C#|PRIuMAX' && \ { echo '$(ME): found capitalized error message' 1>&2; \ exit 1; } || : # Error messages should not end with a period sc_error_message_period: @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \ | grep -E '[^."]\."' && \ { echo '$(ME): found error message ending in period' 1>&2; \ exit 1; } || : sc_file_system: @prohibit=file''system \ ignore_case=1 \ halt='found use of "file''system"; spell it "file system"' \ $(_sc_search_regexp) # Don't use cpp tests of this symbol. All code assumes config.h is included. sc_prohibit_have_config_h: @prohibit='^# *if.*HAVE''_CONFIG_H' \ halt='found use of HAVE''_CONFIG_H; remove' \ $(_sc_search_regexp) # Nearly all .c files must include . However, we also permit this # via inclusion of a package-specific header, if cfg.mk specified one. # config_h_header must be suitable for grep -E. config_h_header ?= sc_require_config_h: @require='^# *include $(config_h_header)' \ in_vc_files='\.c$$' \ halt='the above files do not include ' \ $(_sc_search_regexp) # You must include before including any other header file. # This can possibly be via a package-specific header, if given by cfg.mk. sc_require_config_h_first: @if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then \ fail=0; \ for i in $$($(VC_LIST_EXCEPT) | grep '\.c$$'); do \ grep '^# *include\>' $$i | sed 1q \ | grep -E '^# *include $(config_h_header)' > /dev/null \ || { echo $$i; fail=1; }; \ done; \ test $$fail = 1 && \ { echo '$(ME): the above files include some other header' \ 'before ' 1>&2; exit 1; } || :; \ else :; \ fi sc_prohibit_HAVE_MBRTOWC: @prohibit='\bHAVE_MBRTOWC\b' \ halt="do not use $$prohibit; it is always defined" \ $(_sc_search_regexp) # To use this "command" macro, you must first define two shell variables: # h: the header name, with no enclosing <> or "" # re: a regular expression that matches IFF something provided by $h is used. define _sc_header_without_use dummy=; : so we do not need a semicolon before each use; \ h_esc=`echo '[<"]'"$$h"'[">]'|sed 's/\./\\\\./g'`; \ if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then \ files=$$(grep -l '^# *include '"$$h_esc" \ $$($(VC_LIST_EXCEPT) | grep '\.c$$')) && \ grep -LE "$$re" $$files | grep . && \ { echo "$(ME): the above files include $$h but don't use it" \ 1>&2; exit 1; } || :; \ else :; \ fi endef # Prohibit the inclusion of assert.h without an actual use of assert. sc_prohibit_assert_without_use: @h='assert.h' re='\new(file => "/dev/stdin")->as_string'|sed 's/\?://g' # Note this was produced by the above: # _xa1 = \ #x(((2n?)?re|c(har)?|n(re|m)|z)alloc|alloc_(oversized|die)|m(alloc|emdup)|strdup) # But we can do better, in at least two ways: # 1) take advantage of two "dup"-suffixed strings: # x(((2n?)?re|c(har)?|n(re|m)|[mz])alloc|alloc_(oversized|die)|(mem|str)dup) # 2) notice that "c(har)?|[mz]" is equivalent to the shorter and more readable # "char|[cmz]" # x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) _xa1 = x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) _xa2 = X([CZ]|N?M)ALLOC sc_prohibit_xalloc_without_use: @h='xalloc.h' \ re='\<($(_xa1)|$(_xa2)) *\('\ $(_sc_header_without_use) # Extract function names: # perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/hash.h _hash_re = \ clear|delete|free|get_(first|next)|insert|lookup|print_statistics|reset_tuning _hash_fn = \<($(_hash_re)) *\( _hash_struct = (struct )?\<[Hh]ash_(table|tuning)\> sc_prohibit_hash_without_use: @h='hash.h' \ re='$(_hash_fn)|$(_hash_struct)'\ $(_sc_header_without_use) sc_prohibit_cloexec_without_use: @h='cloexec.h' re='\<(set_cloexec_flag|dup_cloexec) *\(' \ $(_sc_header_without_use) sc_prohibit_posixver_without_use: @h='posixver.h' re='\' \ halt='do not use HAVE''_FCNTL_H or O'_NDELAY \ $(_sc_search_regexp) # FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ # Each nonempty ChangeLog line must start with a year number, or a TAB. sc_changelog: @prohibit='^[^12 ]' \ in_vc_files='^ChangeLog$$' \ halt='found unexpected prefix in a ChangeLog' \ $(_sc_search_regexp) # Ensure that each .c file containing a "main" function also # calls set_program_name. sc_program_name: @require='set_program_name *\(m?argv\[0\]\);' \ in_vc_files='\.c$$' \ containing='\
/dev/null \ && : || { die=1; echo $$i; } \ done; \ test $$die = 1 && \ { echo 1>&2 '$(ME): the final line in each of the above is not:'; \ echo 1>&2 'Exit something'; \ exit 1; } || :; \ fi sc_trailing_blank: @prohibit='[ ]$$' \ halt='found trailing blank(s)' \ $(_sc_search_regexp) # Match lines like the following, but where there is only one space # between the options and the description: # -D, --all-repeated[=delimit-method] print all duplicate lines\n longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)? sc_two_space_separator_in_usage: @prohibit='^ *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$' \ halt='help2man requires at least two spaces between an option and its description'\ $(_sc_search_regexp) # A regexp matching function names like "error" that may be used # to emit translatable messages. _gl_translatable_diag_func_re ?= error # Look for diagnostics that aren't marked for translation. # This won't find any for which error's format string is on a separate line. sc_unmarked_diagnostics: @grep -nE \ '\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \ $$($(VC_LIST_EXCEPT)) \ | grep -Ev '(_|ngettext ?)\(' && \ { echo '$(ME): found unmarked diagnostic(s)' 1>&2; \ exit 1; } || : # Avoid useless parentheses like those in this example: # #if defined (SYMBOL) || defined (SYM2) sc_useless_cpp_parens: @prohibit='^# *if .*defined *\(' \ halt='found useless parentheses in cpp directive' \ $(_sc_search_regexp) # List headers for which HAVE_HEADER_H is always true, assuming you are # using the appropriate gnulib module. CAUTION: for each "unnecessary" # #if HAVE_HEADER_H that you remove, be sure that your project explicitly # requires the gnulib module that guarantees the usability of that header. gl_assured_headers_ = \ cd $(gnulib_dir)/lib && echo *.in.h|sed 's/\.in\.h//g' # Convert the list of names to upper case, and replace each space with "|". az_ = abcdefghijklmnopqrstuvwxyz AZ_ = ABCDEFGHIJKLMNOPQRSTUVWXYZ gl_header_upper_case_or_ = \ $$($(gl_assured_headers_) \ | tr $(az_)/.- $(AZ_)___ \ | tr -s ' ' '|' \ ) sc_prohibit_always_true_header_tests: @or=$(gl_header_upper_case_or_); \ re="HAVE_($$or)_H"; \ prohibit='\<'"$$re"'\>' \ halt=$$(printf '%s\n' \ 'do not test the above HAVE_
_H symbol(s);' \ ' with the corresponding gnulib module, they are always true') \ $(_sc_search_regexp) # ================================================================== gl_other_headers_ ?= \ intprops.h \ openat.h \ stat-macros.h # Perl -lne code to extract "significant" cpp-defined symbols from a # gnulib header file, eliminating a few common false-positives. # The exempted names below are defined only conditionally in gnulib, # and hence sometimes must/may be defined in application code. gl_extract_significant_defines_ = \ /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\ && $$2 !~ /(?:rpl_|_used_without_)/\ && $$1 !~ /^(?:NSIG|ENODATA)$$/\ && $$1 !~ /^(?:SA_RESETHAND|SA_RESTART)$$/\ and print $$1 # Create a list of regular expressions matching the names # of macros that are guaranteed to be defined by parts of gnulib. define def_sym_regex gen_h=$(gl_generated_headers_); \ (cd $(gnulib_dir)/lib; \ for f in *.in.h $(gl_other_headers_); do \ test -f $$f \ && perl -lne '$(gl_extract_significant_defines_)' $$f; \ done; \ ) | sort -u \ | sed 's/^/^ *# *(define|undef) */;s/$$/\\>/' endef # Don't define macros that we already get from gnulib header files. sc_prohibit_always-defined_macros: @if test -d $(gnulib_dir); then \ case $$(echo all: | grep -l -f - Makefile) in Makefile);; *) \ echo '$(ME): skipping $@: you lack GNU grep' 1>&2; exit 0;; \ esac; \ $(def_sym_regex) | grep -E -f - $$($(VC_LIST_EXCEPT)) \ && { echo '$(ME): define the above via some gnulib .h file' \ 1>&2; exit 1; } || :; \ fi # ================================================================== # Prohibit checked in backup files. sc_prohibit_backup_files: @$(VC_LIST) | grep '~$$' && \ { echo '$(ME): found version controlled backup file' 1>&2; \ exit 1; } || : # Require the latest GPL. sc_GPL_version: @prohibit='either ''version [^3]' \ halt='GPL vN, N!=3' \ $(_sc_search_regexp) # Require the latest GFDL. Two regexp, since some .texi files end up # line wrapping between 'Free Documentation License,' and 'Version'. _GFDL_regexp = (Free ''Documentation.*Version 1\.[^3]|Version 1\.[^3] or any) sc_GFDL_version: @prohibit='$(_GFDL_regexp)' \ halt='GFDL vN, N!=3' \ $(_sc_search_regexp) # Don't use Texinfo's @acronym{}. # http://lists.gnu.org/archive/html/bug-gnulib/2010-03/msg00321.html texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$ sc_texinfo_acronym: @prohibit='@acronym\{' \ in_vc_files='$(texinfo_suffix_re_)' \ halt='found use of Texinfo @acronym{}' \ $(_sc_search_regexp) cvs_keywords = \ Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State sc_prohibit_cvs_keyword: @prohibit='\$$($(cvs_keywords))\$$' \ halt='do not use CVS keyword expansion' \ $(_sc_search_regexp) # This Perl code is slightly obfuscated. Not only is each "$" doubled # because it's in a Makefile, but the $$c's are comments; we cannot # use "#" due to the way the script ends up concatenated onto one line. # It would be much more concise, and would produce better output (including # counts) if written as: # perl -ln -0777 -e '/\n(\n+)$/ and print "$ARGV: ".length $1' ... # but that would be far less efficient, reading the entire contents # of each file, rather than just the last two bytes of each. # In addition, while the code below detects both blank lines and a missing # newline at EOF, the above detects only the former. # # This is a perl script that is expected to be the single-quoted argument # to a command-line "-le". The remaining arguments are file names. # Print the name of each file that ends in exactly one newline byte. # I.e., warn if there are blank lines (2 or more newlines), or if the # last byte is not a newline. However, currently we don't complain # about any file that contains exactly one byte. # Exit nonzero if at least one such file is found, otherwise, exit 0. # Warn about, but otherwise ignore open failure. Ignore seek/read failure. # # Use this if you want to remove trailing empty lines from selected files: # perl -pi -0777 -e 's/\n\n+$/\n/' files... # require_exactly_one_NL_at_EOF_ = \ foreach my $$f (@ARGV) \ { \ open F, "<", $$f or (warn "failed to open $$f: $$!\n"), next; \ my $$p = sysseek (F, -2, 2); \ my $$c = "seek failure probably means file has < 2 bytes; ignore"; \ my $$last_two_bytes; \ defined $$p and $$p = sysread F, $$last_two_bytes, 2; \ close F; \ $$c = "ignore read failure"; \ $$p && ($$last_two_bytes eq "\n\n" \ || substr ($$last_two_bytes,1) ne "\n") \ and (print $$f), $$fail=1; \ } \ END { exit defined $$fail } sc_prohibit_empty_lines_at_EOF: @perl -le '$(require_exactly_one_NL_at_EOF_)' $$($(VC_LIST_EXCEPT)) \ || { echo '$(ME): empty line(s) or no newline at EOF' \ 1>&2; exit 1; } || : # Make sure we don't use st_blocks. Use ST_NBLOCKS instead. # This is a bit of a kludge, since it prevents use of the string # even in comments, but for now it does the job with no false positives. sc_prohibit_stat_st_blocks: @prohibit='[.>]st_blocks' \ halt='do not use st_blocks; use ST_NBLOCKS' \ $(_sc_search_regexp) # Make sure we don't define any S_IS* macros in src/*.c files. # They're already defined via gnulib's sys/stat.h replacement. sc_prohibit_S_IS_definition: @prohibit='^ *# *define *S_IS' \ halt='do not define S_IS* macros; include ' \ $(_sc_search_regexp) # Perl block to convert a match to FILE_NAME:LINENO:TEST, # that is shared by two definitions below. perl_filename_lineno_text_ = \ -e ' {' \ -e ' $$n = ($$` =~ tr/\n/\n/ + 1);' \ -e ' ($$v = $$&) =~ s/\n/\\n/g;' \ -e ' print "$$ARGV:$$n:$$v\n";' \ -e ' }' prohibit_doubled_word_RE_ ?= \ /\b(then?|[iao]n|i[fst]|but|f?or|at|and|[dt]o)\s+\1\b/gims prohibit_doubled_word_ = \ -e 'while ($(prohibit_doubled_word_RE_))' \ $(perl_filename_lineno_text_) # Define this to a regular expression that matches # any filename:dd:match lines you want to ignore. # The default is to ignore no matches. ignore_doubled_word_match_RE_ ?= ^$$ sc_prohibit_doubled_word: @perl -n -0777 $(prohibit_doubled_word_) $$($(VC_LIST_EXCEPT)) \ | grep -vE '$(ignore_doubled_word_match_RE_)' \ | grep . && { echo '$(ME): doubled words' 1>&2; exit 1; } || : # A regular expression matching undesirable combinations of words like # "can not"; this matches them even when the two words appear on different # lines, but not when there is an intervening delimiter like "#" or "*". prohibit_undesirable_word_seq_RE_ ?= \ /\bcan\s+not\b/gims prohibit_undesirable_word_seq_ = \ -e 'while ($(prohibit_undesirable_word_seq_RE_))' \ $(perl_filename_lineno_text_) # Define this to a regular expression that matches # any filename:dd:match lines you want to ignore. # The default is to ignore no matches. ignore_undesirable_word_sequence_RE_ ?= ^$$ sc_prohibit_undesirable_word_seq: @perl -n -0777 $(prohibit_undesirable_word_seq_) \ $$($(VC_LIST_EXCEPT)) \ | grep -vE '$(ignore_undesirable_word_sequence_RE_)' | grep . \ && { echo '$(ME): undesirable word sequence' >&2; exit 1; } || : _ptm1 = use "test C1 && test C2", not "test C1 -''a C2" _ptm2 = use "test C1 || test C2", not "test C1 -''o C2" # Using test's -a and -o operators is not portable. # We prefer test over [, since the latter is spelled [[ in configure.ac. sc_prohibit_test_minus_ao: @prohibit='(\ /dev/null \ || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \ done; \ test $$fail = 1 && \ { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \ exit 1; } || :; \ fi # Warn about "c0nst struct Foo const foo[]", # but not about "char const *const foo" or "#define const const". sc_redundant_const: @prohibit='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b' \ halt='redundant "const" in declarations' \ $(_sc_search_regexp) sc_const_long_option: @grep '^ *static.*struct option ' $$($(VC_LIST_EXCEPT)) \ | grep -Ev 'const struct option|struct option const' && { \ echo 1>&2 '$(ME): add "const" to the above declarations'; \ exit 1; } || : NEWS_hash = \ $$(sed -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p' \ $(srcdir)/NEWS \ | perl -0777 -pe \ 's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms' \ | md5sum - \ | sed 's/ .*//') # Ensure that we don't accidentally insert an entry into an old NEWS block. sc_immutable_NEWS: @if test -f $(srcdir)/NEWS; then \ test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : || \ { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \ fi # Update the hash stored above. Do this after each release and # for any corrections to old entries. update-NEWS-hash: NEWS perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \ $(srcdir)/cfg.mk # Ensure that we use only the standard $(VAR) notation, # not @...@ in Makefile.am, now that we can rely on automake # to emit a definition for each substituted variable. # However, there is still one case in which @VAR@ use is not just # legitimate, but actually required: when augmenting an automake-defined # variable with a prefix. For example, gettext uses this: # MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@ # otherwise, makeinfo would put German or French (current locale) # navigation hints in the otherwise-English documentation. # # Allow the package to add exceptions via a hook in cfg.mk; # for example, @PRAGMA_SYSTEM_HEADER@ can be permitted by # setting this to ' && !/PRAGMA_SYSTEM_HEADER/'. _makefile_at_at_check_exceptions ?= sc_makefile_at_at_check: @perl -ne '/\@[A-Z_0-9]+\@/' \ -e ' && !/([A-Z_0-9]+)\s+=.*\@\1\@$$/' \ -e ''$(_makefile_at_at_check_exceptions) \ -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}' \ $$($(VC_LIST_EXCEPT) | grep -E '(^|/)(Makefile\.am|[^/]+\.mk)$$') \ && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || : news-check: NEWS if sed -n $(news-check-lines-spec)p $(srcdir)/NEWS \ | grep -E $(news-check-regexp) >/dev/null; then \ :; \ else \ echo 'NEWS: $$(news-check-regexp) failed to match' 1>&2; \ exit 1; \ fi sc_makefile_TAB_only_indentation: @prohibit='^ [ ]{8}' \ in_vc_files='akefile|\.mk$$' \ halt='found TAB-8-space indentation' \ $(_sc_search_regexp) sc_m4_quote_check: @prohibit='(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]' \ in_vc_files='(^configure\.ac|\.m4)$$' \ halt='quote the first arg to AC_DEF*' \ $(_sc_search_regexp) fix_po_file_diag = \ 'you have changed the set of files with translatable diagnostics;\n\ apply the above patch\n' # Verify that all source files using _() are listed in po/POTFILES.in. po_file ?= $(srcdir)/po/POTFILES.in generated_files ?= $(srcdir)/lib/*.[ch] sc_po_check: @if test -f $(po_file); then \ grep -E -v '^(#|$$)' $(po_file) \ | grep -v '^src/false\.c$$' | sort > $@-1; \ files=; \ for file in $$($(VC_LIST_EXCEPT)) $(generated_files); do \ test -r $$file || continue; \ case $$file in \ *.m4|*.mk) continue ;; \ *.?|*.??) ;; \ *) continue;; \ esac; \ case $$file in \ *.[ch]) \ base=`expr " $$file" : ' \(.*\)\..'`; \ { test -f $$base.l || test -f $$base.y; } && continue;; \ esac; \ files="$$files $$file"; \ done; \ grep -E -l '\b(N?_|gettext *)\([^)"]*("|$$)' $$files \ | sed 's|^$(_dot_escaped_srcdir)/||' | sort -u > $@-2; \ diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \ || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \ rm -f $@-1 $@-2; \ fi # Sometimes it is useful to change the PATH environment variable # in Makefiles. When doing so, it's better not to use the Unix-centric # path separator of `:', but rather the automake-provided `$(PATH_SEPARATOR)'. msg = '$(ME): Do not use `:'\'' above; use $$(PATH_SEPARATOR) instead' sc_makefile_path_separator_check: @prohibit='PATH[=].*:' \ in_vc_files='akefile|\.mk$$' \ halt=$(msg) \ $(_sc_search_regexp) # Check that `make alpha' will not fail at the end of the process, # i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release) # and is read-only. writable-files: if test -d $(release_archive_dir); then \ for file in $(DIST_ARCHIVES); do \ for p in ./ $(release_archive_dir)/; do \ test -e $$p$$file || continue; \ test -w $$p$$file \ || { echo ERROR: $$p$$file is not writable; fail=1; }; \ done; \ done; \ test "$$fail" && exit 1 || : ; \ else :; \ fi v_etc_file = $(gnulib_dir)/lib/version-etc.c sample-test = tests/sample-test texi = doc/$(PACKAGE).texi # Make sure that the copyright date in $(v_etc_file) is up to date. # Do the same for the $(sample-test) and the main doc/.texi file. sc_copyright_check: @require='enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' \ in_files=$(v_etc_file) \ halt='out of date copyright in $(v_etc_file); update it' \ $(_sc_search_regexp) @require='# Copyright \(C\) '$$(date +%Y)' Free' \ in_vc_files=$(sample-test) \ halt='out of date copyright in $(sample-test); update it' \ $(_sc_search_regexp) @require='Copyright @copyright\{\} .*'$$(date +%Y)' Free' \ in_vc_files=$(texi) \ halt='out of date copyright in $(texi); update it' \ $(_sc_search_regexp) # If tests/help-version exists and seems to be new enough, assume that its # use of init.sh and path_prepend_ is correct, and ensure that every other # use of init.sh is identical. # This is useful because help-version cross-checks prog --version # with $(VERSION), which verifies that its path_prepend_ invocation # sets PATH correctly. This is an inexpensive way to ensure that # the other init.sh-using tests also get it right. _hv_file ?= $(srcdir)/tests/help-version _hv_regex_weak ?= ^ *\. .*/init\.sh" # Fix syntax-highlighters " _hv_regex_strong ?= ^ *\. "\$${srcdir=\.}/init\.sh" sc_cross_check_PATH_usage_in_tests: @if test -f $(_hv_file); then \ grep -l 'VERSION mismatch' $(_hv_file) >/dev/null \ || { echo "$@: skipped: no such file: $(_hv_file)" 1>&2; \ exit 0; }; \ grep -lE '$(_hv_regex_strong)' $(_hv_file) >/dev/null \ || { echo "$@: $(_hv_file) lacks conforming use of init.sh" 1>&2; \ exit 1; }; \ good=$$(grep -E '$(_hv_regex_strong)' $(_hv_file)); \ grep -LFx "$$good" \ $$(grep -lE '$(_hv_regex_weak)' $$($(VC_LIST_EXCEPT))) \ | grep . && \ { echo "$(ME): the above files use path_prepend_ inconsistently" \ 1>&2; exit 1; } || :; \ fi # #if HAVE_... will evaluate to false for any non numeric string. # That would be flagged by using -Wundef, however gnulib currently # tests many undefined macros, and so we can't enable that option. # So at least preclude common boolean strings as macro values. sc_Wundef_boolean: @prohibit='^#define.*(yes|no|true|false)$$' \ in_files='$(CONFIG_INCLUDE)' \ halt='Use 0 or 1 for macro values' \ $(_sc_search_regexp) # Even if you use pathmax.h to guarantee that PATH_MAX is defined, it might # not be constant, or might overflow a stack. In general, use PATH_MAX as # a limit, not an array or alloca size. sc_prohibit_path_max_allocation: @prohibit='(\balloca *\([^)]*|\[[^]]*)PATH_MAX' \ halt='Avoid stack allocations of size PATH_MAX' \ $(_sc_search_regexp) sc_vulnerable_makefile_CVE-2009-4029: @prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \ in_files=$$(find $(srcdir) -name Makefile.in) \ halt=$$(printf '%s\n' \ 'the above files are vulnerable; beware of running' \ ' "make dist*" rules, and upgrade to fixed automake' \ ' see http://bugzilla.redhat.com/542609 for details') \ $(_sc_search_regexp) vc-diff-check: (unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || : if test -s vc-diffs; then \ cat vc-diffs; \ echo "Some files are locally modified:" 1>&2; \ exit 1; \ else \ rm vc-diffs; \ fi rel-files = $(DIST_ARCHIVES) gnulib_dir ?= $(srcdir)/gnulib gnulib-version = $$(cd $(gnulib_dir) && git describe) bootstrap-tools ?= autoconf,automake,gnulib # If it's not already specified, derive the GPG key ID from # the signed tag we've just applied to mark this release. gpg_key_ID ?= \ $$(git cat-file tag v$(VERSION) \ | gpgv --status-fd 1 --keyring /dev/null - - 2>/dev/null \ | sed -n '/^\[GNUPG:\] ERRSIG /{s///;s/ .*//p;q}') translation_project_ ?= coordinator@translationproject.org # Make info-gnu the default only for a stable release. ifeq ($(RELEASE_TYPE),stable) announcement_Cc_ ?= $(translation_project_), $(PACKAGE_BUGREPORT) announcement_mail_headers_ ?= \ To: info-gnu@gnu.org \ Cc: $(announcement_Cc_) \ Mail-Followup-To: $(PACKAGE_BUGREPORT) else announcement_Cc_ ?= $(translation_project_) announcement_mail_headers_ ?= \ To: $(PACKAGE_BUGREPORT) \ Cc: $(announcement_Cc_) endif announcement: NEWS ChangeLog $(rel-files) @$(srcdir)/$(_build-aux)/announce-gen \ --mail-headers='$(announcement_mail_headers_)' \ --release-type=$(RELEASE_TYPE) \ --package=$(PACKAGE) \ --prev=$(PREV_VERSION) \ --curr=$(VERSION) \ --gpg-key-id=$(gpg_key_ID) \ --news=$(srcdir)/NEWS \ --bootstrap-tools=$(bootstrap-tools) \ --gnulib-version=$(gnulib-version) \ --no-print-checksums \ $(addprefix --url-dir=, $(url_dir_list)) ## ---------------- ## ## Updating files. ## ## ---------------- ## ftp-gnu = ftp://ftp.gnu.org/gnu www-gnu = http://www.gnu.org upload_dest_dir_ ?= $(PACKAGE) emit_upload_commands: @echo ===================================== @echo ===================================== @echo "$(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \\" @echo " --to $(gnu_rel_host):$(upload_dest_dir_) \\" @echo " $(rel-files)" @echo '# send the ~/announce-$(my_distdir) e-mail' @echo ===================================== @echo ===================================== define emit-commit-log printf '%s\n' 'maint: post-release administrivia' '' \ '* NEWS: Add header line for next release.' \ '* .prev-version: Record previous version.' \ '* cfg.mk (old_NEWS_hash): Auto-update.' endef .PHONY: no-submodule-changes no-submodule-changes: if test -d $(srcdir)/.git; then \ diff=$$(cd $(srcdir) && git submodule -q foreach \ git diff-index --name-only HEAD) \ || exit 1; \ case $$diff in '') ;; \ *) echo '$(ME): submodule files are locally modified:'; \ echo "$$diff"; exit 1;; esac; \ else \ : ; \ fi submodule-checks ?= no-submodule-changes public-submodule-commit # Ensure that each sub-module commit we're using is public. # Without this, it is too easy to tag and release code that # cannot be built from a fresh clone. .PHONY: public-submodule-commit public-submodule-commit: $(AM_V_GEN)if test -d $(srcdir)/.git; then \ cd $(srcdir) && \ git submodule --quiet foreach test '$$(git rev-parse $$sha1)' \ = '$$(git merge-base origin $$sha1)' \ || { echo '$(ME): found non-public submodule commit' >&2; \ exit 1; }; \ else \ : ; \ fi # This rule has a high enough utility/cost ratio that it should be a # dependent of "check" by default. However, some of us do occasionally # commit a temporary change that deliberately points to a non-public # submodule commit, and want to be able to use rules like "make check". # In that case, run e.g., "make check gl_public_submodule_commit=" # to disable this test. gl_public_submodule_commit ?= public-submodule-commit check: $(gl_public_submodule_commit) .PHONY: alpha beta stable ALL_RECURSIVE_TARGETS += alpha beta stable alpha beta stable: $(local-check) writable-files $(submodule-checks) test $@ = stable \ && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \ || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ || : $(MAKE) vc-diff-check $(MAKE) news-check $(MAKE) distcheck $(MAKE) dist XZ_OPT=-9ev $(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ $(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ # Override this in cfg.mk if you follow different procedures. release-prep-hook ?= release-prep gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?] .PHONY: release-prep release-prep: case $$RELEASE_TYPE in alpha|beta|stable) ;; \ *) echo "invalid RELEASE_TYPE: $$RELEASE_TYPE" 1>&2; exit 1;; esac $(MAKE) --no-print-directory -s announcement > ~/announce-$(my_distdir) if test -d $(release_archive_dir); then \ ln $(rel-files) $(release_archive_dir); \ chmod a-w $(rel-files); \ fi echo $(VERSION) > $(prev_version_file) $(MAKE) update-NEWS-hash perl -pi -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' NEWS $(emit-commit-log) > .ci-msg $(VC) commit -F .ci-msg -a rm .ci-msg # Override this with e.g., -s $(srcdir)/some_other_name.texi # if the default $(PACKAGE)-derived name doesn't apply. gendocs_options_ ?= .PHONY: web-manual web-manual: @test -z "$(manual_title)" \ && { echo define manual_title in cfg.mk 1>&2; exit 1; } || : @cd '$(srcdir)/doc'; \ $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \ -o '$(abs_builddir)/doc/manual' \ --email $(PACKAGE_BUGREPORT) $(PACKAGE) \ "$(PACKAGE_NAME) - $(manual_title)" @echo " *** Upload the doc/manual directory to web-cvs." # Code Coverage init-coverage: $(MAKE) $(AM_MAKEFLAGS) clean lcov --directory . --zerocounters COVERAGE_CCOPTS ?= "-g --coverage" COVERAGE_OUT ?= doc/coverage build-coverage: $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) check mkdir -p $(COVERAGE_OUT) lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \ --capture gen-coverage: genhtml --output-directory $(COVERAGE_OUT) \ $(COVERAGE_OUT)/$(PACKAGE).info \ --highlight --frames --legend \ --title "$(PACKAGE_NAME)" coverage: init-coverage build-coverage gen-coverage # Update gettext files. PACKAGE ?= $(shell basename $(PWD)) PO_DOMAIN ?= $(PACKAGE) POURL = http://translationproject.org/latest/$(PO_DOMAIN)/ PODIR ?= po refresh-po: rm -f $(PODIR)/*.po && \ echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \ wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \ echo 'en@boldquot' > $(PODIR)/LINGUAS && \ echo 'en@quot' >> $(PODIR)/LINGUAS && \ ls $(PODIR)/*.po | sed 's/\.po//' | sed 's,$(PODIR)/,,' | sort >> $(PODIR)/LINGUAS # Running indent once is not idempotent, but running it twice is. INDENT_SOURCES ?= $(C_SOURCES) .PHONY: indent indent: indent $(INDENT_SOURCES) indent $(INDENT_SOURCES) # If you want to set UPDATE_COPYRIGHT_* environment variables, # put the assignments in this variable. update-copyright-env ?= # Run this rule once per year (usually early in January) # to update all FSF copyright year lists in your project. # If you have an additional project-specific rule, # add it in cfg.mk along with a line 'update-copyright: prereq'. # By default, exclude all variants of COPYING; you can also # add exemptions (such as ChangeLog..* for rotated change logs) # in the file .x-update-copyright. .PHONY: update-copyright update-copyright: grep -l -w Copyright \ $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \ | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@ # This tight_scope test is skipped with a warning if $(_gl_TS_headers) is not # overridden and $(_gl_TS_dir)/Makefile.am does not mention noinst_HEADERS. # NOTE: to override any _gl_TS_* default value, you must # define the variable(s) using "export" in cfg.mk. _gl_TS_dir ?= src ALL_RECURSIVE_TARGETS += sc_tight_scope sc_tight_scope: tight-scope.mk @fail=0; \ if ! grep '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk \ > /dev/null \ && ! grep -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \ > /dev/null 2>&1; then \ echo '$(ME): skipping $@'; \ else \ $(MAKE) -s -C $(_gl_TS_dir) \ -f Makefile \ -f $(abs_top_srcdir)/cfg.mk \ -f $(abs_top_builddir)/$< \ _gl_tight_scope \ || fail=1; \ fi; \ rm -f $<; \ exit $$fail tight-scope.mk: $(ME) @rm -f $@ $@-t @perl -ne '/^# TS-start/.../^# TS-end/ and print' $(srcdir)/$(ME) > $@-t @chmod a=r $@-t && mv $@-t $@ ifeq (a,b) # TS-start # Most functions should have static scope. # Any that don't must be marked with `extern', but `main' # and `usage' are exceptions: they're always extern, but # do not need to be marked. Symbols matching `__.*' are # reserved by the compiler, so are automatically excluded below. _gl_TS_unmarked_extern_functions ?= main usage _gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\S+) *\(/ # If your project uses a macro like "XTERN", then put # the following in cfg.mk to override this default: # export _gl_TS_extern = extern|XTERN _gl_TS_extern ?= extern # The second nm|grep checks for file-scope variables with `extern' scope. # Without gnulib's progname module, you might put program_name here. # Symbols matching `__.*' are reserved by the compiler, # so are automatically excluded below. _gl_TS_unmarked_extern_vars ?= # NOTE: the _match variables are perl expressions -- not mere regular # expressions -- so that you can extend them to match other patterns # and easily extract matched variable names. # For example, if your project declares some global variables via # a macro like this: GLOBAL(type, var_name, initializer), then you # can override this definition to automatically extract those names: # export _gl_TS_var_match = \ # /^(?:$(_gl_TS_extern)) .*?\**(\w+)(\[.*?\])?;/ || /\bGLOBAL\(.*?,\s*(.*?),/ _gl_TS_var_match ?= /^(?:$(_gl_TS_extern)) .*?(\w+)(\[.*?\])?;/ # The names of object files in (or relative to) $(_gl_TS_dir). _gl_TS_obj_files ?= *.$(OBJEXT) # Files in which to search for the one-line style extern declarations. # $(_gl_TS_dir)-relative. _gl_TS_headers ?= $(noinst_HEADERS) .PHONY: _gl_tight_scope _gl_tight_scope: $(bin_PROGRAMS) t=exceptions-$$$$; \ trap 's=$$?; rm -f $$t; exit $$s' 0; \ for sig in 1 2 3 13 15; do \ eval "trap 'v=`expr $$sig + 128`; (exit $$v); exit $$v' $$sig"; \ done; \ src=`for f in $(SOURCES); do \ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ hdr=`for f in $(_gl_TS_headers); do \ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ ( printf '^%s$$\n' '__.*' $(_gl_TS_unmarked_extern_functions); \ grep -h -A1 '^extern .*[^;]$$' $$src \ | grep -vE '^(extern |--)' | sed 's/ .*//'; \ perl -lne \ '$(_gl_TS_function_match) and print "^$$1\$$"' $$hdr; \ ) | sort -u > $$t; \ nm -e $(_gl_TS_obj_files) | sed -n 's/.* T //p'|grep -Ev -f $$t \ && { echo the above functions should have static scope >&2; \ exit 1; } || : ; \ ( printf '^%s$$\n' '__.*' $(_gl_TS_unmarked_extern_vars); \ perl -lne '$(_gl_TS_var_match) and print "^$$1\$$"' $$hdr *.h \ ) | sort -u > $$t; \ nm -e $(_gl_TS_obj_files) | sed -n 's/.* [BCDGRS] //p' \ | sort -u | grep -Ev -f $$t \ && { echo the above variables should have static scope >&2; \ exit 1; } || : # TS-end endif gss-1.0.2/Makefile.in0000644000000000000000000011133111663554705011256 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2003-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/gss.pc.in $(top_srcdir)/configure \ $(top_srcdir)/lib/headers/gss.h.in ABOUT-NLS AUTHORS COPYING \ ChangeLog INSTALL NEWS THANKS build-aux/config.guess \ build-aux/config.rpath build-aux/config.sub build-aux/depcomp \ build-aux/install-sh build-aux/ltmain.sh build-aux/mdate-sh \ build-aux/missing build-aux/texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = gss.pc lib/headers/gss.h CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDDEF_H = @STDDEF_H@ STRIP = @STRIP@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc EXTRA_DIST = cfg.mk maint.mk .clcopying po/Makevars.in DISTCLEANFILES = po/Makevars pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gss.pc SUBDIRS = po gl lib src tests doc ACLOCAL_AMFLAGS = -I m4 -I gl/m4 -I lib/gl/m4 -I src/gl/m4 all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 gss.pc: $(top_builddir)/config.status $(srcdir)/gss.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ lib/headers/gss.h: $(top_builddir)/config.status $(top_srcdir)/lib/headers/gss.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgconfigDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgconfigDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-pkgconfigDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.2/aclocal.m40000644000000000000000000011036411663554703011054 00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, [m4_warning([this file was generated for autoconf 2.67. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([src/gl/m4/errno_h.m4]) m4_include([src/gl/m4/error.m4]) m4_include([src/gl/m4/getopt.m4]) m4_include([src/gl/m4/gnulib-comp.m4]) m4_include([src/gl/m4/msvc-inval.m4]) m4_include([src/gl/m4/msvc-nothrow.m4]) m4_include([src/gl/m4/nocrash.m4]) m4_include([src/gl/m4/ssize_t.m4]) m4_include([src/gl/m4/stdarg.m4]) m4_include([src/gl/m4/strerror.m4]) m4_include([src/gl/m4/sys_socket_h.m4]) m4_include([src/gl/m4/unistd_h.m4]) m4_include([src/gl/m4/version-etc.m4]) m4_include([lib/gl/m4/extensions.m4]) m4_include([lib/gl/m4/gnulib-comp.m4]) m4_include([lib/gl/m4/include_next.m4]) m4_include([lib/gl/m4/ld-output-def.m4]) m4_include([lib/gl/m4/stddef_h.m4]) m4_include([lib/gl/m4/string_h.m4]) m4_include([lib/gl/m4/strverscmp.m4]) m4_include([lib/gl/m4/warn-on-use.m4]) m4_include([gl/m4/00gnulib.m4]) m4_include([gl/m4/autobuild.m4]) m4_include([gl/m4/gnulib-common.m4]) m4_include([gl/m4/gnulib-comp.m4]) m4_include([gl/m4/ld-version-script.m4]) m4_include([gl/m4/manywarnings.m4]) m4_include([gl/m4/valgrind-tests.m4]) m4_include([gl/m4/warnings.m4]) m4_include([m4/gettext.m4]) m4_include([m4/gtk-doc.m4]) m4_include([m4/iconv.m4]) m4_include([m4/intlmacosx.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/nls.m4]) m4_include([m4/pkg.m4]) m4_include([m4/po-suffix.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) m4_include([m4/wchar_t.m4]) gss-1.0.2/m4/0000755000000000000000000000000011663555054007607 500000000000000gss-1.0.2/m4/gettext.m40000644000000000000000000003513211663554672011466 00000000000000# gettext.m4 serial 63 (gettext-0.18) dnl Copyright (C) 1995-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) gss-1.0.2/m4/lt~obsolete.m40000644000000000000000000001375611663554700012354 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) gss-1.0.2/m4/nls.m40000644000000000000000000000231511663554672010573 00000000000000# nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) gss-1.0.2/m4/iconv.m40000644000000000000000000001653711663554672011130 00000000000000# iconv.m4 serial 11 (gettext-0.18.1) dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_TRY_RUN([ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) fi ]) gss-1.0.2/m4/ltsugar.m40000644000000000000000000001042411663554677011465 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) gss-1.0.2/m4/lib-link.m40000644000000000000000000010020211663554672011472 00000000000000# lib-link.m4 serial 21 (gettext-0.18) dnl Copyright (C) 2001-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.54]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[translit([$1],[./-], [___])]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[translit([$1],[./-], [___])]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) gss-1.0.2/m4/ltoptions.m40000644000000000000000000002725611663554677012052 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) gss-1.0.2/m4/pkg.m40000644000000000000000000001214511546676326010563 00000000000000# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$PKG_CONFIG"; then if test -n "$$1"; then pkg_cv_[]$1="$$1" else PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) fi else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` else $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES gss-1.0.2/m4/progtest.m40000644000000000000000000000557311663554672011657 00000000000000# progtest.m4 serial 6 (gettext-0.18) dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) gss-1.0.2/m4/lib-prefix.m40000644000000000000000000002042211663554672012037 00000000000000# lib-prefix.m4 serial 7 (gettext-0.18) dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_EGREP_CPP([sixtyfour bits], [ #ifdef _LP64 sixtyfour bits #endif ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" ]) gss-1.0.2/m4/intlmacosx.m40000644000000000000000000000457511663554672012172 00000000000000# intlmacosx.m4 serial 3 (gettext-0.18) dnl Copyright (C) 2004-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on MacOS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in MacOS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#include ], [CFPreferencesCopyAppValue(NULL, NULL)], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in MacOS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) gss-1.0.2/m4/po-suffix.m40000644000000000000000000000203511546676326011717 00000000000000# po-suffix.m4 serial 1 dnl Copyright (C) 2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # sj_PO_SUFFIX() # -------------- # Allow user to add a suffix to translation domain, to get better # co-installability of shared libraries. AC_DEFUN([sj_PO_SUFFIX], [ AC_MSG_CHECKING([for gettext translation domain suffix to use]) AC_ARG_WITH([po-suffix], AC_HELP_STRING([--with-po-suffix=STR], [add suffix to gettext translation domain]), po_suffix=$withval, po_suffix=no) if test "$po_suffix" = "yes"; then PO_SUFFIX=$1 elif test "$po_suffix" != "no" ; then PO_SUFFIX=$po_suffix fi if test -n "$PO_SUFFIX"; then AC_MSG_RESULT([$PO_SUFFIX]) else AC_MSG_RESULT([none]) fi AC_SUBST([PO_SUFFIX]) AC_DEFINE_UNQUOTED([PO_SUFFIX], "$PO_SUFFIX", [Gettext translation domain suffix.]) ]) gss-1.0.2/m4/ltversion.m40000644000000000000000000000127711663554677012037 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # Generated from ltversion.in. # serial 3175 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.2.10]) m4_define([LT_PACKAGE_REVISION], [1.3175]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.10' macro_revision='1.3175' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) gss-1.0.2/m4/gtk-doc.m40000644000000000000000000000424111662452564011323 00000000000000dnl -*- mode: autoconf -*- # serial 1 dnl Usage: dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) AC_DEFUN([GTK_DOC_CHECK], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first dnl check for tools we added during development AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check]) AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) dnl for overriding the documentation installation directory AC_ARG_WITH([html-dir], AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, [with_html_dir='${datadir}/gtk-doc/html']) HTML_DIR="$with_html_dir" AC_SUBST([HTML_DIR]) dnl enable/disable documentation building AC_ARG_ENABLE([gtk-doc], AS_HELP_STRING([--enable-gtk-doc], [use gtk-doc to build documentation [[default=no]]]),, [enable_gtk_doc=no]) if test x$enable_gtk_doc = xyes; then ifelse([$1],[], [PKG_CHECK_EXISTS([gtk-doc],, AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))], [PKG_CHECK_EXISTS([gtk-doc >= $1],, AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))]) fi AC_MSG_CHECKING([whether to build gtk-doc documentation]) AC_MSG_RESULT($enable_gtk_doc) dnl enable/disable output formats AC_ARG_ENABLE([gtk-doc-html], AS_HELP_STRING([--enable-gtk-doc-html], [build documentation in html format [[default=yes]]]),, [enable_gtk_doc_html=yes]) AC_ARG_ENABLE([gtk-doc-pdf], AS_HELP_STRING([--enable-gtk-doc-pdf], [build documentation in pdf format [[default=no]]]),, [enable_gtk_doc_pdf=no]) if test -z "$GTKDOC_MKPDF"; then enable_gtk_doc_pdf=no fi AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) ]) gss-1.0.2/m4/lib-ld.m40000644000000000000000000000660311663554672011146 00000000000000# lib-ld.m4 serial 4 (gettext-0.18) dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL([acl_cv_path_LD], [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT([$LD]) else AC_MSG_RESULT([no]) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) gss-1.0.2/m4/libtool.m40000644000000000000000000100326011663554677011451 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010 Free Software Foundation, # Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010 Free Software Foundation, # Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2010 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_XSI_SHELLFNS sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES # -------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX # ----------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl AC_LINK_IFELSE(AC_LANG_PROGRAM,[ lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`print -r -- -n 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [AC_CHECK_TOOL(AR, ar, false) test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1]) AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) void fnord () __attribute__((visibility("default"))); #endif void fnord () { int i=42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[123]]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; haiku*) version_type=linux need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method == "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE(int foo(void) {}, _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' ) LDFLAGS="$save_LDFLAGS" else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], [[If ld is used when linking, flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [fix_srcfile_path], [1], [Fix the shell variable $srcfile for the compiler]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[[12]]*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ]) dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${F77-"f77"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${FC-"f95"} compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC="$lt_save_CC" ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC= CC=${RC-"windres"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC="$lt_save_CC" ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_XSI_SHELLFNS # --------------------- # Bourne and XSI compatible variants of some useful shell functions. m4_defun([_LT_PROG_XSI_SHELLFNS], [case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $[*] )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } dnl func_dirname_and_basename dnl A portable version of this function is already defined in general.m4sh dnl so there is no need for it here. # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[[^=]]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[[^.]]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$[@]"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]+=\$[2]" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]=\$$[1]\$[2]" } _LT_EOF ;; esac ]) gss-1.0.2/m4/wchar_t.m40000644000000000000000000000135311663554672011427 00000000000000# wchar_t.m4 serial 3 (gettext-0.18) dnl Copyright (C) 2002-2003, 2008-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], [AC_TRY_COMPILE([#include wchar_t foo = (wchar_t)'\0';], , [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) fi ]) gss-1.0.2/m4/po.m40000644000000000000000000004461611663554672010427 00000000000000# po.m4 serial 17 (gettext-0.18) dnl Copyright (C) 1995-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.18]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. gss-1.0.2/config.h.in0000644000000000000000000003552411663554704011244 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror shall be considered present. */ #undef GNULIB_STRERROR /* Define to 1 when the gnulib module getopt-gnu should be tested. */ #undef GNULIB_TEST_GETOPT_GNU /* Define to 1 when the gnulib module strerror should be tested. */ #undef GNULIB_TEST_STRERROR /* Define to 1 when the gnulib module strverscmp should be tested. */ #undef GNULIB_TEST_STRVERSCMP /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `getenv', and to 0 if you don't. */ #undef HAVE_DECL_GETENV /* Define to 1 if you have the declaration of `program_invocation_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_NAME /* Define to 1 if you have the declaration of `program_invocation_short_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getopt_long_only' function. */ #undef HAVE_GETOPT_LONG_ONLY /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if you have the libshishi library. */ #undef HAVE_LIBSHISHI /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 on MSVC platforms that have the "invalid parameter handler" concept. */ #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Define to 1 if chdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CHDIR /* Define to 1 if chown is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CHOWN /* Define to 1 if dup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUP /* Define to 1 if dup2 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUP2 /* Define to 1 if dup3 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUP3 /* Define to 1 if endusershell is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ENDUSERSHELL /* Define to 1 if environ is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ENVIRON /* Define to 1 if euidaccess is declared even after undefining macros. */ #undef HAVE_RAW_DECL_EUIDACCESS /* Define to 1 if faccessat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FACCESSAT /* Define to 1 if fchdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FCHDIR /* Define to 1 if fchownat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FCHOWNAT /* Define to 1 if fdatasync is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FDATASYNC /* Define to 1 if ffsl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FFSL /* Define to 1 if ffsll is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FFSLL /* Define to 1 if fsync is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FSYNC /* Define to 1 if ftruncate is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FTRUNCATE /* Define to 1 if getcwd is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETCWD /* Define to 1 if getdomainname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETDOMAINNAME /* Define to 1 if getdtablesize is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETDTABLESIZE /* Define to 1 if getgroups is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETGROUPS /* Define to 1 if gethostname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETHOSTNAME /* Define to 1 if getlogin is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLOGIN /* Define to 1 if getlogin_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLOGIN_R /* Define to 1 if getpagesize is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETPAGESIZE /* Define to 1 if getusershell is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETUSERSHELL /* Define to 1 if group_member is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GROUP_MEMBER /* Define to 1 if lchown is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LCHOWN /* Define to 1 if link is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LINK /* Define to 1 if linkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LINKAT /* Define to 1 if lseek is declared even after undefining macros. */ #undef HAVE_RAW_DECL_LSEEK /* Define to 1 if memmem is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MEMMEM /* Define to 1 if mempcpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MEMPCPY /* Define to 1 if memrchr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_MEMRCHR /* Define to 1 if pipe is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PIPE /* Define to 1 if pipe2 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PIPE2 /* Define to 1 if pread is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PREAD /* Define to 1 if pwrite is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PWRITE /* Define to 1 if rawmemchr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RAWMEMCHR /* Define to 1 if readlink is declared even after undefining macros. */ #undef HAVE_RAW_DECL_READLINK /* Define to 1 if readlinkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_READLINKAT /* Define to 1 if rmdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RMDIR /* Define to 1 if setusershell is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETUSERSHELL /* Define to 1 if sleep is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SLEEP /* Define to 1 if stpcpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STPCPY /* Define to 1 if stpncpy is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STPNCPY /* Define to 1 if strcasestr is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRCASESTR /* Define to 1 if strchrnul is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRCHRNUL /* Define to 1 if strdup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRDUP /* Define to 1 if strerror_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRERROR_R /* Define to 1 if strncat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRNCAT /* Define to 1 if strndup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRNDUP /* Define to 1 if strnlen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRNLEN /* Define to 1 if strpbrk is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRPBRK /* Define to 1 if strsep is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRSEP /* Define to 1 if strsignal is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRSIGNAL /* Define to 1 if strtok_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOK_R /* Define to 1 if strverscmp is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRVERSCMP /* Define to 1 if symlink is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SYMLINK /* Define to 1 if symlinkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SYMLINKAT /* Define to 1 if ttyname_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TTYNAME_R /* Define to 1 if unlink is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UNLINK /* Define to 1 if unlinkat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_UNLINKAT /* Define to 1 if usleep is declared even after undefining macros. */ #undef HAVE_RAW_DECL_USLEEP /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strerror_r' function. */ #undef HAVE_STRERROR_R /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strverscmp' function. */ #undef HAVE_STRVERSCMP /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the header file. */ #undef HAVE_WINSOCK2_H /* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ #undef HAVE__SET_INVALID_PARAMETER_HANDLER /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* String identifying the packager of this software */ #undef PACKAGE_PACKAGER /* Packager info for bug reports (URL/e-mail/...) */ #undef PACKAGE_PACKAGER_BUG_REPORTS /* Packager-specific version information */ #undef PACKAGE_PACKAGER_VERSION /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Gettext translation domain suffix. */ #undef PO_SUFFIX /* Define to 1 if strerror(0) does not return a message implying success. */ #undef REPLACE_STRERROR_0 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if strerror_r returns char *. */ #undef STRERROR_R_CHAR_P /* Define to 1 if you want Kerberos 5 mech. */ #undef USE_KERBEROS5 /* Version number of package */ #undef VERSION /* Define to 1 if on MINIX. */ #undef _MINIX /* The _Noreturn keyword of draft C1X. */ #ifndef _Noreturn # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* Define to 500 only on HP-UX. */ #undef _XOPEN_SOURCE /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on MacOS X. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Define to rpl_ if the getopt replacement functions and variables should be used. */ #undef __GETOPT_PREFIX /* A replacement for va_copy, if needed. */ #define gl_va_copy(a,b) ((a) = (b)) /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for MacOS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif /* Define to `int' if does not define. */ #undef pid_t /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported directly. */ #undef restrict /* Work around a bug in Sun C++: it does not support _Restrict or __restrict__, even though the corresponding Sun C compiler ends up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. Perhaps some future version of Sun C++ will work with restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ #if defined __SUNPRO_CC && !defined __RESTRICT # define _Restrict # define __restrict__ #endif /* Define as a signed type of the same size as size_t. */ #undef ssize_t /* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) #else # define _GL_UNUSED #endif /* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name is a misnomer outside of parameter lists. */ #define _UNUSED_PARAMETER_ _GL_UNUSED /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif /* Define as a macro for copying va_list variables. */ #undef va_copy gss-1.0.2/build-aux/0000755000000000000000000000000011663555055011162 500000000000000gss-1.0.2/build-aux/pmccabe.css0000644000000000000000000000451711662447025013211 00000000000000body { font-family: Helvetica, sans-serif; } .page_title { font: 18pt Georgia, serif; color: darkred; } .section_title { font: 14pt Georgia, serif; color: darkred; } .report_timestamp { color: darkred; font-weight: bold; } .function_src { text-align: left; background: white; } .resume_table { } .resume_header_entry { color: black; } .resume_number_entry { color: darkred; font-weight: bold; text-align: right; } .ranges_table { border-spacing: 0px; border-bottom: solid 2px black; border-top: solid 2px black; border-left: solid 2px black; border-right: solid 2px black; } .ranges_header_entry { padding: 5px; border-bottom: solid 1px black; font-size: 1em; font-weight: bold; color: darkred; text-align: left; } .ranges_entry { } .ranges_entry_simple { background: #87ff75; } .ranges_entry_moderate { background: #fffc60; } .ranges_entry_high { background: #ff5a5d; } .ranges_entry_untestable { background: #993300 } .function_table { border-spacing: 0px; border-bottom: solid 2px black; border-top: solid 2px black; border-left: solid 2px black; border-right: solid 2px black; } .function_table_caption { font-size: 1.1em; font-weight: bold; color: black; padding: 5px; } .function_table_header { } .function_table_header_entry { padding: 5px; border-bottom: solid 1px black; font-size: 1em; font-weight: bold; color: darkred; text-align: left; } .function_entry { } .function_entry_simple { background: #87ff75; } .function_entry_moderate { background: #fffc60; } .function_entry_high { background: #ff5a5d; } .function_entry_untestable { background: #993300 } .function_entry_name { font-size: 1em; text-align: left; font-weight: bold; text-valign: top; border-top: solid 1px black; padding: 3px; } .function_entry_cyclo { font-size: 1em; text-align: right; text-valign: top; border-top: solid 1px black; padding: 3px; } .function_entry_number { font-size: 1em; text-align: right; text-valign: top; border-top: solid 1px black; padding: 3px; } .function_entry_filename { font-size: 1em; text-align: left; text-valign: top; border-top: solid 1px black; padding: 3px; } gss-1.0.2/build-aux/ltmain.sh0000755000000000000000000075634111663554677012756 00000000000000# Generated from ltmain.m4sh. # libtool (GNU libtool) 2.2.10 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.2.10 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . PROGRAM=libtool PACKAGE=libtool VERSION=2.2.10 TIMESTAMP="" package_revision=1.3175 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${EGREP="grep -E"} : ${FGREP="grep -F"} : ${GREP="grep"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SED="sed"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # Generated shell functions inserted here. # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=: for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname${mode+: }$mode: $*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_version # Echo version message to standard output and exit. func_version () { $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $SED -n '/^# Usage:/,/# Report bugs to/ { s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p }' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { func_error "missing argument for $1." exit_cmd=exit } exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. # $mode is unset nonopt= execute_dlfiles= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 opt_dry_run=false opt_duplicate_deps=false opt_silent=false opt_debug=: # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # Parse options once, thoroughly. This comes as soon as possible in # the script to make things like `libtool --version' happen quickly. { # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Parse non-mode specific arguments: while test "$#" -gt 0; do opt="$1" shift case $opt in --config) func_config ;; --debug) preserve_args="$preserve_args $opt" func_echo "enabling shell trace mode" opt_debug='set -x' $opt_debug ;; -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break execute_dlfiles="$execute_dlfiles $1" shift ;; --dry-run | -n) opt_dry_run=: ;; --features) func_features ;; --finish) mode="finish" ;; --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break case $1 in # Valid mode arguments: clean) ;; compile) ;; execute) ;; finish) ;; install) ;; link) ;; relink) ;; uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac mode="$1" shift ;; --preserve-dup-deps) opt_duplicate_deps=: ;; --quiet|--silent) preserve_args="$preserve_args $opt" opt_silent=: opt_verbose=false ;; --no-quiet|--no-silent) preserve_args="$preserve_args $opt" opt_silent=false ;; --verbose| -v) preserve_args="$preserve_args $opt" opt_silent=false opt_verbose=: ;; --no-verbose) preserve_args="$preserve_args $opt" opt_verbose=false ;; --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break preserve_args="$preserve_args $opt $1" func_enable_tag "$1" # tagname is set here shift ;; # Separate optargs to long options: -dlopen=*|--mode=*|--tag=*) func_opt_split "$opt" set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} shift ;; -\?|-h) func_usage ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --version) func_version ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) nonopt="$opt" break ;; esac done case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_duplicate_deps ;; esac # Having warned about all mis-specified options, bail out if # anything was wrong. $exit_cmd $EXIT_FAILURE } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } ## ----------- ## ## Main. ## ## ----------- ## $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi test -z "$mode" && func_fatal_error "error: you must specify a MODE." # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$mode' for more information." } # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_ltwrapper_scriptname_result="" if func_ltwrapper_executable_p "$1"; then func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" fi } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi removelist="$removelist $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist="$removelist $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir command="$command -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then command="$command -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $execute_dlfiles; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_quote_for_eval "$file" args="$args $func_quote_for_eval_result" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" exit $EXIT_SUCCESS } test "$mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" install_prog="$install_prog$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog="$install_prog $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi install_shared_prog="$install_shared_prog $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_verbose "extracting global C symbols from \`$progfile'" $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" } done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; " case $host in *cygwin* | *mingw* | *cegcc* ) echo >> "$output_objdir/$my_dlsyms" "\ /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */" lt_dlsym_const= ;; *osf5*) echo >> "$output_objdir/$my_dlsyms" "\ /* This system does not cope well with relocations in const data */" lt_dlsym_const= ;; *) lt_dlsym_const=const ;; esac echo >> "$output_objdir/$my_dlsyms" "\ extern $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) symtab_cflags="$symtab_cflags $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then win32_nmres=`eval $NM -f posix -A $1 | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_to_host_path arg # # Convert paths to host format when used with build tools. # Intended for use with "native" mingw (where libtool itself # is running under the msys shell), or in the following cross- # build environments: # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # where wine is equipped with the `winepath' executable. # In the native mingw case, the (msys) shell automatically # converts paths for any non-msys applications it launches, # but that facility isn't available from inside the cwrapper. # Similar accommodations are necessary for $host mingw and # $build cygwin. Calling this function does no harm for other # $host/$build combinations not listed above. # # ARG is the path (on $build) that should be converted to # the proper representation for $host. The result is stored # in $func_to_host_path_result. func_to_host_path () { func_to_host_path_result="$1" if test -n "$1"; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' case $build in *mingw* ) # actually, msys # awkward: cmd appends spaces to result func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_path_result=`cygpath -w "$1" | $SED -e "$lt_sed_naive_backslashify"` ;; * ) # Unfortunately, winepath does not exit with a non-zero # error code, so we are forced to check the contents of # stdout. On the other hand, if the command is not # found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both # error code of zero AND non-empty stdout, which explains # the odd construction: func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | $SED -e "$lt_sed_naive_backslashify"` else # Allow warning below. func_to_host_path_result= fi ;; esac if test -z "$func_to_host_path_result" ; then func_error "Could not determine host path corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_path_result="$1" fi ;; esac fi } # end: func_to_host_path # func_to_host_pathlist arg # # Convert pathlists to host format when used with build tools. # See func_to_host_path(), above. This function supports the # following $build/$host combinations (but does no harm for # combinations not listed here): # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # # Path separators are also converted from $build format to # $host format. If ARG begins or ends with a path separator # character, it is preserved (but converted to $host format) # on output. # # ARG is a pathlist (on $build) that should be converted to # the proper representation on $host. The result is stored # in $func_to_host_pathlist_result. func_to_host_pathlist () { func_to_host_pathlist_result="$1" if test -n "$1"; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_pathlist_tmp1=$func_stripname_result case $build in *mingw* ) # Actually, msys. # Awkward: cmd appends spaces to result. func_to_host_pathlist_result=` ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | $SED -e "$lt_sed_naive_backslashify"` ;; * ) # unfortunately, winepath doesn't convert pathlists func_to_host_pathlist_result="" func_to_host_pathlist_oldIFS=$IFS IFS=: for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do IFS=$func_to_host_pathlist_oldIFS if test -n "$func_to_host_pathlist_f" ; then func_to_host_path "$func_to_host_pathlist_f" if test -n "$func_to_host_path_result" ; then if test -z "$func_to_host_pathlist_result" ; then func_to_host_pathlist_result="$func_to_host_path_result" else func_append func_to_host_pathlist_result ";$func_to_host_path_result" fi fi fi done IFS=$func_to_host_pathlist_oldIFS ;; esac if test -z "$func_to_host_pathlist_result"; then func_error "Could not determine the host path(s) corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This may break if $1 contains DOS-style drive # specifications. The fix is not to complicate the expression # below, but for the user to provide a working wine installation # with winepath so that path translation in the cross-to-mingw # case works properly. lt_replace_pathsep_nix_to_dos="s|:|;|g" func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_replace_pathsep_nix_to_dos"` fi # Now, add the leading and trailing path separators back case "$1" in :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" ;; esac case "$1" in *: ) func_append func_to_host_pathlist_result ";" ;; esac ;; esac fi } # end: func_to_host_pathlist # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) deplibs="$deplibs $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs="$weak_libs $arg" prev= continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname '-L' '' "$arg" dir=$func_stripname_result if test -z "$dir"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $func_quote_for_eval_result" compiler_flags="$compiler_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" linker_flags="$linker_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" compiler_flags="$compiler_flags $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_duplicate_deps ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= case $lib in *.la) func_source "$lib" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs="$deplibs $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" dir=$func_stripname_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) temp_rpath="$temp_rpath$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded notinst_deplibs="$notinst_deplibs $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_dirname "$deplib" "" "." dir="$func_dirname_result" # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" libobjs="$libobjs $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" delfiles="$delfiles $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" func_len " $cmd" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then func_show_eval "$cmd" 'exit $?' skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do $ECHO "$obj" >> $output done echo ')' >> $output delfiles="$delfiles $output" elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do $ECHO "$obj" >> $output done delfiles="$delfiles $output" output=$firstobj\"$file_list_spec$output\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles="$delfiles $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then oldobjs="$oldobjs $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles oldobjs="$oldobjs $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlfiles="$newdlfiles $libdir/$name" ;; *) newdlfiles="$newdlfiles $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlprefiles="$newdlprefiles $libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$mode" = link || test "$mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) RM="$RM $arg"; rmforce=yes ;; -*) RM="$RM $arg" ;; *) files="$files $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then objdir="$origobjdir" else objdir="$dir/$origobjdir" fi func_basename "$file" name="$func_basename_result" test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result rmfiles="$rmfiles $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$mode" = uninstall || test "$mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 gss-1.0.2/build-aux/vc-list-files0000755000000000000000000000734311662447025013514 00000000000000#!/bin/sh # List version-controlled file names. # Print a version string. scriptversion=2011-05-16.22; # UTC # Copyright (C) 2006-2011 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # List the specified version-controlled files. # With no argument, list them all. With a single DIRECTORY argument, # list the version-controlled files in that directory. # If there's an argument, it must be a single, "."-relative directory name. # cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/ postprocess= case $1 in --help) cat <. EOF exit ;; --version) year=`echo "$scriptversion" | sed 's/[^0-9].*//'` cat < This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. EOF exit ;; -C) test "$2" = . || postprocess="| sed 's|^|$2/|'" cd "$2" || exit 1 shift; shift ;; esac test $# = 0 && set . for dir do if test -d .git; then test "x$dir" = x. \ && dir= sed_esc= \ || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; } # Ignore git symlinks - either they point into the tree, in which case # we don't need to visit the target twice, or they point somewhere # else (often into a submodule), in which case the content does not # belong to this package. eval exec git ls-tree -r 'HEAD:"$dir"' \ \| sed -n '"s/^100[^ ]*./$sed_esc/p"' $postprocess elif test -d .hg; then eval exec hg locate '"$dir/*"' $postprocess elif test -d .bzr; then test "$postprocess" = '' && postprocess="| sed 's|^\./||'" eval exec bzr ls -R --versioned '"$dir"' $postprocess elif test -d CVS; then test "$postprocess" = '' && postprocess="| sed 's|^\./||'" if test -x build-aux/cvsu; then eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess elif (cvsu --help) >/dev/null 2>&1; then eval cvsu --find --types=AFGM '"$dir"' $postprocess else eval awk -F/ \''{ \ if (!$1 && $3 !~ /^-/) { \ f=FILENAME; \ if (f ~ /CVS\/Entries$/) \ f = substr(f, 1, length(f)-11); \ print f $2; \ }}'\'' \ `find "$dir" -name Entries -print` /dev/null' $postprocess fi elif test -d .svn; then eval exec svn list -R '"$dir"' $postprocess else echo "$0: Failed to determine type of version control used in `pwd`" 1>&2 exit 1 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gss-1.0.2/build-aux/gnupload0000755000000000000000000002544411662447025012646 00000000000000#!/bin/sh # Sign files and upload them. scriptversion=2010-05-23.15; # UTC # Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Originally written by Alexandre Duret-Lutz . set -e GPG='gpg --batch --no-tty' conffile=.gnuploadrc to= dry_run=false symlink_files= delete_files= delete_symlinks= collect_var= dbg= nl=' ' usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...] Sign all FILES, and process them at selected destinations according to CMD. explains further. Commands: --delete delete FILES from destination --symlink create symbolic links --rmsymlink remove symbolic links -- treat the remaining arguments as files to upload Options: --help print this help text and exit --to DEST specify one destination for FILES (multiple --to options are allowed) --user NAME sign with key NAME --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names --dry-run do nothing, show what would have been done --version output version information and exit If --symlink-regex is given without EXPR, then the link target name is created by replacing the version information with \`-latest', e.g.: foo-1.3.4.tar.gz -> foo-latest.tar.gz Recognized destinations are: alpha.gnu.org:DIRECTORY savannah.gnu.org:DIRECTORY savannah.nongnu.org:DIRECTORY ftp.gnu.org:DIRECTORY build directive files and upload files by FTP download.gnu.org.ua:{alpha|ftp}/DIRECTORY build directive files and upload files by SFTP [user@]host:DIRECTORY upload files with scp Options and commands are applied in order. If the file $conffile exists in the current working directory, its contents are prepended to the actual command line options. Use this to keep your defaults. Comments (#) and empty lines in $conffile are allowed. Examples: 1. Upload foobar-1.0.tar.gz to ftp.gnu.org: gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz 2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org: gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz 3. Same as above, and also create symbolic links to foobar-latest.tar.*: gnupload --to ftp.gnu.org:foobar \\ --symlink-regex \\ foobar-1.0.tar.gz foobar-1.0.tar.xz 4. Upload foobar-0.9.90.tar.gz to two sites: gnupload --to alpha.gnu.org:foobar \\ --to sources.redhat.com:~ftp/pub/foobar \\ foobar-0.9.90.tar.gz 5. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz (the -- terminates the list of files to delete): gnupload --to alpha.gnu.org:foobar \\ --to sources.redhat.com:~ftp/pub/foobar \\ --delete oopsbar-0.9.91.tar.gz \\ -- foobar-0.9.91.tar.gz gnupload uses the ncftpput program to do the transfers; if you don't happen to have an ncftp package installed, the ncftpput-ftp script in the build-aux/ directory of the gnulib package (http://savannah.gnu.org/projects/gnulib) may serve as a replacement. Report bugs to . Send patches to ." # Read local configuration file if test -r "$conffile"; then echo "$0: Reading configuration file $conffile" conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '` eval set x "$conf \"\$@\"" shift fi while test -n "$1"; do case $1 in -*) collect_var= case $1 in --help) echo "$usage" exit $? ;; --to) if test -z "$2"; then echo "$0: Missing argument for --to" 1>&2 exit 1 else to="$to $2" shift fi ;; --user) if test -z "$2"; then echo "$0: Missing argument for --user" 1>&2 exit 1 else GPG="$GPG --local-user $2" shift fi ;; --delete) collect_var=delete_files ;; --rmsymlink) collect_var=delete_symlinks ;; --symlink-regex=*) symlink_expr=`expr "$1" : '[^=]*=\(.*\)'` ;; --symlink-regex) symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|' ;; --symlink) collect_var=symlink_files ;; --dry-run|-n) dry_run=: ;; --version) echo "gnupload $scriptversion" exit $? ;; --) shift break ;; -*) echo "$0: Unknown option \`$1', try \`$0 --help'" 1>&2 exit 1 ;; esac ;; *) if test -z "$collect_var"; then break else eval "$collect_var=\"\$$collect_var $1\"" fi ;; esac shift done dprint() { echo "Running $* ..." } if $dry_run; then dbg=dprint fi if test -z "$to"; then echo "$0: Missing destination sites" >&2 exit 1 fi if test -n "$symlink_files"; then x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'` if test -n "$x"; then echo "$0: Odd number of symlink arguments" >&2 exit 1 fi fi if test $# = 0; then if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then echo "$0: No file to upload" 1>&2 exit 1 fi else # Make sure all files exist. We don't want to ask # for the passphrase if the script will fail. for file do if test ! -f $file; then echo "$0: Cannot find \`$file'" 1>&2 exit 1 elif test -n "$symlink_expr"; then linkname=`echo $file | sed "$symlink_expr"` if test -z "$linkname"; then echo "$0: symlink expression produces empty results" >&2 exit 1 elif test "$linkname" = $file; then echo "$0: symlink expression does not alter file name" >&2 exit 1 fi fi done fi # Make sure passphrase is not exported in the environment. unset passphrase # Reset PATH to be sure that echo is a built-in. We will later use # `echo $passphrase' to output the passphrase, so it is important that # it is a built-in (third-party programs tend to appear in `ps' # listings with their arguments...). # Remember this script runs with `set -e', so if echo is not built-in # it will exit now. PATH=/empty echo -n "Enter GPG passphrase: " stty -echo read -r passphrase stty echo echo if test $# -ne 0; then for file do echo "Signing $file ..." rm -f $file.sig echo "$passphrase" | $dbg $GPG --passphrase-fd 0 -ba -o $file.sig $file done fi # mkdirective DESTDIR BASE FILE STMT # Arguments: See upload, below mkdirective () { stmt="$4" if test -n "$3"; then stmt=" filename: $3$stmt" fi cat >${2}.directive<&2 fi $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files ;; savannah.nongnu.org:*) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files ;; download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*) destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'` destdir_topdir=`echo "$destdir" | sed 's,/.*,,'` mkdirective "$destdir_p1" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive for f in $files $base.directive.asc do echo put $f done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir ;; /*) dest_host=`echo "$dest" | sed 's,:.*,,'` mkdirective "$destdir" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive $dbg cp $files $base.directive.asc $dest_host ;; *) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg scp $files $dest ;; esac rm -f $base.directive $base.directive.asc } ##### # Process any standalone directives stmt= if test -n "$symlink_files"; then stmt="$stmt `mksymlink $symlink_files`" fi for file in $delete_files do stmt="$stmt archive: $file" done for file in $delete_symlinks do stmt="$stmt rmsymlink: $file" done if test -n "$stmt"; then for dest in $to do destdir=`echo $dest | sed 's/[^:]*://'` upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt" done fi # Process actual uploads for dest in $to do for file do echo "Uploading $file to $dest ..." stmt= files="$file $file.sig" destdir=`echo $dest | sed 's/[^:]*://'` if test -n "$symlink_expr"; then linkname=`echo $file | sed "$symlink_expr"` stmt="$stmt symlink: $file $linkname symlink: $file.sig $linkname.sig" fi upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files" done done exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gss-1.0.2/build-aux/install-sh0000755000000000000000000003253711663554704013120 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gss-1.0.2/build-aux/pmccabe2html0000644000000000000000000006041311662447025013366 00000000000000# pmccabe2html - AWK script to convert pmccabe output to html -*- awk -*- # Copyright (C) 2007-2011 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Written by Jose E. Marchesi . # Adapted for gnulib by Simon Josefsson . # Added support for C++ by Giuseppe Scrivano . # Typical Invocation is from a Makefile.am: # # CYCLO_SOURCES = ${top_srcdir}/src/*.[ch] # # cyclo-$(PACKAGE).html: $(CYCLO_SOURCES) # $(PMCCABE) $(CYCLO_SOURCES) \ # | sort -nr \ # | $(AWK) -f ${top_srcdir}/build-aux/pmccabe2html \ # -v lang=html -v name="$(PACKAGE_NAME)" \ # -v vcurl="http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=%FILENAME%;hb=HEAD" \ # -v url="http://www.gnu.org/software/$(PACKAGE)/" \ # -v css=${top_srcdir}/build-aux/pmccabe.css \ # -v cut_dir=${top_srcdir}/ \ # > $@-tmp # mv $@-tmp $@ # # The variables available are: # lang output language, either 'html' or 'wiki' # name project name # url link to project's home page # vcurl URL to version controlled source code browser, # a %FILENAME% in the string is replaced with the relative # source filename # css CSS stylesheet filename, included verbatim in HTML output # css_url link to CSS stylesheet, an URL # Prologue & configuration BEGIN { section_global_stats_p = 1 section_function_cyclo_p = 1 # "html" or "wiki" package_name = name output_lang = lang # General Options cyclo_simple_max = 10 cyclo_moderate_max = 20 cyclo_high_max = 50 source_file_link_tmpl = vcurl # HTML options if (url != "") { html_prolog = "Back to " package_name " Homepage

" } html_epilog = "
\ Copyright (c) 2007, 2008 Free Software Foundation, Inc." html_doctype = "" html_comment = "" html_title = "Cyclomatic Complexity report for " package_name # Wiki options wiki_prolog = "{{Note|This page has been automatically generated}}" wiki_epilog = "" # Internal variables nfuncs = 0; } # Functions function build_stats() { # Maximum modified cyclo for (fcn in mcyclo) { num_of_functions++ if (mcyclo[fcn] > max_mcyclo) { max_mcyclo = mcyclo[fcn] } if (mcyclo[fcn] > cyclo_high_max) { num_of_untestable_functions++ } else if (mcyclo[fcn] > cyclo_moderate_max) { num_of_high_functions++ } else if (mcyclo[fcn] > cyclo_simple_max) { num_of_moderate_functions++ } else { num_of_simple_functions++ } } } function html_fnc_table_complete (caption) { html_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1) } function html_fnc_table_abbrev (caption) { html_fnc_table(caption, 1, 1, 0, 0, 1, 0, 0) } function html_fnc_table (caption, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { print "" if (caption != "") { print "" } html_fnc_header(fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) for (nfnc = 1; nfnc <= nfuncs; nfnc++) { html_fnc(nfnc, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) } print "
" caption "
" } function html_header () { print html_doctype print "" print html_comment print "" print "" html_title "" print "" print "" print "" print "" print "" print "" print "" print "" if (css_url != "") { print "" } if (css != "") { print "" close(css) } print "" print "" } function html_footer () { print "" print "" } function html_fnc_header (fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { print "" if (fname_p) { # Function name print "" print "" print "" print "" print "Function Name" print "" } if (mcyclo_p) { # Modified cyclo print "" print "Modified Cyclo" print "" } if (cyclo_p) { # Cyclo print "" print "Cyclomatic" print "
" print "Complexity" print "" } if (num_statements_p) { print "" print "Number of" print "
" print "Statements" print "" } if (num_lines_p) { print "" print "Number of" print "
" print "Lines" print "" } if (first_line_p) { print "" print "First Line" print "" } if (file_p) { print "" print "Source File" print "" } print "" } function html_fnc (nfun, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { fname = fnames[nfun] # Function name trclass = "function_entry_simple" if (mcyclo[nfun] > cyclo_high_max) { trclass="function_entry_untestable" } else if (mcyclo[nfun] > cyclo_moderate_max) { trclass="function_entry_high" } else if (mcyclo[nfun] > cyclo_simple_max) { trclass="function_entry_moderate" } print "" if (fname_p) { print "" if (file_p && mcyclo[nfun] > cyclo_simple_max) { print "\ " } else { print " " } print "" print "" print fname print "" } if (mcyclo_p) { # Modified cyclo print "" print mcyclo[nfun] print "" } if (cyclo_p) { # Cyclo print "" print cyclo[nfun] print "" } if (num_statements_p) { # Number of statements print "" print num_statements[nfun] print "" } if (num_lines_p) { # Number of lines print "" print num_lines[nfun] print "" } if (first_line_p) { # First line print "" print first_line[nfun] print "" } if (file_p) { href = "" if (source_file_link_tmpl != "") { # Get href target href = source_file_link_tmpl sub(/%FILENAME%/, file[nfun], href) } # Source file print "" if (href != "") { print "" file[nfun] "" } else { print file[nfun] } print "" print "" if (mcyclo[nfun] > cyclo_simple_max) { print "" num_columns = 1; if (fname_p) { num_columns++ } if (mcyclo_p) { num_columns++ } if (cyclo_p) { num_columns++ } if (num_statements_p) { num_columns++ } if (num_lines_p) { num_columns++ } if (first_line_p) { num_columns++ } if (file_p) { num_columns++ } print "" print "
" print "
"

            while ((getline codeline < (fname nfun "_fn.txt")) > 0)
            {
                sub(/\\/, ">", codeline)
                sub(/&/, "&", codeline)

                print codeline
            }
            close(fname nfun "_fn.txt")
            system("rm " "'" fname "'" nfun "_fn.txt")
            print "
" print "
" print "" print "" } } } function html_global_stats () { print "
Summary
" print "" # Total number of functions print "" print "" print "" print "" # Number of simple functions print "" print "" print "" print "" # Number of moderate functions print "" print "" print "" print "" # Number of high functions print "" print "" print "" print "" # Number of untestable functions print "" print "" print "" print "" print "
" print "Total number of functions" print "" print num_of_functions print "
" print "Number of low risk functions" print "" print num_of_simple_functions print "
" print "Number of moderate risk functions" print "" print num_of_moderate_functions print "
" print "Number of high risk functions" print "" print num_of_high_functions print "
" print "Number of untestable functions" print "" print num_of_untestable_functions print "
" print "
" } function html_function_cyclo () { print "
Details for all functions
" print "" print "" print "" print "" print "" print "" # Simple print "" print "" print "" print "" print "" # Moderate print "" print "" print "" print "" print "" # High print "" print "" print "" print "" print "" # Untestable print "" print "" print "" print "" print "" print "
" print " " print "" print "Cyclomatic Complexity" print "" print "Risk Evaluation" print "
" print " " print "" print "0 - " cyclo_simple_max print "" print "Simple module, without much risk" print "
" print " " print "" print cyclo_simple_max + 1 " - " cyclo_moderate_max print "" print "More complex module, moderate risk" print "
" print " " print "" print cyclo_moderate_max + 1 " - " cyclo_high_max print "" print "Complex module, high risk" print "
" print " " print "" print "greater than " cyclo_high_max print "" print "Untestable module, very high risk" print "
" print "
" html_fnc_table_complete("") } function wiki_global_stats () { print "{| class=\"cyclo_summary_table\"" # Total number of functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Total number of functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_functions # Number of simple functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of low risk functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_simple_functions # Number of moderate functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of moderate risk functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_moderate_functions # Number of high functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of high risk functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_high_functions # Number of untestable functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of untestable functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_untestable_functions print "|}" } function wiki_function_cyclo () { print "==Details for all functions==" print "Used ranges:" print "{| class =\"cyclo_ranges_table\"" print "|-" print "| class=\"cyclo_ranges_header_entry\" | " print "| class=\"cyclo_ranges_header_entry\" | Cyclomatic Complexity" print "| class=\"cyclo_ranges_header_entry\" | Risk Evaluation" # Simple print "|-" print "| class=\"cyclo_ranges_entry_simple\" | " print "| class=\"cyclo_ranges_entry\" | 0 - " cyclo_simple_max print "| class=\"cyclo_ranges_entry\" | Simple module, without much risk" # Moderate print "|-" print "| class=\"cyclo_ranges_entry_moderate\" | " print "| class=\"cyclo_ranges_entry\" |" cyclo_simple_max + 1 " - " cyclo_moderate_max print "| class=\"cyclo_ranges_entry\" | More complex module, moderate risk" # High print "|-" print "| class=\"cyclo_ranges_entry_high\" | " print "| class=\"cyclo_ranges_entry\" |" cyclo_moderate_max + 1 " - " cyclo_high_max print "| class=\"cyclo_ranges_entry\" | Complex module, high risk" # Untestable print "|-" print "| class=\"cyclo_ranges_entry_untestable\" | " print "| class=\"cyclo_ranges_entry\" | greater than " cyclo_high_max print "| class=\"cyclo_ranges_entry\" | Untestable module, very high risk" print "|}" print "" print "" wiki_fnc_table_complete("") } function wiki_fnc_table_complete (caption) { wiki_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1) } function wiki_fnc_table_abbrev (caption) { wiki_fnc_table(caption, 1, 0, 0, 0, 0, 0, 0) } function wiki_fnc_table (caption, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { print "{| width=\"90%\" class=\"cyclo_function_table\" cellpadding=\"0\" cellspacing=\"0\">" if (caption != "") { print "|+" caption } wiki_fnc_header(fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) for (nfnc = 1; nfnc <= nfuncs; nfnc++) { wiki_fnc(nfnc, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) } print "|}" } function wiki_fnc_header (fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { if (fname_p) { # Function name print "! class=\"cyclo_function_table_header_entry\" | Function Name" } if (mcyclo_p) { # Modified cyclo print "! class=\"cyclo_function_table_header_entry\" | Modified Cyclo" } if (cyclo_p) { # Cyclo print "! class=\"cyclo_function_table_header_entry\" | Cyclomatic Complexity" } if (num_statements_p) { print "! class=\"cyclo_function_table_header_entry\" | Number of Statements" } if (num_lines_p) { print "! class=\"cyclo_function_table_header_entry\" | Number of Lines" } if (first_line_p) { print "! class=\"cyclo_function_table_header_entry\" | First Line" } if (file_p) { print "! class=\"cyclo_function_table_header_entry\" | Source File" } } function wiki_fnc (nfnc, fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { fname = fnames[nfnc] # Function name trclass = "cyclo_function_entry_simple" if (mcyclo[nfnc] > cyclo_high_max) { trclass="cyclo_function_entry_untestable" } else if (mcyclo[nfnc] > cyclo_moderate_max) { trclass="cyclo_function_entry_high" } else if (mcyclo[nfnc] > cyclo_simple_max) { trclass="cyclo_function_entry_moderate" } print "|- class=\"" trclass "\"" if (fname_p) { print "| class=\"cyclo_function_entry_name\" |" fname } if (mcyclo_p) { # Modified cyclo print "| class=\"cyclo_function_entry_cyclo\" |" mcyclo[nfnc] } if (cyclo_p) { # Cyclo print "| class=\"cyclo_function_entry_cyclo\" |" cyclo[nfnc] } if (num_statements_p) { # Number of statements print "| class=\"cyclo_function_entry_number\" |" num_statements[nfnc] } if (num_lines_p) { # Number of lines print "| class=\"cyclo_function_entry_number\" |" num_lines[nfnc] } if (first_line_p) { # First line print "| class=\"cyclo_function_entry_number\" |" first_line[nfnc] } if (file_p) { href = "" if (source_file_link_tmpl != "") { # Get href target href = source_file_link_tmpl sub(/%FILENAME%/, file[nfnc], href) } # Source file print "| class=\"cyclo_function_entry_filename\" |" \ ((href != "") ? "[" href " " file[nfnc] "]" : "[" file[nfnc] "]") } } # Scan data from a line { function_name = $7 nfuncs++; fnames[nfuncs] = function_name mcyclo[nfuncs] = $1 cyclo[nfuncs] = $2 num_statements[nfuncs] = $3 first_line[nfuncs] = $4 num_lines[nfuncs] = $5 # Build the filename from the file_spec ($6) begin_util_path = index($6, cut_dir) tmpfilename = substr($6, begin_util_path + length(cut_dir)) sub(/\([0-9]+\):/, "", tmpfilename) file[nfuncs] = tmpfilename if (mcyclo[nfuncs] > cyclo_simple_max) { # Extract function contents to a fn_txt file filepath = $6 sub(/\([0-9]+\):/, "", filepath) num_line = 0 while ((getline codeline < filepath) > 0) { num_line++; if ((num_line >= first_line[nfuncs]) && (num_line < first_line[nfuncs] + num_lines[nfuncs])) { print codeline > (function_name nfuncs "_fn.txt") } } close (function_name nfuncs "_fn.txt") close(filepath) } # Initial values for statistics variables num_of_functions = 0 max_mcyclo = 0 max_function_length = 0 num_of_simple_functions = 0 num_of_moderate_functions = 0 num_of_high_functions = 0 num_of_untestable_functions = 0 } # Epilogue END { # Print header (only for html) if (output_lang == "html") { html_header() } # Print prolog if ((output_lang == "html") && (html_prolog != "")) { print html_prolog } if ((output_lang == "wiki") && (wiki_prolog != "")) { print wiki_prolog } if (output_lang == "html") { print "
" package_name " Cyclomatic Complexity Report
" print "

Report generated at: " strftime() "

" } if (output_lang == "wiki") { print "==" package_name " Cyclomatic Complexity Report==" print "Report generated at: '''" strftime() "'''" } if (section_global_stats_p) { build_stats() if (output_lang == "html") { html_global_stats() } if (output_lang == "wiki") { wiki_global_stats() } } if (section_function_cyclo_p) { if (output_lang == "html") { html_function_cyclo() } if (output_lang == "wiki") { wiki_function_cyclo() } } # Print epilog if ((output_lang == "html") && (html_epilog != "")) { print html_epilog } if ((output_lang == "wiki") && (wiki_epilog != "")) { print wiki_epilog } # Print footer (html only) if (output_lang == "html") { html_footer() } } # End of pmccabe2html gss-1.0.2/build-aux/depcomp0000755000000000000000000004426711663554705012475 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free # Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u="sed s,\\\\\\\\,/,g" depmode=msvisualcpp fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gss-1.0.2/build-aux/missing0000755000000000000000000002623311663554704012507 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gss-1.0.2/build-aux/useless-if-before-free0000755000000000000000000001411411662447025015263 00000000000000eval '(exit $?0)' && eval 'exec perl -wST "$0" ${1+"$@"}' & eval 'exec perl -wST "$0" $argv:q' if 0; # Detect instances of "if (p) free (p);". # Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces. my $VERSION = '2011-04-20 13:43'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. # Copyright (C) 2008-2011 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Written by Jim Meyering use strict; use warnings; use Getopt::Long; (my $ME = $0) =~ s|.*/||; # use File::Coda; # http://meyering.net/code/Coda/ END { defined fileno STDOUT or return; close STDOUT and return; warn "$ME: failed to close standard output: $!\n"; $? ||= 1; } sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try `$ME --help' for more information.\n"; } else { print $STREAM < sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; exit }, list => \$list, 'name=s@' => \@name, ) or usage 1; # Make sure we have the right number of non-option arguments. # Always tell the user why we fail. @ARGV < 1 and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR; my $or = join '|', @name; my $regexp = qr/(?:$or)/; # Set the input record separator. # Note: this makes it impractical to print line numbers. $/ = '"'; my $found_match = 0; FILE: foreach my $file (@ARGV) { open FH, '<', $file or (warn "$ME: can't open `$file' for reading: $!\n"), $err = EXIT_ERROR, next; while (defined (my $line = )) { while ($line =~ /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\) # 1 2 3 (?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;| \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg) { my $all = $1; my ($lhs, $rhs) = ($2, $3); my ($free_opnd, $braced_free_opnd) = ($4, $5); my $non_NULL; if (!defined $rhs) { $non_NULL = $lhs } elsif (is_NULL $rhs) { $non_NULL = $lhs } elsif (is_NULL $lhs) { $non_NULL = $rhs } else { next } # Compare the non-NULL part of the "if" expression and the # free'd expression, without regard to white space. $non_NULL =~ tr/ \t//d; my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd; $e2 =~ tr/ \t//d; if ($non_NULL eq $e2) { $found_match = 1; $list and (print "$file\0"), next FILE; print "$file: $all\n"; } } } } continue { close FH; } $found_match && $err == EXIT_NO_MATCH and $err = EXIT_MATCH; exit $err; } my $foo = <<'EOF'; # The above is to *find* them. # This adjusts them, removing the unnecessary "if (p)" part. # FIXME: do something like this as an option (doesn't do braces): free=xfree git grep -l -z "$free *(" \ | xargs -0 useless-if-before-free -l --name="$free" \ | xargs -0 perl -0x3b -pi -e \ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s' # Use the following to remove redundant uses of kfree inside braces. # Note that -0777 puts perl in slurp-whole-file mode; # but we have plenty of memory, these days... free=kfree git grep -l -z "$free *(" \ | xargs -0 useless-if-before-free -l --name="$free" \ | xargs -0 perl -0777 -pi -e \ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms' Be careful that the result of the above transformation is valid. If the matched string is followed by "else", then obviously, it won't be. When modifying files, refuse to process anything other than a regular file. EOF ## Local Variables: ## mode: perl ## indent-tabs-mode: nil ## eval: (add-hook 'write-file-hooks 'time-stamp) ## time-stamp-start: "my $VERSION = '" ## time-stamp-format: "%:y-%02m-%02d %02H:%02M" ## time-stamp-time-zone: "UTC" ## time-stamp-end: "'; # UTC" ## End: gss-1.0.2/build-aux/update-copyright0000755000000000000000000002162711662447025014324 00000000000000eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}' & eval 'exec perl -wS -0777 -pi "$0" $argv:q' if 0; # Update an FSF copyright year list to include the current year. my $VERSION = '2011-01-02.20:59'; # UTC # Copyright (C) 2009-2011 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Written by Jim Meyering and Joel E. Denny # The arguments to this script should be names of files that contain # copyright statements to be updated. The copyright holder's name # defaults to "Free Softward Foundation, Inc." but may be changed to # any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment # variable. # # For example, you might wish to use the update-copyright target rule # in maint.mk from gnulib's maintainer-makefile module. # # Iff a copyright statement is recognized in a file and the final # year is not the current year, then the statement is updated for the # new year and it is reformatted to: # # 1. Fit within 72 columns. # 2. Convert 2-digit years to 4-digit years by prepending "19". # 3. Expand copyright year intervals. (See "Environment variables" # below.) # # A warning is printed for every file for which no copyright # statement is recognized. # # Each file's copyright statement must be formated correctly in # order to be recognized. For example, each of these is fine: # # Copyright @copyright{} 1990-2005, 2007-2009 Free Software # Foundation, Inc. # # # Copyright (C) 1990-2005, 2007-2009 Free Software # # Foundation, Inc. # # /* # * Copyright © 90,2005,2007-2009 # * Free Software Foundation, Inc. # */ # # However, the following format is not recognized because the line # prefix changes after the first line: # # ## Copyright (C) 1990-2005, 2007-2009 Free Software # # Foundation, Inc. # # However, any correctly formatted copyright statement following # a non-matching copyright statements would be recognized. # # The exact conditions that a file's copyright statement must meet # to be recognized are: # # 1. It is the first copyright statement that meets all of the # following conditions. Subsequent copyright statements are # ignored. # 2. Its format is "Copyright (C)", then a list of copyright years, # and then the name of the copyright holder. # 3. The "(C)" takes one of the following forms or is omitted # entirely: # # A. (C) # B. (c) # C. @copyright{} # D. © # # 4. The "Copyright" appears at the beginning of a line, except that it # may be prefixed by any sequence (e.g., a comment) of no more than # 5 characters -- including white space. # 5. Iff such a prefix is present, the same prefix appears at the # beginning of each remaining line within the FSF copyright # statement. There is one exception in order to support C-style # comments: if the first line's prefix contains nothing but # whitespace surrounding a "/*", then the prefix for all subsequent # lines is the same as the first line's prefix except with each of # "/" and possibly "*" replaced by a " ". The replacement of "*" # by " " is consistent throughout all subsequent lines. # 6. Blank lines, even if preceded by the prefix, do not appear # within the FSF copyright statement. # 7. Each copyright year is 2 or 4 digits, and years are separated by # commas or dashes. Whitespace may appear after commas. # # Environment variables: # # 1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement # is reformatted even if it does not need updating for the new # year. If unset or set to 0, only updated FSF copyright # statements are reformatted. # 2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive # copyright years (such as 90, 1991, 1992-2007, 2008) in a # reformatted FSF copyright statement is collapsed to a single # interval (such as 1990-2008). If unset or set to 0, all existing # copyright year intervals in a reformatted FSF copyright statement # are expanded instead. # 3. For testing purposes, you can set the assumed current year in # UPDATE_COPYRIGHT_YEAR. # 4. The default maximum line length for a copyright line is 72. # Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length. # 5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other # than "Free Software Foundation, Inc.". use strict; use warnings; my $copyright_re = 'Copyright'; my $circle_c_re = '(?:\([cC]\)|@copyright{}|©)'; my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER}; $holder ||= 'Free Software Foundation, Inc.'; my $prefix_max = 5; my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH}; !$margin || $margin !~ m/^\d+$/ and $margin = 72; my $tab_width = 8; my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR}; if (!$this_year || $this_year !~ m/^\d{4}$/) { my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ()); $this_year = $year + 1900; } # Unless the file consistently uses "\r\n" as the EOL, use "\n" instead. my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n"; my $leading; my $prefix; my $ws_re; my $stmt_re; while (/(^|\n)(.{0,$prefix_max})$copyright_re/g) { $leading = "$1$2"; $prefix = $2; if ($prefix =~ /^(\s*\/)\*(\s*)$/) { $prefix =~ s,/, ,; my $prefix_ws = $prefix; $prefix_ws =~ s/\*/ /; # Only whitespace. if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/) { $prefix = $prefix_ws; } } $ws_re = '[ \t\r\f]'; # \s without \n $ws_re = "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)"; my $holder_re = $holder; $holder_re =~ s/\s/$ws_re/g; my $stmt_remainder_re = "(?:$ws_re$circle_c_re)?" . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*" . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re"; if (/\G$stmt_remainder_re/) { $stmt_re = quotemeta($leading) . "($copyright_re$stmt_remainder_re)"; last; } } if (defined $stmt_re) { /$stmt_re/ or die; # Should never die. my $stmt = $1; my $final_year_orig = $2; # Handle two-digit year numbers like "98" and "99". my $final_year = $final_year_orig; $final_year <= 99 and $final_year += 1900; if ($final_year != $this_year) { # Update the year. $stmt =~ s/$final_year_orig/$final_year, $this_year/; } if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'}) { # Normalize all whitespace including newline-prefix sequences. $stmt =~ s/$ws_re/ /g; # Put spaces after commas. $stmt =~ s/, ?/, /g; # Convert 2-digit to 4-digit years. $stmt =~ s/(\b\d\d\b)/19$1/g; # Make the use of intervals consistent. if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS}) { $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg; } else { $stmt =~ s/ (\d{4}) (?: (,\ |-) ((??{ if ($2 eq '-') { '\d{4}'; } elsif (!$3) { $1 + 1; } else { $3 + 1; } })) )+ /$1-$3/gx; } # Format within margin. my $stmt_wrapped; my $text_margin = $margin - length($prefix); if ($prefix =~ /^(\t+)/) { $text_margin -= length($1) * ($tab_width - 1); } while (length $stmt) { if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//) || ($stmt =~ s/^([\S]+)(?: |$)//)) { my $line = $1; $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading; $stmt_wrapped .= $line; } else { # Should be unreachable, but we don't want an infinite # loop if it can be reached. die; } } # Replace the old copyright statement. s/$stmt_re/$stmt_wrapped/; } } else { print STDERR "$ARGV: warning: copyright statement not found\n"; } # Local variables: # mode: perl # indent-tabs-mode: nil # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "my $VERSION = '" # time-stamp-format: "%:y-%02m-%02d.%02H:%02M" # time-stamp-time-zone: "UTC" # time-stamp-end: "'; # UTC" # End: gss-1.0.2/build-aux/snippet/0000755000000000000000000000000011663555055012644 500000000000000gss-1.0.2/build-aux/snippet/warn-on-use.h0000644000000000000000000001201611662447025015104 00000000000000/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. This macro is useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system : #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static inline char ***rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function __attribute__ ((__warning__ (message))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ extern __typeof__ (function) function # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") is like _GL_WARN_ON_USE (function, "string"), except that the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ extern rettype function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif gss-1.0.2/build-aux/snippet/arg-nonnull.h0000644000000000000000000000230011662447025015160 00000000000000/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif gss-1.0.2/build-aux/snippet/c++defs.h0000644000000000000000000002675311662447025014160 00000000000000/* C++ compatible function declaration macros. Copyright (C) 2010-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ rettype (*const func) parameters = ::rpl_func; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ rettype (*const func) parameters = \ reinterpret_cast(::rpl_func); \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* If we were to write rettype (*const func) parameters = ::func; like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls better (remove an indirection through a 'static' pointer variable), but then the _GL_CXXALIASWARN macro below would cause a warning not only for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */ # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static rettype (*func) parameters = ::func; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static rettype (*func) parameters = \ reinterpret_cast(::func); \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static rettype (*func) parameters = \ reinterpret_cast( \ (rettype2(*)parameters2)(::func)); \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug , we enable the warning only when not optimizing. */ # if !__OPTIMIZE__ # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ gss-1.0.2/build-aux/texinfo.tex0000644000000000000000000110035111663554704013301 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2009-08-14.15} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% Math-mode def from plain.tex. \let\ptexraggedright=\raggedright % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt} % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\undefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % For @cropmarks command. % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty out of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% \kern-.15em \TeX } % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in % Old definition--didn't work. %\parseargdef\need{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\next\centerH \else \let\next\centerV \fi \next{\hfil \ignorespaces#1\unskip \hfil}% } \def\centerH#1{% {% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }% } \def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} % @sp n outputs n lines of vertical space \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a \ character. % FYI, plain.tex uses \\ as a temporary control sequence (why?), but % this is not advertised and we don't care. Texinfo does not % otherwise define @\. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @comma{} is so commas can be inserted into text without messing up % Texinfo's parsing. % \let\comma = , % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as \undefined, % borrowed from ifpdf.sty. \ifx\pdfoutput\undefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html % (and related messages, the final outcome is that it is up to the TeX % user to double the backslashes and otherwise make the string valid, so % that's what we do). % double active backslashes. % {\catcode`\@=0 \catcode`\\=\active @gdef@activebackslashdouble{% @catcode`@\=@active @let\=@doublebackslash} } % To handle parens, we must adopt a different approach, since parens are % not active characters. hyperref.dtx (which has the same problem as % us) handles it with this amazing macro to replace tokens, with minor % changes for Texinfo. It is included here under the GPL by permission % from the author, Heiko Oberdiek. % % #1 is the tokens to replace. % #2 is the replacement. % #3 is the control sequence with the string. % \def\HyPsdSubst#1#2#3{% \def\HyPsdReplace##1#1##2\END{% ##1% \ifx\\##2\\% \else #2% \HyReturnAfterFi{% \HyPsdReplace##2\END }% \fi }% \xdef#3{\expandafter\HyPsdReplace#3#1\END}% } \long\def\HyReturnAfterFi#1\fi{\fi#1} % #1 is a control sequence in which to do the replacements. \def\backslashparens#1{% \xdef#1{#1}% redefine it as its expansion; the definition is simply % \lastnode when called from \setref -> \pdfmkdest. \HyPsdSubst{(}{\realbackslash(}{#1}% \HyPsdSubst{)}{\realbackslash)}{#1}% } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .png, .jpg, .pdf (among % others). Let's try in that order. \let\pdfimgext=\empty \begingroup \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \imagewidth \fi \ifdim \wd2 >0pt height \imageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \activebackslashdouble \makevalueexpandable \def\pdfdestname{#1}% \backslashparens\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \def\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else % Doubled backslashes in the name. {\activebackslashdouble \xdef\pdfoutlinedest{#3}% \backslashparens\pdfoutlinedest}% \fi % % Also double the backslashes in the display string. {\activebackslashdouble \xdef\pdfoutlinetext{#1}% \backslashparens\pdfoutlinetext}% % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % % Read toc silently, to get counts of subentries for \pdfoutline. \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % xx to do this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Right % now, I guess we'll just let the pdf reader have its way. \indexnofonts \setupdatafile \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\undefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (currently only OT1, OT1IT and OT1TT are allowed, pass % empty to omit). \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % emacs-page end of cmaps % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\undefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. This is the default in % Texinfo. % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} % reset the current fonts \textfonts \rm } % end of 11pt text font size definitions % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} % reduce space between paragraphs \divide\parskip by 2 % reset the current fonts \textfonts \rm } % end of 10pt text font size definitions % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xword{10} \def\xiword{11} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% \wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} \gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright \let\markupsetuplqsamp \markupsetnoligaturesquoteleft \let\markupsetuplqkbd \markupsetnoligaturesquoteleft % Allow an option to not replace quotes with a regular directed right % quote/apostrophe (char 0x27), but instead use the undirected quote % from cmtt (char 0x0d). The undirected quote is ugly, so don't make it % the default, but it works for pasting with more pdf viewers (at least % evince), the lilypond developers report. xpdf does work with the % regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else \ptexslash\fi\fi\fi} \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally uses \ttsl. % @var is set to this for defun arguments. \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\slanted=\smartslanted \def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}} \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % ctrl is no longer a Texinfo command. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\realdash \let_\realunder \fi \codex } } \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } \def\codex #1{\tclose{#1}\endgroup} % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is undesirable in % some manuals, especially if they don't have long identifiers in % general. @allowcodebreaks provides a way to control this. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg'}% \fi\fi } % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle option `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. Perhaps eventually put in % a hypertex \special here. % \def\uref#1{\douref #1,,,\finish} \def\douref#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } \message{glyphs,} % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\undefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rmisbold #1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\HEADINGSoff{% \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\undefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\realdash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control% words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\expansion \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sc \definedummyword\t % % Commands that take arguments. \definedummyword\acronym \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % Hopefully, all control words can become @asis. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% % how to handle braces? \def\_{\normalunderscore}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{% \ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi } % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % \unnumberedno is an oxymoron, of course. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achive this, remember the "biggest" unnum. sec. we are currently in: \chardef\unmlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unmlevel \chardef\unmlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unmlevel \def\headtype{U}% \else \chardef\unmlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } \outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } \outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. \outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } \outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}% \bigskip \par\penalty 200\relax \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% \hbox to 0pt{}% \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) \vskip-\parskip % % This is purely so the last item on the list is a known \penalty > % 10000. This is so \startdefun can avoid allowing breakpoints after % section headings. Otherwise, it would insert a valid breakpoint between: % % @section sec-whatever % @deffn def-whatever \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw Tex temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain tex @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of \def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it by one command: \def\makedispenv #1#2{ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two synonyms: \def\maketwodispenvs #1#2#3{ \makedispenv{#1}{#3} \makedispenv{#2}{#3} } % @lisp: indented, narrowed, typewriter font; @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvs {lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenv {display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenv{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \def\quotationstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi \parsearg\quotationlabel } \envdef\quotation{% \setnormaldispenv \quotationstart } \envdef\smallquotation{% \setsmalldispenv \quotationstart } \let\Esmallquotation = \Equotation % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\undefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % \def\starttabbox{\setbox0=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen0=\wd0 % the width so far, or since the previous tab \divide\dimen0 by\tabw \multiply\dimen0 by\tabw % compute previous multiple of \tabw \advance\dimen0 by\tabw % advance to next multiple of \tabw \wd0=\dimen0 \box0 \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart % Easiest (and conventionally used) font for verbatim \tt \def\par{\leavevmode\egroup\box0\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a minor refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } %%% Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } %%% Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } %%% Type: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % How we'll format the type name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % (plain.tex says that \dimen1 should be used only as global.) \parshape 2 0in \dimen0 \defargsindent \dimen2 % % Put the type name to the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% return value type \ifx\temp\empty\else \tclose{\temp} \fi #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. Let's try @var for that. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\undefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{% \begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % ... and \example \spaceisspace % % Append \endinput to make sure that TeX does not see the ending newline. % I've verified that it is necessary both for e-TeX and for ordinary TeX % --kasal, 29nov03 \scantokens{#1\endinput}% \endgroup } \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \. % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. \def\scanctxt{% \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% \scanctxt \catcode`\\=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0% \else \expandafter\parsemargdef \argl;% \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname #1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.blah for each blah % in the params list, to be ##N where N is the position in that list. % That gets used by \mbodybackslash (above). % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. \def\parsemargdef#1;{\paramno=0\def\paramlist{}% \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1% \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \fi \fi} \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg) \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Just make them active and then expand them all to nothing. \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout }% \fi } % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printedrefname{\ignorespaces #3}% \setbox1=\hbox{\printedmanual\unskip}% \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. \getfilename{#4}% % % See comments at \activebackslashdouble. {\activebackslashdouble \xdef\pdfxrefdest{#1}% \backslashparens\pdfxrefdest}% % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd0 = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd1 > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not % insert empty discretionaries after hyphens, which means that it will % not find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. \ifdim \wd1 > 0pt \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via a macro so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \fi \endlink \endgroup} % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\undefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing this stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. On the other hand, if % it's at the top level, we don't want the normal paragraph indentation. \noindent % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip \fi % space after the standalone image \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{~} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guilletright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{~} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'\i} \gdef^^ee{\^\i} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be so finicky about underfull hboxes, either. \hbadness = 2000 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} \def\normalunderscore{_} \def\normalverticalbar{|} \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} \def\normaldollar{$}%$ font-lock fix % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active @def@normalbackslash{{@tt@backslashcurfont}} % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % @def@normalturnoffactive{% @let\=@normalbackslash @let"=@normaldoublequote @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus @let$=@normaldollar %$ font-lock fix @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These look ok in all fonts, so just make them not special. @catcode`@& = @other @catcode`@# = @other @catcode`@% = @other @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore gss-1.0.2/build-aux/gendocs.sh0000755000000000000000000003200211662447025013054 00000000000000#!/bin/sh -e # gendocs.sh -- generate a GNU manual in many formats. This script is # mentioned in maintain.texi. See the help message below for usage details. scriptversion=2011-04-08.14 # Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Original author: Mohit Agarwal. # Send bug reports and any other correspondence to bug-texinfo@gnu.org. # # The latest version of this script, and the companion template, is # available from Texinfo CVS: # http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh # http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template # # An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib). prog=`basename "$0"` srcdir=`pwd` scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh" templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template" : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} : ${MAKEINFO="makeinfo"} : ${TEXI2DVI="texi2dvi -t @finalout"} : ${DVIPS="dvips"} : ${DOCBOOK2HTML="docbook2html"} : ${DOCBOOK2PDF="docbook2pdf"} : ${DOCBOOK2PS="docbook2ps"} : ${DOCBOOK2TXT="docbook2txt"} : ${GENDOCS_TEMPLATE_DIR="."} : ${TEXI2HTML="texi2html"} unset CDPATH unset use_texi2html version="gendocs.sh $scriptversion Copyright 2010 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING." usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE Generate various output formats from PACKAGE.texinfo (or .texi or .txi) source. See the GNU Maintainers document for a more extensive discussion: http://www.gnu.org/prep/maintain_toc.html Options: -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} -o OUTDIR write files into OUTDIR, instead of manual/. --email ADR use ADR as contact in generated web pages. --docbook convert to DocBook too (xml, txt, html, pdf and ps). --html ARG pass indicated ARG to makeinfo or texi2html for HTML targets. --texi2html use texi2html to generate HTML targets. --help display this help and exit successfully. --version display version information and exit successfully. Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" Typical sequence: cd PACKAGESOURCE/doc wget \"$scripturl\" wget \"$templateurl\" $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" Output will be in a new subdirectory \"manual\" (by default, use -o OUTDIR to override). Move all the new files into your web CVS tree, as explained in the Web Pages node of maintain.texi. Please use the --email ADDRESS option to specify your bug-reporting address in the generated HTML pages. MANUAL-TITLE is included as part of the HTML of the overall manual/index.html file. It should include the name of the package being documented. manual/index.html is created by substitution from the file $GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the generic template for your own purposes.) If you have several manuals, you'll need to run this script several times with different MANUAL values, specifying a different output directory with -o each time. Then write (by hand) an overall index.html with links to them all. If a manual's Texinfo sources are spread across several directories, first copy or symlink all Texinfo sources into a single directory. (Part of the script's work is to make a tar.gz of the sources.) You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and DVIPS to control the programs that get executed, and GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is looked for. With --docbook, the environment variables DOCBOOK2HTML, DOCBOOK2PDF, DOCBOOK2PS, and DOCBOOK2TXT are also respected. By default, makeinfo and texi2dvi are run in the default (English) locale, since that's the language of most Texinfo manuals. If you happen to have a non-English manual and non-English web site, see the SETLANG setting in the source. Email bug reports or enhancement requests to bug-texinfo@gnu.org. " calcsize() { size=`ls -ksl $1 | awk '{print $1}'` echo $size } MANUAL_TITLE= PACKAGE= EMAIL=webmasters@gnu.org # please override with --email htmlarg= outdir=manual srcfile= while test $# -gt 0; do case $1 in --email) shift; EMAIL=$1;; --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; -s) shift; srcfile=$1;; -o) shift; outdir=$1;; --docbook) docbook=yes;; --html) shift; htmlarg=$1;; --texi2html) use_texi2html=1;; -*) echo "$0: Unknown option \`$1'." >&2 echo "$0: Try \`--help' for more information." >&2 exit 1;; *) if test -z "$PACKAGE"; then PACKAGE=$1 elif test -z "$MANUAL_TITLE"; then MANUAL_TITLE=$1 else echo "$0: extra non-option argument \`$1'." >&2 exit 1 fi;; esac shift done # For most of the following, the base name is just $PACKAGE base=$PACKAGE if test -n "$srcfile"; then # but here, we use the basename of $srcfile base=`basename "$srcfile"` case $base in *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;; esac PACKAGE=$base elif test -s "$srcdir/$PACKAGE.texinfo"; then srcfile=$srcdir/$PACKAGE.texinfo elif test -s "$srcdir/$PACKAGE.texi"; then srcfile=$srcdir/$PACKAGE.texi elif test -s "$srcdir/$PACKAGE.txi"; then srcfile=$srcdir/$PACKAGE.txi else echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 exit 1 fi if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2 echo "$0: it is available from $templateurl." >&2 exit 1 fi case $outdir in /*) abs_outdir=$outdir;; *) abs_outdir=$srcdir/$outdir;; esac echo Generating output formats for $srcfile cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\"" echo "Generating info files... ($cmd)" eval "$cmd" mkdir -p "$outdir/" tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"` # do not mv the info files, there's no point in having them available # separately on the web. cmd="$SETLANG ${TEXI2DVI} \"$srcfile\"" echo "Generating dvi ... ($cmd)" eval "$cmd" # now, before we compress dvi: echo Generating postscript... ${DVIPS} $PACKAGE -o gzip -f -9 $PACKAGE.ps ps_gz_size=`calcsize $PACKAGE.ps.gz` mv $PACKAGE.ps.gz "$outdir/" # compress/finish dvi: gzip -f -9 $PACKAGE.dvi dvi_gz_size=`calcsize $PACKAGE.dvi.gz` mv $PACKAGE.dvi.gz "$outdir/" cmd="$SETLANG ${TEXI2DVI} --pdf \"$srcfile\"" echo "Generating pdf ... ($cmd)" eval "$cmd" pdf_size=`calcsize $PACKAGE.pdf` mv $PACKAGE.pdf "$outdir/" cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\"" echo "Generating ASCII... ($cmd)" eval "$cmd" ascii_size=`calcsize $PACKAGE.txt` gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz" ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"` mv $PACKAGE.txt "$outdir/" html_split() { opt="--split=$1 $htmlarg --node-files" cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" echo "Generating html by $1... ($cmd)" eval "$cmd" split_html_dir=$PACKAGE.html ( cd ${split_html_dir} || exit 1 ln -sf ${PACKAGE}.html index.html tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html ) eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"` rm -f "$outdir"/html_$1/*.html mkdir -p "$outdir/html_$1/" mv ${split_html_dir}/*.html "$outdir/html_$1/" rmdir ${split_html_dir} } if test -z "$use_texi2html"; then opt="--no-split --html -o $PACKAGE.html $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" echo "Generating monolithic html... ($cmd)" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` mv $PACKAGE.html "$outdir/" cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $htmlarg \"$srcfile\"" echo "Generating html by node... ($cmd)" eval "$cmd" split_html_dir=$PACKAGE.html ( cd ${split_html_dir} || exit 1 tar -czf "$abs_outdir/${PACKAGE}.html_node.tar.gz" -- *.html ) html_node_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node.tar.gz"` rm -f "$outdir"/html_node/*.html mkdir -p "$outdir/html_node/" mv ${split_html_dir}/*.html "$outdir/html_node/" rmdir ${split_html_dir} else cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $htmlarg \"$srcfile\"" echo "Generating monolithic html... ($cmd)" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` mv $PACKAGE.html "$outdir/" html_split node html_split chapter html_split section fi echo Making .tar.gz for sources... d=`dirname $srcfile` ( cd "$d" srcfiles=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null` || true tar cvzfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles ) texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` if test -n "$docbook"; then cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml" echo "Generating docbook XML... ($cmd)" eval "$cmd" docbook_xml_size=`calcsize $PACKAGE-db.xml` gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz" docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"` mv $PACKAGE-db.xml "$outdir/" split_html_db_dir=html_node_db cmd="${DOCBOOK2HTML} -o $split_html_db_dir \"${outdir}/$PACKAGE-db.xml\"" echo "Generating docbook HTML... ($cmd)" eval "$cmd" ( cd ${split_html_db_dir} || exit 1 tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html ) html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"` rm -f "$outdir"/html_node_db/*.html mkdir -p "$outdir/html_node_db" mv ${split_html_db_dir}/*.html "$outdir/html_node_db/" rmdir ${split_html_db_dir} cmd="${DOCBOOK2TXT} \"${outdir}/$PACKAGE-db.xml\"" echo "Generating docbook ASCII... ($cmd)" eval "$cmd" docbook_ascii_size=`calcsize $PACKAGE-db.txt` mv $PACKAGE-db.txt "$outdir/" cmd="${DOCBOOK2PS} \"${outdir}/$PACKAGE-db.xml\"" echo "Generating docbook PS... ($cmd)" eval "$cmd" gzip -f -9 -c $PACKAGE-db.ps >"$outdir/$PACKAGE-db.ps.gz" docbook_ps_gz_size=`calcsize "$outdir/$PACKAGE-db.ps.gz"` mv $PACKAGE-db.ps "$outdir/" cmd="${DOCBOOK2PDF} \"${outdir}/$PACKAGE-db.xml\"" echo "Generating docbook PDF... ($cmd)" eval "$cmd" docbook_pdf_size=`calcsize $PACKAGE-db.pdf` mv $PACKAGE-db.pdf "$outdir/" fi echo "Writing index file..." if test -z "$use_texi2html"; then CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" else CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" fi curdate=`$SETLANG date '+%B %d, %Y'` sed \ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \ -e "s!%%EMAIL%%!$EMAIL!g" \ -e "s!%%PACKAGE%%!$PACKAGE!g" \ -e "s!%%DATE%%!$curdate!g" \ -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \ -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \ -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \ -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \ -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ -e "s!%%PDF_SIZE%%!$pdf_size!g" \ -e "s!%%PS_GZ_SIZE%%!$ps_gz_size!g" \ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ -e "s!%%DOCBOOK_PS_GZ_SIZE%%!$docbook_ps_gz_size!g" \ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ -e "s,%%SCRIPTURL%%,$scripturl,g" \ -e "s!%%SCRIPTNAME%%!$prog!g" \ -e "$CONDS" \ $GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html" echo "Done, see $outdir/ subdirectory for new files." # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/build-aux/config.rpath��������������������������������������������������������������������0000755�0000000�0000000�00000044435�11662447025�013420� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2011 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF # How to pass a linker flag through the compiler. wl="$escaped_wl" # Static library suffix (normally "a"). libext="$libext" # Shared library suffix (normally "so"). shlibext="$shlibext" # Format of library name prefix. libname_spec="$escaped_libname_spec" # Library names that the linker finds when passed -lNAME. library_names_spec="$escaped_library_names_spec" # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="$hardcode_libdir_separator" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct="$hardcode_direct" # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L="$hardcode_minus_L" EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/build-aux/mdate-sh������������������������������������������������������������������������0000755�0000000�0000000�00000012751�11663554704�012540� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007, 2009 Free # Software Foundation, Inc. # written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. case $1 in '') echo "$0: No file. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification time of FILE. Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume `unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A `ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named `Jan', or `Feb', etc. However, it's unlikely that `/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: �����������������������gss-1.0.2/build-aux/config.guess��������������������������������������������������������������������0000755�0000000�0000000�00000127637�11663554704�013442� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 # Free Software Foundation, Inc. timestamp='2009-12-30' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to <config-patches@gnu.org> and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <sys/systemcfg.h> main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <unistd.h> int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` echo ${UNAME_MACHINE}-pc-isc$UNAME_REL elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c <<EOF #ifdef _SEQUENT_ # include <sys/types.h> # include <sys/utsname.h> #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include <sys/param.h> printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include <sys/param.h> # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 <<EOF $0: unable to guess system type This script, last modified $timestamp, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be pertinent to <config-patches@gnu.org> in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: �������������������������������������������������������������������������������������������������gss-1.0.2/build-aux/config.sub����������������������������������������������������������������������0000755�0000000�0000000�00000103445�11663554704�013074� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 # Free Software Foundation, Inc. timestamp='2010-01-22' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to <config-patches@gnu.org>. Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile-* | tilegx-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; # This must be matched before tile*. tilegx*) basic_machine=tilegx-unknown os=-linux-gnu ;; tile*) basic_machine=tile-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/cfg.mk������������������������������������������������������������������������������������0000644�0000000�0000000�00000006673�11662446736�010320� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (C) 2006-2011 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation; either version 3 of the License, or (at your # option) any later version. # # GSS is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. WFLAGS ?= --enable-gcc-warnings ADDFLAGS ?= CFGFLAGS ?= --enable-gtk-doc --enable-gtk-doc-pdf $(ADDFLAGS) $(WFLAGS) INDENT_SOURCES = `find . -name \*.[ch] -o -name gss.h.in | grep -v -e ^./build-aux/ -e ^./lib/gl/ -e ^./gl/ -e ^./src/gl/` ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) .DEFAULT_GOAL := bootstrap endif local-checks-to-skip = sc_copyright_check sc_immutable_NEWS \ sc_makefile_at_at_check sc_prohibit_strcmp sc_require_config_h \ sc_require_config_h_first VC_LIST_ALWAYS_EXCLUDE_REGEX = ^maint.mk|((lib/|src/)?(gl|gltests|build-aux))/.*$$ update-copyright-env = UPDATE_COPYRIGHT_HOLDER="Simon Josefsson" UPDATE_COPYRIGHT_USE_INTERVALS=1 gtk-doc.make: gtkdocize doc/Makefile.gdoc: printf "gdoc_MANS =\ngdoc_TEXINFOS =\n" > doc/Makefile.gdoc autoreconf: gtk-doc.make doc/Makefile.gdoc for f in po/*.po.in; do \ cp $$f `echo $$f | sed 's/.in//'`; \ done mv build-aux/config.rpath build-aux/config.rpath- test -f ./configure || autoreconf --install mv build-aux/config.rpath- build-aux/config.rpath update-po: refresh-po for f in `ls po/*.po | grep -v quot.po`; do \ cp $$f $$f.in; \ done git add po/*.po.in git commit -m "Sync with TP." po/LINGUAS po/*.po.in bootstrap: autoreconf ./configure $(CFGFLAGS) # Code Coverage web-coverage: rm -fv `find $(htmldir)/coverage -type f | grep -v CVS` cp -rv doc/coverage/* $(htmldir)/coverage/ upload-web-coverage: cd $(htmldir) && \ cvs commit -m "Update." coverage # Release ChangeLog: git2cl > ChangeLog cat .clcopying >> ChangeLog tag = $(PACKAGE)-`echo $(VERSION) | sed 's/\./-/g'` htmldir = ../www-$(PACKAGE) release: prepare upload web upload-web prepare: ! git tag -l $(tag) | grep $(PACKAGE) > /dev/null rm -f ChangeLog $(MAKE) ChangeLog distcheck git commit -m Generated. ChangeLog git tag -u b565716f! -m $(VERSION) $(tag) upload: git push git push --tags build-aux/gnupload --to ftp.gnu.org:gss $(distdir).tar.gz cp $(distdir).tar.gz $(distdir).tar.gz.sig ../releases/$(PACKAGE)/ web: cd doc && ../build-aux/gendocs.sh --html "--css-include=texinfo.css" \ -o ../$(htmldir)/manual/ $(PACKAGE) "$(PACKAGE_NAME)" cp -v doc/reference/$(PACKAGE).pdf doc/reference/html/*.html doc/reference/html/*.png doc/reference/html/*.devhelp doc/reference/html/*.css $(htmldir)/reference/ cp -v doc/cyclo/cyclo-$(PACKAGE).html $(htmldir)/cyclo/ upload-web: cd $(htmldir) && cvs commit -m "Update." manual/ reference/ cyclo/ review-diff: git diff `git describe --abbrev=0`.. \ | grep -v -e ^index -e '^diff --git' \ | filterdiff -p 1 -x 'build-aux/*' -x 'gl/*' -x 'lib/gl/*' -x 'src/gl/*' -x 'po/*' -x 'maint.mk' -x '.gitignore' -x '.x-sc*' -x ChangeLog -x GNUmakefile \ | less ���������������������������������������������������������������������gss-1.0.2/gtk-doc.make������������������������������������������������������������������������������0000644�0000000�0000000�00000020613�11662452560�011375� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- mode: makefile -*- #################################### # Everything below here is generic # #################################### if GTK_DOC_USE_LIBTOOL GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = $(LIBTOOL) --mode=execute else GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = endif # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt EXTRA_DIST = \ $(HTML_IMAGES) \ $(SETUP_FILES) DOC_STAMPS=setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ tmpl.stamp sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) if ENABLE_GTK_DOC if GTK_DOC_BUILD_HTML HTML_BUILD_STAMP=html-build.stamp else HTML_BUILD_STAMP= endif if GTK_DOC_BUILD_PDF PDF_BUILD_STAMP=pdf-build.stamp else PDF_BUILD_STAMP= endif all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) else all-local: endif docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp #### setup #### setup-build.stamp: -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ echo ' DOC Preparing build'; \ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ test -f $(abs_srcdir)/$$file && \ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ done; \ fi; \ test -d $(abs_srcdir)/tmpl && \ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \ chmod -R u+w $(abs_builddir)/tmpl; } \ fi @touch setup-build.stamp #### scan #### scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) @echo ' DOC Scanning header files' @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ echo " DOC Introspecting gobjects"; \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi @touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### templates #### tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt @echo ' DOC Rebuilding template files' @gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ if test -w $(abs_srcdir) ; then \ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \ fi \ fi @touch tmpl-build.stamp tmpl.stamp: tmpl-build.stamp @true $(srcdir)/tmpl/*.sgml: @true #### xml #### sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files) @echo ' DOC Building XML' @-chmod -R u+w $(srcdir) @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) @touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true #### html #### html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building HTML' @rm -rf html @mkdir html @mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$(?)" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ if test -f $(abs_srcdir)/$$file ; then \ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ fi; \ if test -f $(abs_builddir)/$$file ; then \ cp $(abs_builddir)/$$file $(abs_builddir)/html; \ fi; \ done; @echo ' DOC Fixing cross-references' @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) @touch html-build.stamp #### pdf #### pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building PDF' @rm -f $(DOC_MODULE).pdf @mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) @touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ rm -rf tmpl; \ fi maintainer-clean-local: clean @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # if ENABLE_GTK_DOC dist-check-gtkdoc: else dist-check-gtkdoc: @echo "*** gtk-doc must be installed and enabled in order to make dist" @false endif dist-hook: dist-check-gtkdoc dist-hook-local @mkdir $(distdir)/tmpl @mkdir $(distdir)/html @-cp ./tmpl/*.sgml $(distdir)/tmpl @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs ���������������������������������������������������������������������������������������������������������������������gss-1.0.2/gss.pc.in���������������������������������������������������������������������������������0000644�0000000�0000000�00000001046�11546676326�010743� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Process this file with autoconf to produce a pkg-config metadata file. # Copyright (C) 2003-2011 Simon Josefsson # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libgss Description: Generic Security Service API Library. URL: http://www.gnu.org/software/gss/ Version: @VERSION@ Libs: -L${libdir} -lgss Cflags: -I${includedir} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.2/THANKS������������������������������������������������������������������������������������0000644�0000000�0000000�00000001142�11546676326�010126� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GSS THANKS -- Acknowledgements. Copyright (C) 2003-2011 Simon Josefsson See the end for copying conditions. Bug reports, patches, translations, test vectors and/or suggestions were also received from or written by: Wojciech Polak Jakub Bogusz Joe Orton Clytie Siddall Mike Castle Russ Allbery Dagobert Michelsen <dam@opencsw.org> Ludovic Courtès <ludo@gnu.org> ---------------------------------------------------------------------- Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������