Preparation time
less than 30 mins
Cooking time
1 to 2 hours
Serves
Makes 12
Dietary
Try making your own crisp and spicy vegetarian samosas with this recipe from the Hairy Bikers
For the pastry, mix the flour and salt together in a bowl then pour in the oil and egg yolk and mix together until the mixture resembles breadcrumbs. Gradually stir in enough warm water to form a smooth dough (you may not need all the water). Roll the dough into a ball, wrap in cling film and chill in the fridge for least half an hour
For the filling, boil the potatoes in a saucepan of salted water for 15-20 minutes, or until just tender, then drain. When cool enough to handle cut into 0.5cm/¼in cubes and set aside. Boil the carrots in a saucepan of salted water for 10-12 minutes, or until tender, then drain. Set aside.
Heat the two tablespoons of vegetable oil in a large frying pan over a medium heat then add the onion, turmeric, garam masala, mustard seeds, salt and black pepper and fry for about 8 minutes until the onions are softened and translucent and the spices aromatic.
Stir in the garlic, chilli, curry leaves, potato and carrot and cook for a further ten minutes then stir in the peas and cook for 2-3 minutes until heated through. Season with the lemon juice, stir in the coriander leaves and set aside to cool.
To make the samosas, cut the dough into six even-sized pieces and roll into balls. Use a rolling pin to roll each ball into a thin circle, about 15cm/6in diameter. Cut each circle in half to form two semicircles.
Take a semicircle and fold into a cone, brushing the edges with the reserved egg white to seal. Fill the cone about half-full with the samosa filling then brush the top edges with egg white and press tightly to seal. Repeat with the remaining dough and filling.
To cook the samosas half-fill a deep, heavy-based pan with vegetable oil and heat until a cube of bread dropped in sizzles and turns golden-brown in 30 seconds (CAUTION: hot oil can be dangerous. Do not leave unattended). Fry the samosas in small batches for 4-5 minutes, or until golden-brown and crisp. Remove from the oil with a slotted spoon and drain on kitchen paper. Serve.


{% from "security/_macros.html" import render_field_with_errors, render_field %} {% extends "layouts/layout1.html" %} {% block content %} {% include "security/_messages.html" %}


Need help?
We're always happy to help out with code or any other questions you might have. Learn more
API mailing list
Join our mailing list to be notified of API changes and stay up to date. View mailing list
Below you'll find tutorials that will teach you how to use Stripe, and reference documentation for all the moving parts.
We're always happy to help out with code or any other questions you might have. Learn more
Join our mailing list to be notified of API changes and stay up to date. View mailing list


OpenSolaris
Collectives
Discussions
Documentation
Download
Source Browser
Free CD
Log-in
|
en
Project duckwater
:
Documentation
>
[NEW] Finder APIs
Top Menu
Show
:
Comments
Attachments
History
Information
Print
:
Print
Print preview
Export as PDF
Export as RTF
Export as HTML
Export as XAR
Wiki code for
[NEW] Finder APIs
Hide Line numbers
1: = Duckwater: Name Service Switch Versioning and Finder Design 2: 3: |=Author:|Doug Leavitt <[[doug.leavitt<EMAIL_ADDRESS>4: |=Version:|DRAFT 0.5 5: |=Date:|2008-03-05 6: 7: Contents 8: 9: * [[1 Introduction>>#introduction]] 10: * [[2 Interface Taxonomy>>#interface-taxonomy]] 11: ** [[2.1 OPEN ISSUES:>>#open-issues]] 12: * [[3 Overview>>#overview]] 13: * [[4 Backend Versioning>>#backend-versioning]] 14: ** [[4.1 Pre PSARC/2005/133>>#pre-psarc-2005-133]] 15: ** [[4.2 PSARC/2005/133 - Sparks [phase 1]>>#psarc-2005-133-sparks-phase-1]] 16: *** [[4.2.1 issues>>#issues]] 17: ** [[4.3 PSARC/2008/035>>#psarc-2008-035]] 18: *** [[4.3.1 Details>>#details]] 19: ** [[4.4 PSARC/2007/694>>#psarc-2007-694]] 20: *** [[4.4.1 NSS Finder Summary>>#nss-finder-summary]] 21: ** [[4.5 NSS2 Versioning>>#nss2-versioning]] 22: *** [[4.5.1 Version Structure>>#version-structure]] 23: *** [[4.5.2 Version Numbers>>#version-numbers]] 24: *** [[4.5.3 Backend API Structure>>#backend-api-structure]] 25: *** [[4.5.4 Backend Option Structure>>#backend-option-structure]] 26: * [[5 Finder Functions>>#finder-functions]] 27: ** [[5.1 Purpose>>#purpose]] 28: ** [[5.2 Finder Function Interfaces>>#finder-function-interfaces]] 29: ** [[5.3 nss_default_finders>>#nss-default-finders]] 30: ** [[5.4 Version 1 finder functions>>#version-1-finder-functions]] 31: ** [[5.5 Version 1 Structures>>#version-1-structures]] 32: *** [[5.5.1 nss_backend & nss_backend_t>>#nss-backend-nss-backend-t]] 33: ** [[5.6 Version 2 Structures>>#version-2-structures]] 34: ** [[5.7 Version 2 finder functions>>#version-2-finder-functions]] 35: *** [[5.7.1 scan_ext>>#scan-ext]] 36: *** [[5.7.2 lookup_ext>>#lookup-ext]] 37: *** [[5.7.3 query_ext>>#query-ext]] 38: *** [[5.7.4 free_ext>>#free-ext]] 39: *** [[5.7.5 delete_ext>>#delete-ext]] 40: ** [[5.8 Naming Semantics>>#naming-semantics]] 41: *** [[5.8.1 Versioning symbols>>#versioning-symbols]] 42: *** [[5.8.2 DL Library Names>>#dl-library-names]] 43: *** [[5.8.3 Version 1 constructor symbols>>#version-1-constructor-symbols]] 44: *** [[5.8.4 Version 2 get/put/... API symbols>>#version-2-get-put-api-symbols]] 45: *** [[5.8.5 Version 2 option symbols>>#version-2-option-symbols]] 46: *** [[5.8.6 Version 2 extension symbols>>#version-2-extension-symbols]] 47: 48: = [[1 Introduction>>#id1]] 49: 50: This document specifies the historical (previously undocumented) finder API interfaces and the NSS2 extensions to those APIs as they as part of the following projects: 51: 52: >PSARC/2008/035 - Sparks foreign backend support 53: PSARC/2007/694 - Duckwater: Simplified name services management 54: 55: The initial delivery of Sparks: PSARC/2005/133 made no modifications to these APIs. 56: 57: = [[2 Interface Taxonomy>>#id2]] 58: 59: The versioning and finder interfaces are currently classified as: 60: 61: > Project Private and Committed Private 62: 63: Because the other nss policy engine to backend interfaces are currently classified in this manner. See PSARC/2005/133. 64: 65: However, these interfaces are currently treated as: 66: 67: > Volatile 68: 69: because the new development is being pursued via OpenSolaris. 70: 71: One of the goals of the Sparks and Duckwater efforts are to document all the name service switch interfaces and eventually expose the interfaces first as volatile, and eventually Committed at some point in the future. 72: 73: == [[2.1 OPEN ISSUES:>>#id3]] 74: 75: 1. By pursuing this work on OpenSolaris, are these Project Private APIs automatically reclassified as Volatile? 76: 1. Does PSARC want us to reclassify them as part of this case? 77: 78: = [[3 Overview>>#id4]] 79: 80: The name service switch interfaces have been private [and mostly undocumented] since their development. While the private status of the interfaces has been restated multiple times, and explicitly documented as private as far back as 1994, this has not prevented uncontracted API usage outside the ON consolidation and unsupported usage by third parties. 81: 82: This is a well known problem that has been partly responsible for the lack of evolution of these APIs, until the initial delivery of the Sparks project [PSARC/2005/133], in snv_50. 83: 84: This document is one step towards rectifying this problem. 85: 86: Currently, it is unclear how many nsswitch backends making use of the uncontracted/unsupported APIs actually exist. Realistically the number of "foreign" nsswitch backends is probably more than 10. 87: 88: = [[4 Backend Versioning>>#id5]] 89: 90: == [[4.1 Pre PSARC/2005/133>>#id6]] 91: 92: Prior to PSARC/2005/133, the only known documentation for the name service switch is PSARC/1991/018, which briefly discusses the switch at a very high level, and does not document any specific internal interfaces. 93: 94: Followup ARC cases make it clearer, that these interfaces are all considered project private. See PSARC/2005/133 for a more detailed analysis of prior work. 95: 96: == [[4.2 PSARC/2005/133 - Sparks [phase 1]>>#id7]] 97: 98: The sparks effort currently preserves backwards compatibility by keeping the old, backwards compatible, nsswitch interface code in it’s original libc location. The new redesigned nsswitch is located in nscd. As discussed in PSARC/2005/133, the public APIs send requests to the new nsswitch which in turn can return a request back to the libc nsswitch via the TRYLOCAL protocol, if the new switch determines that the request must be executed by the old nsswitch to preserve backwards compatibility. 99: 100: The PSARC/2005/133 delivery preserves compatibility and stability between the old and new interfaces, through 2 means: 101: 102: 1. all ON backends have been updated to behave consistently in both environments 103: 1. the new switch/nscd has built-in knowledge of the legal backends that can be used 104: 105: PSARC/2005/133 created 2 classes of backends with this behavior. 106: 107: The first class of backends are pre PSARC/2005/133 backends. These are any backend that has not been updated to behave with the new name service switch engine in nscd, and subsequent versionable changes. These backends are considered ’foreign’ to the new name service switch engine. The new name service switch engine returns requests that need to use a foreign backend to the original (obsolete) libc name service switch for local processing on the client. Databases using an old style backend are generally not cached. 108: 109: The second class of backends are backends that have been updated to support the new interfaces. Nscd has a built in knowledge of a core set of backends that are delivered in unison with nscd and must always adhere to all the current latest nsswitch specifications. In PSARC 2005/133, these backends are the backends delivered with nscd in the ON consolidation. 110: 111: === [[4.2.1 issues>>#id8]] 112: 113: PSARC/2005/133 introduced the notion of new extended APIs, but failed to also introduce a versioning model. 114: 115: PSARC/2005/133 used this new model to introduce at least one project private API, in the nss_dns backend to return DNS lookups with associated timeout values from the resolver. Something impossible in the interfaces prior to PSARC/2005/133. 116: 117: Prior to PSARC 2005/133, changes in backend behavior required physical changes to the project private C structures and #defines in nss header files and accompanying recompilation of all components that depended upon those header files. 118: 119: == [[4.3 PSARC/2008/035>>#id9]] 120: 121: Prior to PSARC/2008/035 the name service switch has no versioning capability and no way to differentiate (except with explicit knowledge) what backend has or has not been updated to at least PSARC/2005/133 specifications. 122: 123: PSARC/2008/035 introduces a method to distinguish unversioned (pre PSARC/2005/133) and versioned (PSARC/2005/133 or later) libraries. 124: 125: The purpose of this change is to allow nscd to distinguish between foreign backends that have been updated to PSARC/2005/133 specifications and foreign backends that have not been updated. Foreign backends that are updated to PSARC/2008/035 can be used by nscd and therefore caching of data from those backends can occur. 126: 127: === [[4.3.1 Details>>#id10]] 128: 129: This project introduces minimal versioning support. That is, the ability to distinguish between pre PSARC/2005/133 and post PSARC/2005/133 backends. 130: 131: This project defines a versioned backend to have, at a minimum, an externally defined version global symbol [dlsym retrievable] whose name is in the form: 132: 133: {{{ 134: 135: _nss_[backend-name]_version 136: 137: }}} 138: 139: where backend-name corresponds to the backend name used in nsswitch.conf as in: 140: 141: {{{ 142: 143: _nss_nis_version, _nss_files_version 144: 145: }}} 146: 147: The contents of the variable are treated as a castable (void *) pointer in the native pointer size for the compiled library. 148: 149: Existence of the symbol in a nsswitch backend with a value of NULL implies that the backend is in compliance with the specifications of PSARC/2005/133. 150: 151: If this NULL valued symbol exists, nscd will treat the nsswitch backend as eligible for being dlopen’d and used per PSARC/2005/133 specifications. The results from lookups from a backend will be cached along with other lookup results as applicable. 152: 153: == [[4.4 PSARC/2007/694>>#id11]] 154: 155: PSARC/2007/694 extends PSARC/2008/035 with the introduction of new finder functions and extensible versioning data provided by each updated nss backend. 156: 157: This extensible model enables the name service switch projects to add new backend interfaces including configuration and management interfaces. Prior to this effort, the pre PSARC/2005/133 project private finder APIs only lookup pre NSS2 style interfaces. 158: 159: The extended finder APIs are the interfaces used to detect and extract the new interfaces and options for use by updated applications and nscd. 160: 161: In PSARC/2007/694, the Duckwater project defines new backend APIs, and options that the Duckwater management tools use to manage naming configuration auto detection, setup, verification etc. 162: 163: These finder APIs will also allow future Sparks, Duckwater and other projects the flexible ability to easily add and extend backend APIs moving forward. 164: 165: === [[4.4.1 NSS Finder Summary>>#id12]] 166: 167: the pre Sparks name service switch has no concept of versioning. 168: 169: The finder APIs in NSS are rudimentary APIs that perform simple dlopen/dlsym lookups for function APIs called constructors. 170: 171: These NSS (pre Sparks) constructor functions, when called, return a project private pointer to a fixed size structure of function pointers for a given set of NSS interfaces. These pointers are then used in undocumented project private behaviors to process backend lookups. Prior to PSARC/2005/133 usage was inconsistent and undocumented. the finder APIs were also undocumented. 172: 173: The constructor names, function APIs and values are all considered project private APIs. 174: 175: By it’s nature, any API change, addition, or other requires multiple header changes and recompilation of libc, all the nsswitch backends, nscd and any other component that depends on these hard coded interfaces. 176: 177: This is made worse, by the fact that the project private headers (nss_common.h, nss_dbdefs.h) were publicly exposed in /usr/include and third parties have chosen to become dependent on them. 178: 179: As a result these interfaces have been left virtually unenhanced for years, resulting in significant lack of functionality enhancements, such as put XbyY. 180: 181: More NSS details to be provided below. 182: 183: The NSS2 finder APIs keep the NSS APIs in their backwards compatible behavior, but extend the finder structure to include new APIs that look for a versioning symbol, and then process that symbol as appropriate. 184: 185: == [[4.5 NSS2 Versioning>>#id13]] 186: 187: A backend that supports NSS2 versioning compiles, at a minimum with PSARC/2005/133 and PSARC/2008/035 with the further addition that the version symbol defined in PSARC/2008/035 is not NULL, but instead points to a nss_version structure as described below. 188: 189: === [[4.5.1 Version Structure>>#id14]] 190: 191: The version structure is the structure pointed to by the versioning symbol in all post PSARC/2008/035 backends. The purpose of the versioning structure is to specify the version number of the library and to specify the APIs supported by the backend plus and backend options that may exist. 192: 193: The structures are intended to be extensible over time. The contents of the structures include variable length lists of APIs and options, both of which can be extended over time. 194: 195: The intent is to provide a easy to manage, extensible C interface to nss2 backends that is upwards compatible with nss. 196: 197: The version structure proposed by the ARC case looks like: 198: 199: {{{ 200: 201: /* Currently supported backend version(s) */ 202: #ifndef NSS_VERSION_2_1 203: #define NSS_VERSION_2_1 0x00020001 204: #endif 205: 206: /* Current backend version */ 207: #ifndef NSS_VERSION 208: #define NSS_VERSION NSS_VERSION_2_1 209: #endif 210: 211: /* internal nss_version signal markers for unversioned or foreign backends */ 212: #define NSS_NOVERSION 0x00020000 /* Supports PSARC/2008/035 */ 213: #define NSS_FOREIGN 0xFFFFFFFF /* Unversioned pre PSARC/2005/133 BE */ 214: 215: /* 216: * NSS version 2 version structure 217: * This is the structure pointed to by the dlsym accessible version variable. 218: * _nss_[backend-name]_version 219: * 220: * nss_v_version - version supported by the backend. 221: * nss_v_sz - sizeof nss_version structure 222: * nss_v_api - list [array] of APIs supported by the backend 223: * nss_v_api_cnt - API list count 224: * nss_v_api_flags - NSS_VERSION_SORTED or 0 225: * nss_v_opt - list [array] of version options supported in the backend 226: * nss_v_opt_cnt - option list count 227: * nss_v_opt_flags - NSS_VERSION_SORTED or 0 228: */ 229: 230: /* set if API/option names are in ascii sorted order [search] */ 231: #define NSS_VERSION_SORTED 0x1 232: /* internal flag set if backend api is alloc’d - for V2 compatibility */ 233: #define NSS_ITEM_ALLOCED 0x80000000 234: 235: struct nss_version { 236: nssuint_t nss_v_version; /* backend version */ 237: nssuint_t nss_v_sz; /* sizeof struct */ 238: nss_backend_api_t *nss_v_api; /* API array */ 239: nssuint_t nss_v_api_cnt; /* API count */ 240: nssuint_t nss_v_api_flags; 241: nss_backend_opt_t *nss_v_opt; /* option array */ 242: nssuint_t nss_v_opt_cnt; /* option count */ 243: nssuint_t nss_v_opt_flags; 244: }; 245: 246: typedef struct nss_version nss_version_t; 247: 248: }}} 249: 250: ; struct nss_version & nss_version_t 251: : Structure pointed to by the versioning symbol. This structure includes a version number of the backend, sizeof this structure, pointer to a list of APIs an associated count and flags, pointer to a list of options an associated count and flags. 252: ; nss_v_version 253: : Version number for this backend 254: ; nss_v_sz 255: : sizeof(nss_version_t) 256: ; nss_v_api 257: : Pointer to list of API structures 258: ; nss_v_api_cnt 259: : Count of APIs in list 260: ; nss_v_api_flags 261: : Option flags for API list 262: ; nss_v_opt 263: : Pointer to list of option structures 264: ; nss_v_opt_cnt 265: : Count of options in list 266: ; nss_v_opt_flags 267: : Option flags for option list 268: ; NSS_VERSION_SORTED 269: : API or option list is (ascii) sorted by name. 270: 271: === [[4.5.2 Version Numbers>>#id15]] 272: 273: The following #define values help determine a backend version 274: 275: ; NSS_VERSION 276: : This value represents the most current version supported by the nsswitch 277: ; NSS_NOVERSION 278: : This value represents a nsswitch backend that supports PSARC 2005/133 but has no specific version number. That is a PSARC 2008/035 foreign backend. 279: ; NSS_FOREIGN 280: : This value represents a nsswitch backend whose version cannot be detected. That is a pre PSARC/2005/133 backend. 281: ; NSS_VERSION_X_Y 282: : A #define of this form represents a specific version. X is the major version number, Y is the minor version number. Version 2.1 is represented as: NSS_VERSION_2_1 283: ; NSS_VERSION_2_1 284: : This value represents a backend that supports PSARC 2007/694 285: 286: === [[4.5.3 Backend API Structure>>#id16]] 287: 288: The API structure is created as a list of APIs supported in a particular backend. 289: 290: {{{ 291: 292: /* 293: * NSS version 2 backend API array item 294: * This structure is used to define support for a single API in a nss2 backend. 295: * be_api_name - nss2 (dlsym equivalent) search name 296: * be_api_flags - API option flags 297: * be_api_func - pointer to API 298: * be_api_constr - pointer to [optional] API constructor/init function 299: */ 300: 301: struct nss_backend_api { 302: char *be_api_name; /* API name */ 303: nssuint_t be_api_version; /* API version */ 304: nssuint_t be_api_flags; /* support flags */ 305: nss_backend_nop_t be_api_func; /* API */ 306: nss_backend_nop_t be_api_constr; /* constructor [opt] */ 307: nss_backend_nop_t be_api_destr; /* destructor [opt] */ 308: nssuint_t be_api_reserved; /* reserved field */ 309: }; 310: 311: typedef struct nss_backend_api nss_backend_api_t; 312: 313: /* 314: * nss_backend_api_t helper macros 315: * NSS_API_ENTRY_V1 - creates a V1 entry in a api list. 316: * cname = V1 constructor function name 317: * NSS_API_ENTRY_V2 - creates a V2 entry in a api list. 318: * func = V2 function name 319: * flag = API flags or 0 320: * cname = address of [optional] constructor name 321: * dname = address of [optional] destructor name 322: */ 323: 324: #ifndef NSS_APIENTRY_V1 325: #define NSS_APIENTRY_V1(cname) \ 326: { #cname, 0, 0, (nss_backend_nop_t)NULL, \ 327: (nss_backend_nop_t)&cname, (nss_backend_nop_t)NULL, 0 } 328: #endif 329: #ifndef NSS_APIENTRY_V2 330: #define NSS_APIENTRY_V2(func, flag, cname, dname) \ 331: { #func, NSS_VERSION, flag, (nss_backend_nop_t)&func, \ 332: (nss_backend_nop_t)cname, (nss_backend_nop_t)dname, 0 } 333: #endif 334: 335: }}} 336: 337: ; nss_backend_api & nss_backend_api_t 338: : API structure as defined by PSARC/2007/694. includes the name of the API a specific API version value, flags, and function pointers 339: ; be_api_name 340: : API name as defined by the API naming scheme. The actual API can be locatable via dlsym. 341: ; be_api_version 342: : Specific API version value. Unused in PSARC/2007/694. Future backend updates may choose to optionally allow/support different API versions within backends, or across different backend versions. 343: ; be_api_flags 344: : specific API flags. 345: ; NSS_ITEM_ALLOCED 346: : Internally used API flag, used to support PSARC/2008/035 backends withing the NSS2 finder interfaces. 347: ; be_api_func 348: : API function pointer 349: ; be_api_constr 350: : Optional API constructor. Called prior to API call. 351: ; be_api_destr 352: : Optional API destructor. Called after API call 353: ; NSS_APIENTRY_V1 354: : API helper macro to specify a pre Sparks API in an API list 355: ; NSS_APIENTRY_V2 356: : API helper macro to specify a NSS2 API in an API list 357: 358: === [[4.5.4 Backend Option Structure>>#id17]] 359: 360: The option structure is created as a list of options supported in a particular backend. Options may be generic across backends, or backend specific. 361: 362: {{{ 363: 364: /* 365: * NSS version 2 backend option array item 366: * This structure is used to define support for a nss2 backend option. 367: * This is to allow extensibility within a version by defining optional 368: * support in a backend beyond APIs. 369: * 370: * This structure specifies support for a single API in the nss2 backend 371: * be_opt_name - supported backend option name 372: * be_opt_flags - flags applicable to this option 373: * NSS_FINDER_WRITABLE this option is writable (not const) 374: * be_opt_string - field for options with string type value(s) 375: * be_opt_int - field for options with int type value(s) 376: */ 377: 378: struct nss_backend_opt { 379: char *be_opt_name; /* option name */ 380: nssuint_t be_opt_flags; /* support flags */ 381: char *be_opt_string; /* string value(s) */ 382: nssuint_t be_opt_int; /* int/flag value(s) */ 383: nssuint_t be_opt_reserved; /* reserved field */ 384: }; 385: 386: typedef struct nss_backend_opt nss_backend_opt_t; 387: 388: }}} 389: 390: ; nss_backend_opt & nss_backend_opt_t 391: : Option structure as defined by PSARC/2007/694. includes the name of the option flags, an option string value and/or integer value 392: ; be_opt_name 393: : Option name as defined by the option naming scheme. The actual option can be locatable via dlsym. 394: ; be_opt_flags 395: : Specific per options flags. 396: ; NSS_FINDER_WRITABLE 397: : the values in this option are writable (not const) 398: ; be_opt_string 399: : pointer to a [const] char * value. Default is const unless NSS_FINDER_WRITABLE is set. 400: ; be_opt_int 401: : nssuint_t value. Assumed const unless NSS_FINDER_WRITABLE is set. 402: 403: = [[5 Finder Functions>>#id18]] 404: 405: == [[5.1 Purpose>>#id19]] 406: 407: The purposes of the finder functions are as follows: 408: 409: 1. detect and optionally load available name service switch backends for use by the name service switch and any associated application, such as the name service switch management tools 410: 1. inspect name service switch backends for versioning information categorize backends by their versioning information as either 411: >11. foreign (pre-sparks PSARC/2005/133) 412: 11. PSARC/2005/133 capable 413: 11. Post PSARC 2005/133 capable 414: 1. Determine the supported functionality of a given backend 415: 1. return the following information to applications and the nsswitch 416: >11. lists of backends matching certain search criteria This is the scan feature 417: 11. one or more function(s) based on certain search criteria This is the lookup feature 418: 11. lists of capabilities based on search criteria this is the query feature 419: 420: == [[5.2 Finder Function Interfaces>>#id20]] 421: 422: {{{ 423: 424: /* 425: * FINDER flag options 426: * 427: * NSS_FINDER_VCHK version check library (temp opens dyn lib) 428: * NSS_FINDER_OPEN open (keep open) dyn lib 429: * NSS_FINDER_CLOSE close dyn lib (OPEN/CLOSE mutually exclusive) 430: * NSS_FINDER_DELETE TBD 431: * NSS_FINDER_V1API process (scan/lookup) V1API 432: * NSS_FINDER_EXTENSION process (scan/lookup) extension API 433: * NSS_FINDER_WRITABLE dyn lib options are writable (not const) 434: */ 435: 436: #define NSS_FINDER_VCHK 0x00000001 437: #define NSS_FINDER_OPEN 0x00000002 438: #define NSS_FINDER_CLOSE 0x00000004 439: #define NSS_FINDER_DELETE 0x00000008 440: #define NSS_FINDER_V1API 0x00000010 441: #define NSS_FINDER_EXTENSION 0x00000020 442: #define NSS_FINDER_WRITABLE 0x00000040 443: 444: struct nss_backend_finder { 445: /* NSS version 1 finder operations */ 446: #if defined(__STDC__) 447: nss_backend_constr_t (*lookup) 448: (void *lkp_priv, const char *, const char *, void **del_privp); 449: void (*delete) 450: (void *del_priv, nss_backend_constr_t); 451: #else 452: nss_backend_constr_t (*lookup)(); 453: void (*delete)(); 454: #endif 455: struct nss_backend_finder *next; 456: void *lookup_priv; 457: /* NSS version 2 finder operations */ 458: #if defined(__STDC__) 459: nss_status_t (*scan_ext) 460: (const char *db_name, const char *src_name, 461: nssuint_t flags, nss_backend_src_t ***be_list, 462: uint32_t *count, void **finder_priv); 463: nss_status_t (*lookup_ext) 464: (const char *db_name, const char *src_name, 465: const char *op_name, const char *key_name, 466: nssuint_t flags, nss_backend_api_t ***api_list, 467: uint32_t *count, void **finder_priv); 468: nss_status_t (*query_ext) 469: (const char *db_name, const char *src_name, 470: const char *opt_name, 471: nssuint_t flags, nss_backend_opt_t ***opt_list, 472: uint32_t *count, void **finder_priv); 473: void (*free_ext) 474: (nss_backend_src_t ***be_list, uint32_t *be_cnt, 475: nss_backend_api_t ***api_list, uint32_t *api_cnt, 476: nss_backend_opt_t ***opt_list, uint32_t *opt_cnt, 477: void **finder_priv); 478: void (*delete_ext)(void **finder_priv); 479: #else 480: nss_status_t (*scan_ext)(); 481: nss_status_t (*lookup_ext)(); 482: nss_status_t (*query_ext)(); 483: void (*free_ext)(); 484: void (*delete_ext)(); 485: #endif 486: }; 487: 488: typedef struct nss_backend_finder nss_backend_finder_t; 489: 490: extern nss_backend_finder_t *nss_default_finders; 491: 492: }}} 493: 494: == [[5.3 nss_default_finders>>#id21]] 495: 496: nss_default_finders is a symbol exposed by libc. This symbol points to the nss_backend_finder_t structure. This structure is the list of pointers to the nss finder function interfaces. 497: 498: The contents of the structure are currently considered project private. Prior to PSARC 2007/694, The old structure definition is as follows: 499: 500: {{{ 501: 502: struct nss_backend_finder { 503: /* NSS version 1 finder operations */ 504: #if defined(__STDC__) 505: nss_backend_constr_t (*lookup) 506: (void *lkp_priv, const char *, const char *, void **del_privp); 507: void (*delete) 508: (void *del_priv, nss_backend_constr_t); 509: #else 510: nss_backend_constr_t (*lookup)(); 511: void (*delete)(); 512: #endif 513: struct nss_backend_finder *next; 514: void *lookup_priv; 515: }; 516: 517: }}} 518: 519: == [[5.4 Version 1 finder functions>>#id22]] 520: 521: The original name service switch provided a lookup finder API that searched for a specific API by database and named backend. 522: 523: Additionally there is a cleanup/delete API. 524: 525: The version 1 lookup API returns a pointer to a constructor function for the backend, or NULL if it can not find the backend. The switch engine caches these function pointers; when it needs to perform a backend lookup. The switch calls the constructor function, which returns a pointer to a new instance of the backend, properly initialized or NULL. 526: 527: The nsswitch engine then uses a hardwired function array indexed by defines in nss_dbdefs.h and nss_backend_t to call the appropriate API in version 1 format. See PSARC/2005/133 for further details. 528: 529: This behavior is considered stable but obsolete. The array indexes, databases and version 1 definitions related to these finder definitions array indices and other internal behaviors and the associated backend API behaviors are considered stable/standard and obsolete. 530: 531: The nss version 1 finder interfaces are: 532: 533: {{{ 534: 535: lookup(void *dummy, const char *db_name, const char *src_name, 536: void **delete_privp) 537: delete(void *delete_priv, nss_backend_constr_t dummy) 538: 539: }}} 540: 541: Where: 542: 543: ; db_name 544: : Is a null terminated ascii string that is one of the database names such as "hosts" or "passwd" from the name service switch 545: ; src_name 546: : Is a null terminated ascii string that is one of the source names such as "files" or "nis" from the name service switch 547: ; delete_privp 548: : This is an internal opaque priv pointer that is initialized by the lookup API. data pointed to by the opaque pointer must be freed by calling the delete function after finder lookups are completed. 549: 550: The following rules apply to these APIs: 551: 552: 1. These interfaces are considered project private and obsolete. 553: 1. These APIs are not to be modified/extended in order to preserve backwards compatibility. Use the version 2 finder functions and PSARC/2005/133 and beyond for non NSS1 lookups and nsswitch enhancements. 554: 1. These APIs are not MT safe 555: 556: == [[5.5 Version 1 Structures>>#id23]] 557: 558: === [[5.5.1 nss_backend & nss_backend_t>>#id24]] 559: 560: nss_backend & nss_backend_t are the hardcoded v1 structures of function pointers used to define the function indices for the various get operations on a per DB basis. Offsets are hardcoded index values defined in nss_dbdefs.h 561: 562: These structures are considered stable but obsolete as of PSARC/2005/133. New sizes, indices or behaviors post PSARC/2005/133 are not permitted. 563: 564: The NSS_DBOP_* macros define the indices for the various db behaviors for v1 structure use. 565: 566: For nsswitch version 2 interfaces, nss_backend_t is considered a backend private pointer and is required to be treated as a void pointer by the frontend. 567: 568: == [[5.6 Version 2 Structures>>#id25]] 569: 570: The version2 APIs use and return data structures defined by the versioning specification. 571: 572: Additionally, the version2 finder APIs track scanned and open nss backends using the following nss_backend_src structure. 573: 574: {{{ 575: 576: /* 577: * NSS version 2 578: * nss_backend_src in memory representation of a found backend library 579: * This data is returned from the extended scan API. 580: * be_src_dlh - dlhandle [if the source has been dlopened, NULL if not] 581: * be_src_name - backend name used in nsswitch.conf 582: * be_src_lib - backend library name nss_[backend].so.1 583: * be_src_path - backend library directory path (if opened) 584: * be_src_verp - backend’s version structure ptr/NULL 585: * be_src_version - backend’s version number/NSS_FOREIGN/NSS_NOVERSION 586: * be_src_mtim - opened libraries mtime timestamp 587: */ 588: 589: struct nss_backend_src { 590: void *be_src_dlh; 591: char *be_src_name; 592: char *be_src_lib; 593: char *be_src_path; 594: nss_version_t *be_src_verp; 595: nssuint_t be_src_version; 596: timestruc_t be_src_mtim; 597: }; 598: 599: typedef struct nss_backend_src nss_backend_src_t; 600: 601: }}} 602: 603: These interfaces are considered project private. The purpose of the structure is to list and manage the internal state of open or closed nss backends. 604: 605: == [[5.7 Version 2 finder functions>>#id26]] 606: 607: Version 2 adds 5 new extended finder functions. 608: 609: ; scan_ext - extended scan, scans the ld library path, matches and 610: : optionally opens one or more backends. 611: ; lookup_ext - extended lookup, performs the lookup function accepting 612: : new API formats, and uses versioning control information. May call scan_ext to find required libraries. 613: ; query_ext - extended lookup for property/options queries. Uses 614: : version control information. May call scan_ext to find required libraries. 615: 616: free_ext - frees memory from previously returned scan/lookup/query delete_ext - closes opened backend(s) from previous *_ext requests 617: 618: === [[5.7.1 scan_ext>>#id27]] 619: 620: {{{ 621: 622: nss_status_t (*scan_ext) 623: (const char *db_name, const char *src_name, 624: nssuint_t flags, nss_backend_src_t ***be_list, 625: uint32_t *count, void **finder_priv); 626: 627: }}} 628: 629: scan_ext scans library paths and [optionally] dlopens backends to determine the versioning information of the nsswitch library 630: 631: If libraries are opened, they are opened in RTLD_LAZY mode to reduce dependency loading 632: 633: Arguments: 634: 635: ; db_name 636: : NULL or a null terminated regular expression regcomp(3c) that is one of the database names such as "hosts" or "passwd" from the name service switch. 637: ; src_name 638: : NULL or a null terminated regular expression regcomp(3c) that is one of the source names such as "files" or "nis" from the name service switch. 639: ; flags 640: : 0 or one of the following: NSS_FINDER_VCHK, NSS_FINDER_OPEN 641: ; be_list 642: : Array of backends found during the scan operation, and the current Status of the backends. This data should be treated as read only. The data must be freed by the free_ext API. 643: ; count 644: : Number of found backends. 645: ; finder_priv 646: : Opaque internal backend data. this data must be freed by delete_ext 647: 648: The scan API returns the list of found backends. The data is considered read only. The be_list and count may be passed back through repeated scan_ext calls, if the caller wants to add non-duplicate new entries to the current list. 649: 650: A NULL db_name is a wildcard allowing the scan operation to report for any database. A NULL src_name is a wildcard allowing the scan operation to report for any source. 651: 652: If the be_list and count pointers are NULL, then the scanning occurs but no results are returned. This is to allow for opening and version checking side effects only. 653: 654: Flags: 655: 656: ; NSS_FINDER_VCHK 657: : This flag tells scan to open, version check then close the library The backend source data will contain the appropriate version type. 658: ; NSS_FINDER_OPEN 659: : This flag tells scan to open, and version check the library. The library will reamin open for future operations. The backend source data will contain the appropriate version type. The backend source data will point to the actual library and library timestamp data. 660: ; 0 661: : If the flag operation is 0, then the library is neither opened or version checked. All found backends are returned. 662: 663: === [[5.7.2 lookup_ext>>#id28]] 664: 665: {{{ 666: 667: nss_status_t (*lookup_ext) 668: (const char *db_name, const char *src_name, 669: const char *op_name, const char *key_name, 670: nssuint_t flags, nss_backend_api_t ***api_list, 671: uint32_t *count, void **finder_priv); 672: 673: }}} 674: 675: As needed, the lookup_ext API performs a scan_ext on the library paths, dlopening the required backends (NSS_FINDER_OPEN) , and determining the versioning information of the nsswitch library. If the library has been previously opened by a scan or earlier lookup operation, the existing open will be shared. The function then performs the lookup function using the new API formats, and versioning control information. 676: 677: ; db_name 678: : NULL or a null terminated regular expression regcomp(3c) that is one of the database names such as "hosts" or "passwd" from the name service switch. 679: ; src_name 680: : NULL or a null terminated regular expression regcomp(3c) that is one of the source names such as "files" or "nis" from the name service switch. 681: ; op_name 682: : NULL or a null terminated regular expression regcomp(3c) that is one of the operations defined by the naming semantics (PSARC/2005/133 and later). 683: ; key_name 684: : NULL or a null terminated regular expression regcomp(3c) that is one of the keys defined by the naming semantics (PSARC/2005/133 and later). 685: ; flags 686: : 0 or one of the following: NSS_FINDER_V1API, NSS_FINDER_EXTENSION 687: ; api_list 688: : Array of APIs found during the lookup operation. This data should be treated as read only. The data must be freed by the free_ext API. 689: ; count 690: : Number of found APIs. 691: ; finder_priv 692: : Opaque internal backend data. this data must be freed by delete_ext 693: 694: The lookup API returns the list of found APIs. The data is considered direct read-only pointers into the applicable backend library. The api_list and count may be passed back through repeated lookup_ext calls, if the caller wants to add non-duplicate new entries to the current list. 695: 696: A NULL db_name is a wildcard allowing the lookup operation to report for any database. A NULL src_name is a wildcard allowing the lookup operation to report for any source. 697: 698: If the api_list and count or finder_priv pointers are NULL, then the lookup fails with a EINVAL errno. 699: 700: Flags: 701: 702: ; NSS_FINDER_V1API 703: : Perform a version 1 API lookup for a verion 1 constructor API. 704: ; NSS_FINDER_EXTENSION 705: : Perform a version 2 extension lookup 706: ; 0 707: : Perform a version 2 API lookup 708: 709: === [[5.7.3 query_ext>>#id29]] 710: 711: {{{ 712: 713: nss_status_t (*query_ext) 714: (const char *db_name, const char *src_name, 715: const char *opt_name, 716: nssuint_t flags, nss_backend_opt_t ***opt_list, 717: uint32_t *count, void **finder_priv); 718: 719: }}} 720: 721: As needed, the query_ext API performs a scan_ext on the library paths, dlopening the required backends (NSS_FINDER_OPEN) , and determining the versioning information of the nsswitch library. If the library has been previously opened by a scan or earlier lookup operation, the existing open will be shared. The function then performs the query function returning and nss2 options information. 722: 723: ; db_name 724: : NULL or a null terminated regular expression regcomp(3c) that is one of the database names such as "hosts" or "passwd" from the name service switch. 725: ; src_name 726: : NULL or a null terminated regular expression regcomp(3c) that is one of the source names such as "files" or "nis" from the name service switch. 727: ; opt_name 728: : NULL or a null terminated regular expression regcomp(3c) that is one of the option names defined by the naming semantics (PSARC/2007/694 and later). 729: ; flags 730: : 0 or one of the following: NSS_FINDER_V1API, NSS_FINDER_EXTENSION 731: ; opt_list 732: : Array of options found during the lookup operation. This data should be treated as read only, unless stated otherwise. The data must be freed by the free_ext API. 733: ; count 734: : Number of found options. 735: ; finder_priv 736: : Opaque internal backend data. this data must be freed by delete_ext 737: 738: The query API returns the list of found options. The data is considered direct read-only pointers into the applicable backend library. The opt_list and count may be passed back through repeated lookup_ext calls, if the caller wants to add non-duplicate new entries to the current list. 739: 740: A NULL db_name is a wildcard allowing the lookup operation to report for any database. A NULL src_name is a wildcard allowing the lookup operation to report for any source. 741: 742: If the api_list and count or finder_priv pointers are NULL, then the query fails with a EINVAL errno. 743: 744: Only version 2 backends with versioning information are queried. All other backends are ignored. 745: 746: Specific options may be enabled as read/write. See the versioning section on options for details. 747: 748: Flags: 749: 750: ; 0 751: : Perform a version 2 option query 752: 753: === [[5.7.4 free_ext>>#id30]] 754: 755: {{{ 756: 757: void (*free_ext) 758: (nss_backend_src_t ***be_list, uint32_t *be_cnt, 759: nss_backend_api_t ***api_list, uint32_t *api_cnt, 760: nss_backend_opt_t ***opt_list, uint32_t *opt_cnt, 761: void **finder_priv); 762: 763: }}} 764: 765: This API frees one or more lists. 766: 767: If be_list and be_cnt are non NULL, this API will free the be_list. be_cnt is assumed to the appropriate length. 768: 769: If api_list and api_cnt are non NULL, this API will free the api_list. api_cnt is assumed to the appropriate length. 770: 771: If opt_list and opt_cnt are non NULL, this API will free the opt_list. opt_cnt is assumed to the appropriate length. 772: 773: finder_priv is currently ignored. 774: 775: === [[5.7.5 delete_ext>>#id31]] 776: 777: {{{ 778: 779: void (*delete_ext)(void **finder_priv); 780: 781: }}} 782: 783: This API frees the finder_priv data, and closes any unclosed backends. One the delete_ext API is called any copies or references to any internal nss backend details is invalid. 784: 785: == [[5.8 Naming Semantics>>#id32]] 786: 787: This section defines the symbol name formats as defined by PSARC/2007/694 and previous. 788: 789: === [[5.8.1 Versioning symbols>>#id33]] 790: 791: Are of the form: 792: 793: {{{ 794: 795: _nss_[src_name]_version 796: 797: }}} 798: 799: * Where src_name is the name of a backend source such as "files". 800: 801: === [[5.8.2 DL Library Names>>#id34]] 802: 803: Are of the form: 804: 805: {{{ 806: 807: nss_[src_name].so.1 808: 809: }}} 810: 811: * Where src_name is the name of a backend source such as "files". 812: 813: === [[5.8.3 Version 1 constructor symbols>>#id35]] 814: 815: Are of the form: 816: 817: {{{ 818: 819: _nss_[src_name]_[db_name]_constr 820: 821: }}} 822: 823: * Where src_name is the name of a backend source such as "files". 824: * Where db_name is the name of a database such as "hosts". 825: 826: === [[5.8.4 Version 2 get/put/... API symbols>>#id36]] 827: 828: Are of the form: 829: 830: {{{ 831: 832: _nss_[op_name]_[src_name]_[db_name]_[key] 833: 834: }}} 835: 836: * Where operation is one of : get, put, setent, getent, endent 837: * Where src_name is the name of a backend source such as "files". 838: * Where db_name is the name of a database such as "hosts". 839: * Where key is one of the supported key types such as name, uid, gid, etc... 840: 841: === [[5.8.5 Version 2 option symbols>>#id37]] 842: 843: Are of the form: 844: 845: {{{ 846: 847: _nss_[src_name]_[db_name]_opt_[opt_name] 848: 849: }}} 850: 851: * Where src_name is the name of a backend source such as "files". 852: * Where db_name is the name of a database such as "hosts". 853: * Where opt_name is a supported option in the backend 854: 855: === [[5.8.6 Version 2 extension symbols>>#id38]] 856: 857: Are of the form: 858: 859: {{{ 860: 861: _nss_[src_name]_[ext_name]_[extop_name] 862: 863: }}} 864: 865: * Where src_name is the name of a backend source such as "files". 866: * Where ext_name is the name of an extension such as "config". 867: * Where extopt_name is a supported extension API in the backend
Search
Collectives
Community Group
Academic and Research
Accessibility
Advocacy
Appliances
Approachability
Architecture Process and Tools
BrandZ
Chinese Users
Community Advisory Board
Databases
Desktop
Device Drivers
Distribution
Documentation
DTrace
Emerging Platforms
Fault Management
Games on OpenSolaris
HA Clusters
HPC Developer
Installation and Packaging
Internationalization and Localization
Laptop
Logical Domains
Modular Debugger (MDB)
Networking
NFS
Observability
OpenSolaris Governing Board (OGB)
OpenSolaris Printing
OS/Net (ON)
Performance
Power Management
PowerPC
Security
Service Management Facility (smf(5))
Software Porters
Solaris Volume Manager
Storage
Systems Administration Community Group
Testing
Tools Home
Unix File Systems (UFS)
Website Community
X Window System
Xen
ZFS
Zones
Project
ADSL Modem Enhancement
ARC Process Definition
ARM Platform Port
Automatic Data Migration
BIND Update
Bluetooth Stack & Drivers
Brocade FC HBA - Initiator
Brocade FC HBA - Target
Brussels - unified network link configuration
Caiman, Solaris Install Revisited
Celeste
Český portál
Chime Visualization Tool for DTrace
CIFS client for Solaris
CIFS Server
Clearview: Network Interface Coherence
Cluster Agent: Informix Dynamic Server
Cluster Agent: OpenSolaris Container
Cluster Agent: OpenSolaris xVM
Cluster Agent: Oracle E-Business Suite
Cluster agent: PostgreSQL
Cluster Agent: Samba
Cluster Agent: Tomcat
CMT
Coarse Data Flow Parallelism
Colorado: Open HA Cluster on OpenSolaris
Command Assistant
Common Array Manager
Companion - /opt/sfw: Free and Open Source software
COMSTAR: Common Multiprotocol SCSI Target
Content
Contest
CPU Observability
Credentials Process Groups
Crossbow: Network Virtualization and Resource Control
Crypto KMS Agent Toolkit
Cryptographic Framework
Data Migration Manager
Data Tethers
Deutsches Portal
Device Detection Tool
Device Driver Utility
Device Manager
Device Mapper
Direct Rendering Infrastructure & 3D drivers
DTrace Guide
Duckwater: Simplified name services management
Easy Tools
Emancipation
Emulex Fibre Channel Device Driver
Emulex Advanced Ethernet Device Driver
Enable/Enhance Solaris support for Intel Platform
Enhance the support of USB webcams
Enhanced SMF Profiles
Enhancements for AMD-based Platforms
Erlang DTrace Integration
Ethernet bridge module for Solaris
Evaluate Conary
Events Registry
Ext3 file system support
F/OSS Package Base
Facilitation
Fibre Channel over Ethernet
Fine Grained Access Policy (FGAP)
Fingerprint Authentication
Flexible Mandatory Access Control
Forensic Tools
Fully Open X Project
Fuse on Solaris
gcore
Generic Machine Check Architecture Improvements
Google SOC
HA-JBoss
HA-MySQL
Hadoop Live CD
Hitachi
HoneyComb Fixed Content Storage
HPC Stack
Image Packaging System
Improved Performance MIB
Indiana
Innovation Awards
Input Method
Intel Graphics
Internet Key Exchange, version 2
Interrupt Resource Management
IP Datapath Refactoring
IP over Infiniband
IPsec Tunnel Reform
iSCSI Extensions for Remote DMA (iSER)
iSNS Server
JeOS - Just enough Operating System
JKstat - a java binding for libkstat
Journaled File System (JFS)
K Desktop Environment
Kerberos
Kernel Sockets
Kernel SSL Enhancements
Key Management Framework
Korn Shell 93 integration/migration project
Labeled IPsec
LatencyTOP
Layer 2 Filtering
LDoms Manager
Lending
libMicro - portable microbenchmarks
Link Layer Discovery
Live Media: Technologies for distributions running from CD and other media
Locale Data
lofi compression and cryptography support
lx64 brand
Media Management System
Mega_sas
Mexico
MilaX minimal Live Distribution
MIPS Platform Port
Mozilla DTrace
MRSL.NONsharedDevice
Multi-lingual Glossary
Multi-pathing software (MPxIO)
Multiple disk sector size support
Multiple DOI
Muskoka: An open repository for OpenSolaris technical content
Navigator
Nemo: A Framework for High-Performance Networking
Network Auto-Magic
Network Data Management Protocol
Network MIBs
Network Performance Projects
Network Storage
Network Time Protocol (NTP)
Nevada Globalization
New Design of 4over6 Mechanism Based on OpenSolaris
NFS RDMA transport update and performance analysis
NFS Server in non-Global Zones
NFS version 4.1 pNFS
NFSv4 namespace extensions
Nightingale: Port Songbird to OpenSolaris
NPort ID Virtualization (NPIV)
NUMA
Object Storage Device (OSD) support for Solaris
OHACGE Script Based Plug-in
ON/Nevada (ONNV) Project
Open Development Infrastructure
Open HA Cluster Utilities
Open Sound System
OpenGrok
OpenPegasus CIM Server
OpenRTI
OpenSolaris Busybox
OpenSolaris Desktop
OpenSolaris Hispano
OpenSolaris Security Audit
OpenSolaris support for the QEMU processor emulator: host and guest
PEF: Packet Event Framework
Performance Wrappers
Pkgfactory
Polski Portal
Portail Francophone
Portal Brasil
Portals
Power Management Usability Interfaces
Presto: Automatic Printing Configuration
Printable Many Page Solaris Manuals
Promise SuperTrak RAID HBA Driver
QLogic Converged Network Adapter GLDv3 NIC Driver
Quagga Routing Protocol Suite Integration
RAID Configuration Utility
RBridge (IETF TRILL) support
RDMA Offload Framework
Reno: Login Process Enhancements for Interop
Resource Management
s10brand
SAM/QFS
SCM Migration Project
SCSI RDMA Protocol
SDcard Drivers
Sensor Abstraction Layer
Session Initiation Protocol
SFW
Shell: bourne shell, korn shell, C shell, etc.
Sierra: Intel WiFi Chipsets Support
Simple Panels
SM-HBA Based SAS HBA Management
SMF Documentation
Solaris iSCSI Target
Solaris PowerPC Port
SourceJuicer
Sparks: name service switch/nscd enhancements
Squashfs
Star integration/migration project
Starfish
Starter Kit
Storage Power Management
Sun Security Toolkit
Sun StorageTek Availability Suite
Support for OpenFabrics User Verbs / API on OpenSolaris OS
Support gcc4/GCCfss in Solaris
Suspend/Resume
SVR4 Packaging
Systemz
Tamarack: Removable Media Enhancements in Solaris
Tesla: OpenSolaris Enhanced Power Management
Test Development
Tickless Kernel Architecture
TIPC
Trademarks
Trusted networking interface policy database for Trusted Extensions
Trusted Platform Module support
Use Case
Validated Execution Project
Virtual Console
Virtual Network Machines
Visual Panels
Visualization for HPC
Volo
VRRP: Virtual Router Redundancy Protocol Implementation
VSCAN service
Web Stack
Website
Winchester: Schema mapping and ID mapping for AD Interoperability
Wireless USB Support
Wireless Wide Area Network
X Consolidation
x86 Generic FMA Topology Enumerator
Xen Gate
Xfce: A lightweight desktop environment
ZFS Boot and Install
ZFS on disk encryption support
Zone Manager
Zone Statistics
Русский портал
البوابة العربية
भारतीय पोर्टल
中国门户
日本ポータル
한국 포탈
User Group
Adelaide
Argentina
Arizona
Atlanta
Baltimore-Washington
Bangalore
Bangkok
Bangladesh
Beijing
Bélem
Berlin
Bhimavaram
Bloomington
Campus Ambassadors
Capital Region
Cardiff
Ceara
Charlotte
Chengdu
Chennai
Chihuahua
Chile
Cleveland
Colombia
Columbus
Connecticut
Cracow
Czech
Dallas/Ft. Worth
Danish
Delaware
Edinburgh
Egypt
Finland
Florida
Front Range
FuZhou
Great Lakes
Greece
Hangzhou
Hawaii
HeFei
Houston
Hong Kong
Hyderabad
Indonesia
Irish
Israel
Italian
Jinan
Jogja
Kabul
Kansas City
Latvia
London
Madurai
Manchester
Mato Grosso
Melbourne
Minas Gerais
Minnesota
Montreal
Moscow
Mumbai
Munich
NEA
Netherlands
New England
New York City
New Zealand
NIT Hamirpur
Noroeste
Nuremberg-Erlangen
Oklahoma City
Osnabrück
Peru
Philadelphia
Piaski
Pittsburgh
Porto Alegre
Puget Sound
Pune
Queensland
Rio de Janeiro
Research Triangle Park
Romania
Russia
San Antonio
San Diego
San Francisco
São Paulo
Scottish
Serbia
Shanghai
Shenzhen
Silicon Valley
Singapore
Slovak
South African
Southern Connecticut
St. Louis
Stavanger
Sweden
Switzerland
Sydney
Szczecin
Taiwan
Tecum
Thames Valley
Tokyo
Toronto
Trondheim
Tulsa
Turkey
Ukraine
University of Melbourne
Vale do Paraíba
Vancouver
Venezuela
Welsh - Cymru
Wisconsin
Xi'an
Subsites
Code Reviews
Code Repositories
Package Search
Bugster
Bugzilla
Test Machines
Planet
Mailing Lists
Elections & Polls
ARC Case Logs
Source Juicer
Package Factory
User Authentication
Project duckwater Pages
Build Status & Gate Information
Documentation
Name Service Reconfiguration (SMF)
Tracked Project Bugs/RFEs
[NEW] Finder APIs
[NEW!] Legacy Configuration Files Support
[NEW!] libnsconf - Name services configuration library
Name Services Discovery
nsadm(1m) Draft Man Page
nscfg(1m) Draft Man Page
[NEW!] NSS config API draft
PSARC/2008/035 nss versioning API draft
[NEW!] Name Service Profiles
Requirements
Alpha2 Release Notes
Alpha1 Release Notes - Duckwater Demo
Duckwater Download Page
Duckwater Phase 0
Code-review
New Connection Management
Standalone ldapaddent(1M)
Standalone libldapclient(1M)
Standalone ldaplist(1)
Files
Duckwater/Mercurial Cheat sheet


Ah, Seattle! Home to legends like Nirvana, Pearl Jam, and Jimi Hendrix. Great music is born out of great places, and the PNW is no exception to that rule. In fact, there’s even a festival, dubbed Wainestock, celebrating all the burgeoning acts across the city. And, no, it’s not a reference to Wayne’s World (though I’ve been known to reference Wayne’s World whenever I can) it’s named after today’s featured musician, Joe Waine.
There’s a certain aura to Joe Waine’s music that’s both uniquely Pacific Northwest, and totally it’s own. Maybe it’s his casual flirtations with a Mellotron; the glisteningly calm undertones of his tunes; or maybe even just his time under the grey skies. Whatever his recipe, over here at SPIN we’re into it, so we were more than excited to hear Waine has ventured into creating music videos as well.
The title track off of his 2020 release, Fat Dreams of Italy, “Fabio Kush” sets the tone for the whole album with whimsical, psych-tinged indie-pop, complete with guitar flourishes and atmospheric textures. “Fabio Kush” feels at once hazy and clear, like waking up with a thought right on the tip of your tongue. Countryish piano, a rough but sensitive baritone, gentle percussion: if only we could get a swirl of flavors like this at our local frozen yogurt shop.
Of course, the dreamy ditty arrives with its own music video, which showcases Joe Waine and friends, adorned in their 17th century finest, frolicking in wind-shimmering lavender fields with -- you guessed it -- miniature horses. There’s swing dancing, heaps of visual ASMR, and an entire masquerade sequence -- all with a harpsichord-laden bonus track. Schwing!
Joe Waine’s “Fabio Kush” is a wonderful example of musician-turned-auteur, so check it out below.


Monitor the connection status to the driversttion.
More...
◆ ConnectionMonitor()
| frc.common.network.ConnectionMonitor.ConnectionMonitor |
( |
| ) |
|
|
private |
◆ getInstance()
◆ isConnected()
| boolean frc.common.network.ConnectionMonitor.isConnected |
( |
| ) |
|
Get the current connection status.
- Returns
- Is the robot connected to a driverstation
Definition at line 111 of file ConnectionMonitor.java.
◆ justConnected()
| boolean frc.common.network.ConnectionMonitor.justConnected |
( |
| ) |
|
Has the robot connected since the last time this function was called? (sticky)
Definition at line 119 of file ConnectionMonitor.java.
◆ justDisconnected()
| boolean frc.common.network.ConnectionMonitor.justDisconnected |
( |
| ) |
|
Has the robot disconnected since the last time this function was called? (sticky)
Definition at line 129 of file ConnectionMonitor.java.
◆ start()
| void frc.common.network.ConnectionMonitor.start |
( |
double |
period | ) |
|
◆ stop()
| void frc.common.network.ConnectionMonitor.stop |
( |
| ) |
|
◆ update()
| void frc.common.network.ConnectionMonitor.update |
( |
| ) |
|
|
private |
◆ instance
◆ is_connected
| boolean frc.common.network.ConnectionMonitor.is_connected |
|
private |
◆ last_connection_state
| boolean frc.common.network.ConnectionMonitor.last_connection_state = true |
|
private |
◆ timeout
| double frc.common.network.ConnectionMonitor.timeout = 0.5 |
|
private |
◆ timestamp
| double frc.common.network.ConnectionMonitor.timestamp = 0.0 |
|
private |
The documentation for this class was generated from the following file:


Portions copyright Richard Boulton, James Harvey, Mike Pinna, Jonas Kölker, Dariusz Olszewski, Michael Schierl, Lambros Lambrou and Bernd Schmidt.
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.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE